Skip to content

Commit 1f0bc86

Browse files
committed
make VARIANT fail better on non-Windows
1 parent 7f1a7ff commit 1f0bc86

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

crates/libs/bindgen/src/rust/extensions/mod/Win32/System/Com/IDispatch.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#[cfg(windows)]
12
impl From<IDispatch> for windows_core::VARIANT {
23
fn from(value: IDispatch) -> Self {
34
unsafe {
@@ -10,6 +11,7 @@ impl From<IDispatch> for windows_core::VARIANT {
1011
}
1112
}
1213

14+
#[cfg(windows)]
1315
impl From<IDispatch> for windows_core::PROPVARIANT {
1416
fn from(value: IDispatch) -> Self {
1517
unsafe {
@@ -22,6 +24,7 @@ impl From<IDispatch> for windows_core::PROPVARIANT {
2224
}
2325
}
2426

27+
#[cfg(windows)]
2528
impl TryFrom<&windows_core::VARIANT> for IDispatch {
2629
type Error = windows_core::Error;
2730
fn try_from(from: &windows_core::VARIANT) -> windows_core::Result<Self> {
@@ -37,6 +40,7 @@ impl TryFrom<&windows_core::VARIANT> for IDispatch {
3740
}
3841
}
3942

43+
#[cfg(windows)]
4044
impl TryFrom<&windows_core::PROPVARIANT> for IDispatch {
4145
type Error = windows_core::Error;
4246
fn try_from(from: &windows_core::PROPVARIANT) -> windows_core::Result<Self> {

crates/libs/core/src/variant.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![cfg_attr(not(windows), allow(unused_variables))]
2+
13
use super::*;
24
use core::mem::transmute;
35

@@ -23,30 +25,40 @@ impl Default for PROPVARIANT {
2325

2426
impl Clone for VARIANT {
2527
fn clone(&self) -> Self {
28+
#[cfg(windows)]
2629
unsafe {
2730
let mut value = Self::new();
2831
imp::VariantCopy(&mut value.0, &self.0);
2932
value
3033
}
34+
35+
#[cfg(not(windows))]
36+
unimplemented!();
3137
}
3238
}
3339

3440
impl Clone for PROPVARIANT {
3541
fn clone(&self) -> Self {
42+
#[cfg(windows)]
3643
unsafe {
3744
let mut value = Self::new();
3845
imp::PropVariantCopy(&mut value.0, &self.0);
3946
value
4047
}
48+
49+
#[cfg(not(windows))]
50+
unimplemented!();
4151
}
4252
}
4353

54+
#[cfg(windows)]
4455
impl Drop for VARIANT {
4556
fn drop(&mut self) {
4657
unsafe { imp::VariantClear(&mut self.0) };
4758
}
4859
}
4960

61+
#[cfg(windows)]
5062
impl Drop for PROPVARIANT {
5163
fn drop(&mut self) {
5264
unsafe { imp::PropVariantClear(&mut self.0) };
@@ -66,6 +78,7 @@ impl core::fmt::Debug for VARIANT {
6678
let mut debug = f.debug_struct("VARIANT");
6779
debug.field("type", &unsafe { self.0.Anonymous.Anonymous.vt });
6880

81+
#[cfg(windows)]
6982
if let Ok(value) = BSTR::try_from(self) {
7083
debug.field("value", &value);
7184
}
@@ -79,6 +92,7 @@ impl core::fmt::Debug for PROPVARIANT {
7992
let mut debug = f.debug_struct("PROPVARIANT");
8093
debug.field("type", &unsafe { self.0.Anonymous.Anonymous.vt });
8194

95+
#[cfg(windows)]
8296
if let Ok(value) = BSTR::try_from(self) {
8397
debug.field("value", &value);
8498
}
@@ -87,12 +101,14 @@ impl core::fmt::Debug for PROPVARIANT {
87101
}
88102
}
89103

104+
#[cfg(windows)]
90105
impl core::fmt::Display for VARIANT {
91106
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
92107
core::write!(f, "{}", BSTR::try_from(self).unwrap_or_default())
93108
}
94109
}
95110

111+
#[cfg(windows)]
96112
impl core::fmt::Display for PROPVARIANT {
97113
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
98114
core::write!(f, "{}", BSTR::try_from(self).unwrap_or_default())
@@ -101,6 +117,7 @@ impl core::fmt::Display for PROPVARIANT {
101117

102118
impl PartialEq for VARIANT {
103119
fn eq(&self, other: &Self) -> bool {
120+
#[cfg(windows)]
104121
unsafe {
105122
if self.0.Anonymous.Anonymous.vt != other.0.Anonymous.Anonymous.vt {
106123
return false;
@@ -114,18 +131,25 @@ impl PartialEq for VARIANT {
114131
false
115132
}
116133
}
134+
135+
#[cfg(not(windows))]
136+
unimplemented!();
117137
}
118138
}
119139

120140
impl PartialEq for PROPVARIANT {
121141
fn eq(&self, other: &Self) -> bool {
142+
#[cfg(windows)]
122143
unsafe {
123144
if self.0.Anonymous.Anonymous.vt != other.0.Anonymous.Anonymous.vt {
124145
return false;
125146
}
126147

127148
imp::PropVariantCompareEx(&self.0, &other.0, 0, 0) == 0
128149
}
150+
151+
#[cfg(not(windows))]
152+
unimplemented!();
129153
}
130154
}
131155

@@ -188,6 +212,7 @@ impl PROPVARIANT {
188212
}
189213
}
190214

215+
#[cfg(windows)]
191216
impl TryFrom<&VARIANT> for PROPVARIANT {
192217
type Error = Error;
193218
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -198,6 +223,7 @@ impl TryFrom<&VARIANT> for PROPVARIANT {
198223
}
199224
}
200225

226+
#[cfg(windows)]
201227
impl TryFrom<&PROPVARIANT> for VARIANT {
202228
type Error = Error;
203229
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -316,18 +342,21 @@ impl From<BSTR> for PROPVARIANT {
316342
}
317343
}
318344

345+
#[cfg(windows)]
319346
impl From<&str> for VARIANT {
320347
fn from(value: &str) -> Self {
321348
BSTR::from(value).into()
322349
}
323350
}
324351

352+
#[cfg(windows)]
325353
impl From<&str> for PROPVARIANT {
326354
fn from(value: &str) -> Self {
327355
BSTR::from(value).into()
328356
}
329357
}
330358

359+
#[cfg(windows)]
331360
impl TryFrom<&VARIANT> for BSTR {
332361
type Error = Error;
333362
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -336,6 +365,7 @@ impl TryFrom<&VARIANT> for BSTR {
336365
}
337366
}
338367

368+
#[cfg(windows)]
339369
impl TryFrom<&PROPVARIANT> for BSTR {
340370
type Error = Error;
341371
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -383,6 +413,7 @@ impl From<bool> for PROPVARIANT {
383413
}
384414
}
385415

416+
#[cfg(windows)]
386417
impl TryFrom<&VARIANT> for bool {
387418
type Error = Error;
388419
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -391,6 +422,7 @@ impl TryFrom<&VARIANT> for bool {
391422
}
392423
}
393424

425+
#[cfg(windows)]
394426
impl TryFrom<&PROPVARIANT> for bool {
395427
type Error = Error;
396428
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -501,6 +533,7 @@ impl From<u16> for PROPVARIANT {
501533
}
502534
}
503535

536+
#[cfg(windows)]
504537
impl TryFrom<&VARIANT> for u16 {
505538
type Error = Error;
506539
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -509,6 +542,7 @@ impl TryFrom<&VARIANT> for u16 {
509542
}
510543
}
511544

545+
#[cfg(windows)]
512546
impl TryFrom<&PROPVARIANT> for u16 {
513547
type Error = Error;
514548
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -551,6 +585,7 @@ impl From<i16> for PROPVARIANT {
551585
}
552586
}
553587

588+
#[cfg(windows)]
554589
impl TryFrom<&VARIANT> for i16 {
555590
type Error = Error;
556591
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -559,6 +594,7 @@ impl TryFrom<&VARIANT> for i16 {
559594
}
560595
}
561596

597+
#[cfg(windows)]
562598
impl TryFrom<&PROPVARIANT> for i16 {
563599
type Error = Error;
564600
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -601,6 +637,7 @@ impl From<u32> for PROPVARIANT {
601637
}
602638
}
603639

640+
#[cfg(windows)]
604641
impl TryFrom<&VARIANT> for u32 {
605642
type Error = Error;
606643
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -609,6 +646,7 @@ impl TryFrom<&VARIANT> for u32 {
609646
}
610647
}
611648

649+
#[cfg(windows)]
612650
impl TryFrom<&PROPVARIANT> for u32 {
613651
type Error = Error;
614652
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -651,6 +689,7 @@ impl From<i32> for PROPVARIANT {
651689
}
652690
}
653691

692+
#[cfg(windows)]
654693
impl TryFrom<&VARIANT> for i32 {
655694
type Error = Error;
656695
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -659,6 +698,7 @@ impl TryFrom<&VARIANT> for i32 {
659698
}
660699
}
661700

701+
#[cfg(windows)]
662702
impl TryFrom<&PROPVARIANT> for i32 {
663703
type Error = Error;
664704
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -701,6 +741,7 @@ impl From<u64> for PROPVARIANT {
701741
}
702742
}
703743

744+
#[cfg(windows)]
704745
impl TryFrom<&VARIANT> for u64 {
705746
type Error = Error;
706747
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -709,6 +750,7 @@ impl TryFrom<&VARIANT> for u64 {
709750
}
710751
}
711752

753+
#[cfg(windows)]
712754
impl TryFrom<&PROPVARIANT> for u64 {
713755
type Error = Error;
714756
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -751,6 +793,7 @@ impl From<i64> for PROPVARIANT {
751793
}
752794
}
753795

796+
#[cfg(windows)]
754797
impl TryFrom<&VARIANT> for i64 {
755798
type Error = Error;
756799
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -759,6 +802,7 @@ impl TryFrom<&VARIANT> for i64 {
759802
}
760803
}
761804

805+
#[cfg(windows)]
762806
impl TryFrom<&PROPVARIANT> for i64 {
763807
type Error = Error;
764808
fn try_from(from: &PROPVARIANT) -> Result<Self> {
@@ -835,6 +879,7 @@ impl From<f64> for PROPVARIANT {
835879
}
836880
}
837881

882+
#[cfg(windows)]
838883
impl TryFrom<&VARIANT> for f64 {
839884
type Error = Error;
840885
fn try_from(from: &VARIANT) -> Result<Self> {
@@ -843,6 +888,7 @@ impl TryFrom<&VARIANT> for f64 {
843888
}
844889
}
845890

891+
#[cfg(windows)]
846892
impl TryFrom<&PROPVARIANT> for f64 {
847893
type Error = Error;
848894
fn try_from(from: &PROPVARIANT) -> Result<Self> {

crates/libs/windows/src/Windows/Win32/System/Com/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7664,6 +7664,7 @@ pub type LPEXCEPFINO_DEFERRED_FILLIN = Option<unsafe extern "system" fn(pexcepin
76647664
pub type LPFNCANUNLOADNOW = Option<unsafe extern "system" fn() -> windows_core::HRESULT>;
76657665
pub type LPFNGETCLASSOBJECT = Option<unsafe extern "system" fn(param0: *const windows_core::GUID, param1: *const windows_core::GUID, param2: *mut *mut core::ffi::c_void) -> windows_core::HRESULT>;
76667666
pub type PFNCONTEXTCALL = Option<unsafe extern "system" fn(pparam: *mut ComCallData) -> windows_core::HRESULT>;
7667+
#[cfg(windows)]
76677668
impl From<IDispatch> for windows_core::VARIANT {
76687669
fn from(value: IDispatch) -> Self {
76697670
unsafe {
@@ -7676,6 +7677,7 @@ impl From<IDispatch> for windows_core::VARIANT {
76767677
}
76777678
}
76787679

7680+
#[cfg(windows)]
76797681
impl From<IDispatch> for windows_core::PROPVARIANT {
76807682
fn from(value: IDispatch) -> Self {
76817683
unsafe {
@@ -7688,6 +7690,7 @@ impl From<IDispatch> for windows_core::PROPVARIANT {
76887690
}
76897691
}
76907692

7693+
#[cfg(windows)]
76917694
impl TryFrom<&windows_core::VARIANT> for IDispatch {
76927695
type Error = windows_core::Error;
76937696
fn try_from(from: &windows_core::VARIANT) -> windows_core::Result<Self> {
@@ -7703,6 +7706,7 @@ impl TryFrom<&windows_core::VARIANT> for IDispatch {
77037706
}
77047707
}
77057708

7709+
#[cfg(windows)]
77067710
impl TryFrom<&windows_core::PROPVARIANT> for IDispatch {
77077711
type Error = windows_core::Error;
77087712
fn try_from(from: &windows_core::PROPVARIANT) -> windows_core::Result<Self> {

0 commit comments

Comments
 (0)