Skip to content

Commit

Permalink
Converge on underlying types (#1368)
Browse files Browse the repository at this point in the history
  • Loading branch information
kennykerr committed Nov 29, 2021
1 parent 23ff38b commit f302772
Show file tree
Hide file tree
Showing 527 changed files with 22,904 additions and 110,040 deletions.
18 changes: 9 additions & 9 deletions .github/workflows/build.yml
Expand Up @@ -50,10 +50,10 @@ jobs:
rust: nightly
other: x86_64-pc-windows-gnu
platform: x64
# - os: windows-latest
# rust: stable
# other: i686-pc-windows-gnu
# platform: x86
- os: windows-latest
rust: stable
other: i686-pc-windows-gnu
platform: x86
steps:
- name: Checkout
uses: actions/checkout@v2
Expand Down Expand Up @@ -88,13 +88,13 @@ jobs:
$MingwPath | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
if: contains(matrix.other, 'windows-gnu')

- name: Build (${{ matrix.os }})
run: cargo build
if: matrix.os == 'ubuntu-latest'
- name: Check (${{ matrix.os }})
run: cargo check
if: contains(matrix.other, 'windows-gnu')

- name: Build (${{ matrix.os }})
- name: Test (${{ matrix.os }})
run: cargo test --all --target ${{ matrix.other }}
if: matrix.os == 'windows-latest'
if: contains(matrix.other, 'windows-msvc')

cargo_fmt:
name: Check cargo formatting
Expand Down
Binary file modified .windows/arm64/component.dll
Binary file not shown.
Binary file modified .windows/arm64/component.lib
Binary file not shown.
Binary file modified .windows/winmd/Component.Win32.winmd
Binary file not shown.
Binary file modified .windows/winmd/Component.winmd
Binary file not shown.
Binary file modified .windows/winmd/StaticComponent.Win32.winmd
Binary file not shown.
Binary file modified .windows/x64/component.dll
Binary file not shown.
Binary file modified .windows/x64/component.lib
Binary file not shown.
Binary file modified .windows/x64/static_component.lib
Binary file not shown.
Binary file modified .windows/x86/component.dll
Binary file not shown.
Binary file modified .windows/x86/component.lib
Binary file not shown.
2 changes: 1 addition & 1 deletion crates/deps/gen/src/callback.rs
Expand Up @@ -19,6 +19,6 @@ pub fn gen_callback(def: &TypeDef, gen: &Gen) -> TokenStream {

quote! {
#cfg
pub type #name = unsafe extern "system" fn(#(#params),*) #return_sig;
pub type #name = ::core::option::Option<unsafe extern "system" fn(#(#params),*) #return_sig>;
}
}
2 changes: 1 addition & 1 deletion crates/deps/gen/src/delegate.rs
Expand Up @@ -110,7 +110,7 @@ pub fn gen_delegate(def: &TypeDef, gen: &Gen) -> TokenStream {
// TODO: implement IMarshal

if (*interface).is_null() {
::windows::core::HRESULT(0x8000_4002) // E_NOINTERFACE
::windows::core::HRESULT(-2147467262) // E_NOINTERFACE
} else {
(*this).count.add_ref();
::windows::core::HRESULT(0)
Expand Down
34 changes: 3 additions & 31 deletions crates/deps/gen/src/gen.rs
Expand Up @@ -18,13 +18,7 @@ impl Gen {
}

pub fn build(namespace: &'static str, redirect: bool) -> Self {
Gen {
relative: namespace,
root: "",
ignore_windows_features: false,
docs: false,
build: redirect,
}
Gen { relative: namespace, root: "", ignore_windows_features: false, docs: false, build: redirect }
}

pub fn namespace(&self, namespace: &str) -> TokenStream {
Expand Down Expand Up @@ -248,33 +242,11 @@ mod tests {
let mut features = BTreeSet::new();
features.insert("Windows.Foundation");
assert_eq!(Gen { root: "Microsoft", relative: "", ignore_windows_features: false, docs: false, build: false }.gen_cfg(&features).as_str(), r#"#[cfg(feature = "Windows_Foundation")]"#);
assert_eq!(
Gen {
root: "Microsoft",
relative: "Microsoft.UI.Composition.Diagnostics",
ignore_windows_features: false,
docs: true,
build: false,
}
.gen_cfg_doc(&features)
.as_str(),
r#"#[doc = "*Required features: `UI_Composition_Diagnostics`, `Windows_Foundation`*"]"#
);
assert_eq!(Gen { root: "Microsoft", relative: "Microsoft.UI.Composition.Diagnostics", ignore_windows_features: false, docs: true, build: false }.gen_cfg_doc(&features).as_str(), r#"#[doc = "*Required features: `UI_Composition_Diagnostics`, `Windows_Foundation`*"]"#);

let mut features = BTreeSet::new();
features.insert("Microsoft.Foundation");
assert_eq!(Gen { root: "Microsoft", relative: "", ignore_windows_features: false, docs: false, build: false }.gen_cfg(&features).as_str(), r#"#[cfg(feature = "Foundation")]"#);
assert_eq!(
Gen {
root: "Microsoft",
relative: "Microsoft.UI.Composition.Diagnostics",
ignore_windows_features: false,
docs: true,
build: false,
}
.gen_cfg_doc(&features)
.as_str(),
r#"#[doc = "*Required features: `UI_Composition_Diagnostics`, `Foundation`*"]"#
);
assert_eq!(Gen { root: "Microsoft", relative: "Microsoft.UI.Composition.Diagnostics", ignore_windows_features: false, docs: true, build: false }.gen_cfg_doc(&features).as_str(), r#"#[doc = "*Required features: `UI_Composition_Diagnostics`, `Foundation`*"]"#);
}
}
7 changes: 1 addition & 6 deletions crates/deps/gen/src/interface_info.rs
Expand Up @@ -40,12 +40,7 @@ impl InterfaceInfo {
let overload = method_names.entry(name.clone()).or_insert(0);
*overload += 1;

let info = MethodInfo {
name,
vtable_offset: vtable_offset as u32 + 6,
overload: *overload,
is_deprecated: method.is_deprecated(),
};
let info = MethodInfo { name, vtable_offset: vtable_offset as u32 + 6, overload: *overload, is_deprecated: method.is_deprecated() };

let signature = method.signature(&interface.def.generics);
tokens.combine(&gen_winrt_method(&signature, &info, interface, gen));
Expand Down
4 changes: 2 additions & 2 deletions crates/deps/gen/src/ntstatus.rs
Expand Up @@ -4,12 +4,12 @@ pub fn gen_ntstatus() -> TokenStream {
quote! {
#[repr(transparent)]
#[derive(::core::default::Default, ::core::clone::Clone, ::core::marker::Copy, ::core::cmp::PartialEq, ::core::cmp::Eq, ::core::fmt::Debug)]
pub struct NTSTATUS(pub u32);
pub struct NTSTATUS(pub i32);

impl NTSTATUS {
#[inline]
pub const fn is_ok(self) -> bool {
self.0 & 0x8000_0000 == 0
self.0 >= 0
}

#[inline]
Expand Down
6 changes: 1 addition & 5 deletions crates/deps/gen/src/win32_error.rs
Expand Up @@ -4,11 +4,7 @@ pub fn gen_win32_error() -> TokenStream {
quote! {
impl ::core::convert::From<WIN32_ERROR> for ::windows::core::HRESULT {
fn from(value: WIN32_ERROR) -> Self {
Self(if value.0 as i32 <= 0 {
value.0
} else {
(value.0 & 0x0000_FFFF) | (7 << 16) | 0x8000_0000
})
Self(if value.0 as i32 <= 0 { value.0 } else { (value.0 & 0x0000_FFFF) | (7 << 16) | 0x8000_0000 } as _)
}
}
}
Expand Down
4 changes: 1 addition & 3 deletions crates/deps/quote/src/token_stream.rs
Expand Up @@ -149,9 +149,7 @@ impl Literal {
unsuffixed!(u8 => u8_unsuffixed);

pub fn byte_string(s: &[u8]) -> Self {
Self {
inner: format!("b\"{}\"", core::str::from_utf8(s).expect("Could not turn bytes into byte literal")),
}
Self { inner: format!("b\"{}\"", core::str::from_utf8(s).expect("Could not turn bytes into byte literal")) }
}

pub fn as_str(&self) -> &str {
Expand Down
5 changes: 1 addition & 4 deletions crates/deps/reader/src/tables/method_def.rs
Expand Up @@ -101,10 +101,7 @@ impl MethodDef {
return_param = Some(param);
None
} else {
Some(MethodParam {
param,
signature: reader.signature_from_blob(&mut blob, None, generics).expect("MethodDef"),
})
Some(MethodParam { param, signature: reader.signature_from_blob(&mut blob, None, generics).expect("MethodDef") })
}
})
.collect();
Expand Down
7 changes: 6 additions & 1 deletion crates/deps/reader/src/tables/type_def.rs
Expand Up @@ -426,6 +426,7 @@ impl TypeDef {
}
}
TypeKind::Enum => true,
TypeKind::Delegate => !self.is_winrt(),
_ => false,
}
}
Expand Down Expand Up @@ -465,7 +466,11 @@ impl TypeDef {
}

pub fn is_nullable(&self) -> bool {
matches!(self.kind(), TypeKind::Interface | TypeKind::Class | TypeKind::Delegate)
match self.kind() {
TypeKind::Interface | TypeKind::Class => true,
TypeKind::Delegate => self.is_winrt(),
_ => false,
}
}

pub fn enclosing_type(&self) -> Option<Self> {
Expand Down
4 changes: 2 additions & 2 deletions crates/deps/reader/src/type_name.rs
Expand Up @@ -87,9 +87,9 @@ impl TypeName {
Self { namespace, name: trim_tick(name) }
}

pub fn parse(full_name: &'static str) -> Self {
pub fn parse(full_name: &str) -> (&str, &str) {
let index = full_name.rfind('.').expect("Expected full name separated with `.`");
Self::new(&full_name[0..index], &full_name[index + 1..])
(&full_name[0..index], &full_name[index + 1..])
}
}

Expand Down
16 changes: 5 additions & 11 deletions crates/deps/reader/src/type_reader.rs
Expand Up @@ -160,6 +160,10 @@ impl TypeReader {
self.types.get_namespace(type_name.namespace()).and_then(|tree| tree.get_type(type_name.name())).and_then(|entry| entry.def.first())
}

pub fn get_namespace(&self, namespace: &str) -> Option<&TypeTree> {
self.types.get_namespace(namespace)
}

pub fn expect_type_def<T: HasTypeName>(&'static self, type_name: T) -> TypeDef {
self.get_type(type_name).and_then(|def| if let ElementType::TypeDef(def) = def { Some(def.clone()) } else { None }).unwrap_or_else(|| panic!("Expected type not found `{}.{}`", type_name.namespace(), type_name.name()))
}
Expand Down Expand Up @@ -267,14 +271,4 @@ fn is_well_known(type_name: TypeName) -> bool {

const REMAP_TYPES: [(TypeName, TypeName); 1] = [(TypeName::D2D_MATRIX_3X2_F, TypeName::Matrix3x2)];

const WELL_KNOWN_TYPES: [(TypeName, ElementType); 9] = [
(TypeName::GUID, ElementType::GUID),
(TypeName::IUnknown, ElementType::IUnknown),
(TypeName::HResult, ElementType::HRESULT),
(TypeName::HRESULT, ElementType::HRESULT),
(TypeName::HSTRING, ElementType::String),
(TypeName::IInspectable, ElementType::IInspectable),
(TypeName::LARGE_INTEGER, ElementType::I64),
(TypeName::ULARGE_INTEGER, ElementType::U64),
(TypeName::Type, ElementType::TypeName),
];
const WELL_KNOWN_TYPES: [(TypeName, ElementType); 9] = [(TypeName::GUID, ElementType::GUID), (TypeName::IUnknown, ElementType::IUnknown), (TypeName::HResult, ElementType::HRESULT), (TypeName::HRESULT, ElementType::HRESULT), (TypeName::HSTRING, ElementType::String), (TypeName::IInspectable, ElementType::IInspectable), (TypeName::LARGE_INTEGER, ElementType::I64), (TypeName::ULARGE_INTEGER, ElementType::U64), (TypeName::Type, ElementType::TypeName)];
35 changes: 2 additions & 33 deletions crates/deps/sys/src/Windows/Win32/Data/RightsManagement/mod.rs
Expand Up @@ -80,21 +80,7 @@ extern "system" {
#[cfg(feature = "Win32_Foundation")]
pub fn DRMGetIssuanceLicenseTemplate(hissuancelicense: u32, puissuancelicensetemplatelength: *mut u32, wszissuancelicensetemplate: super::super::Foundation::PWSTR) -> ::windows_sys::core::HRESULT;
#[cfg(feature = "Win32_Foundation")]
pub fn DRMGetMetaData(
hissuancelicense: u32,
pucontentidlength: *mut u32,
wszcontentid: super::super::Foundation::PWSTR,
pucontentidtypelength: *mut u32,
wszcontentidtype: super::super::Foundation::PWSTR,
puskuidlength: *mut u32,
wszskuid: super::super::Foundation::PWSTR,
puskuidtypelength: *mut u32,
wszskuidtype: super::super::Foundation::PWSTR,
pucontenttypelength: *mut u32,
wszcontenttype: super::super::Foundation::PWSTR,
pucontentnamelength: *mut u32,
wszcontentname: super::super::Foundation::PWSTR,
) -> ::windows_sys::core::HRESULT;
pub fn DRMGetMetaData(hissuancelicense: u32, pucontentidlength: *mut u32, wszcontentid: super::super::Foundation::PWSTR, pucontentidtypelength: *mut u32, wszcontentidtype: super::super::Foundation::PWSTR, puskuidlength: *mut u32, wszskuid: super::super::Foundation::PWSTR, puskuidtypelength: *mut u32, wszskuidtype: super::super::Foundation::PWSTR, pucontenttypelength: *mut u32, wszcontenttype: super::super::Foundation::PWSTR, pucontentnamelength: *mut u32, wszcontentname: super::super::Foundation::PWSTR) -> ::windows_sys::core::HRESULT;
#[cfg(feature = "Win32_Foundation")]
pub fn DRMGetNameAndDescription(hissuancelicense: u32, uindex: u32, pulcid: *mut u32, punamelength: *mut u32, wszname: super::super::Foundation::PWSTR, pudescriptionlength: *mut u32, wszdescription: super::super::Foundation::PWSTR) -> ::windows_sys::core::HRESULT;
#[cfg(feature = "Win32_Foundation")]
Expand Down Expand Up @@ -126,24 +112,7 @@ extern "system" {
#[cfg(feature = "Win32_Foundation")]
pub fn DRMGetUnboundLicenseObjectCount(hqueryroot: u32, wszsubobjecttype: super::super::Foundation::PWSTR, pcsubobjects: *mut u32) -> ::windows_sys::core::HRESULT;
#[cfg(feature = "Win32_Foundation")]
pub fn DRMGetUsagePolicy(
hissuancelicense: u32,
uindex: u32,
peusagepolicytype: *mut DRM_USAGEPOLICY_TYPE,
pfexclusion: *mut super::super::Foundation::BOOL,
punamelength: *mut u32,
wszname: super::super::Foundation::PWSTR,
puminversionlength: *mut u32,
wszminversion: super::super::Foundation::PWSTR,
pumaxversionlength: *mut u32,
wszmaxversion: super::super::Foundation::PWSTR,
pupublickeylength: *mut u32,
wszpublickey: super::super::Foundation::PWSTR,
pudigestalgorithmlength: *mut u32,
wszdigestalgorithm: super::super::Foundation::PWSTR,
pcbdigest: *mut u32,
pbdigest: *mut u8,
) -> ::windows_sys::core::HRESULT;
pub fn DRMGetUsagePolicy(hissuancelicense: u32, uindex: u32, peusagepolicytype: *mut DRM_USAGEPOLICY_TYPE, pfexclusion: *mut super::super::Foundation::BOOL, punamelength: *mut u32, wszname: super::super::Foundation::PWSTR, puminversionlength: *mut u32, wszminversion: super::super::Foundation::PWSTR, pumaxversionlength: *mut u32, wszmaxversion: super::super::Foundation::PWSTR, pupublickeylength: *mut u32, wszpublickey: super::super::Foundation::PWSTR, pudigestalgorithmlength: *mut u32, wszdigestalgorithm: super::super::Foundation::PWSTR, pcbdigest: *mut u32, pbdigest: *mut u8) -> ::windows_sys::core::HRESULT;
#[cfg(feature = "Win32_Foundation")]
pub fn DRMGetUserInfo(huser: u32, puusernamelength: *mut u32, wszusername: super::super::Foundation::PWSTR, puuseridlength: *mut u32, wszuserid: super::super::Foundation::PWSTR, puuseridtypelength: *mut u32, wszuseridtype: super::super::Foundation::PWSTR) -> ::windows_sys::core::HRESULT;
pub fn DRMGetUserRights(hissuancelicense: u32, huser: u32, uindex: u32, phright: *mut u32) -> ::windows_sys::core::HRESULT;
Expand Down
Expand Up @@ -61,12 +61,7 @@ extern "system" {
}
pub const FACILITY_NONE: u32 = 0u32;
pub const FACILITY_WINBIO: u32 = 9u32;
pub const GUID_DEVINTERFACE_BIOMETRIC_READER: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 3803519034,
data2: 39402,
data3: 19651,
data4: [173, 107, 128, 202, 141, 113, 91, 128],
};
pub const GUID_DEVINTERFACE_BIOMETRIC_READER: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 3803519034, data2: 39402, data3: 19651, data4: [173, 107, 128, 202, 141, 113, 91, 128] };
pub const IOCTL_BIOMETRIC_VENDOR: u32 = 4464640u32;
#[cfg(all(feature = "Win32_Foundation", feature = "Win32_System_IO"))]
pub type PIBIO_ENGINE_ACCEPT_PRIVATE_SENSOR_TYPE_INFO_FN = ::core::option::Option<unsafe extern "system" fn(pipeline: *mut WINBIO_PIPELINE, typeinfobufferaddress: *const u8, typeinfobuffersize: usize) -> ::windows_sys::core::HRESULT>;
Expand Down
56 changes: 8 additions & 48 deletions crates/deps/sys/src/Windows/Win32/Devices/Bluetooth/mod.rs
Expand Up @@ -969,56 +969,16 @@ pub const FaxServiceClassID_UUID16: u32 = 4369u32;
pub const GNSSProfileID_UUID16: u32 = 4405u32;
pub const GNSSServerServiceClassID_UUID16: u32 = 4406u32;
pub const GNServiceClassID_UUID16: u32 = 4375u32;
pub const GUID_BLUETOOTHLE_DEVICE_INTERFACE: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 2015030808,
data2: 30515,
data3: 19684,
data4: [173, 208, 145, 244, 28, 103, 181, 146],
};
pub const GUID_BLUETOOTH_AUTHENTICATION_REQUEST: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 1573458797,
data2: 39276,
data3: 18139,
data4: [132, 245, 50, 192, 163, 244, 115, 82],
};
pub const GUID_BLUETOOTHLE_DEVICE_INTERFACE: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 2015030808, data2: 30515, data3: 19684, data4: [173, 208, 145, 244, 28, 103, 181, 146] };
pub const GUID_BLUETOOTH_AUTHENTICATION_REQUEST: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 1573458797, data2: 39276, data3: 18139, data4: [132, 245, 50, 192, 163, 244, 115, 82] };
pub const GUID_BLUETOOTH_GATT_SERVICE_DEVICE_INTERFACE: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 1849407097, data2: 17266, data3: 16584, data4: [158, 170, 69, 9, 223, 38, 12, 216] };
pub const GUID_BLUETOOTH_HCI_EVENT: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 4230217826,
data2: 5441,
data3: 18878,
data4: [180, 99, 132, 196, 220, 215, 191, 127],
};
pub const GUID_BLUETOOTH_HCI_VENDOR_EVENT: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 1416775654,
data2: 17851,
data3: 19507,
data4: [175, 140, 192, 14, 254, 21, 167, 29],
};
pub const GUID_BLUETOOTH_HCI_EVENT: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 4230217826, data2: 5441, data3: 18878, data4: [180, 99, 132, 196, 220, 215, 191, 127] };
pub const GUID_BLUETOOTH_HCI_VENDOR_EVENT: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 1416775654, data2: 17851, data3: 19507, data4: [175, 140, 192, 14, 254, 21, 167, 29] };
pub const GUID_BLUETOOTH_KEYPRESS_EVENT: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 3597197261, data2: 3918, data3: 20220, data4: [191, 224, 57, 46, 238, 197, 16, 156] };
pub const GUID_BLUETOOTH_L2CAP_EVENT: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 2125348912,
data2: 46857,
data3: 19112,
data4: [172, 85, 233, 83, 130, 156, 157, 170],
};
pub const GUID_BLUETOOTH_RADIO_IN_RANGE: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 3929758594,
data2: 9966,
data3: 17678,
data4: [176, 216, 210, 111, 227, 10, 56, 105],
};
pub const GUID_BLUETOOTH_RADIO_OUT_OF_RANGE: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 3800590281,
data2: 49834,
data3: 19693,
data4: [185, 105, 69, 112, 134, 96, 55, 196],
};
pub const GUID_BTHPORT_DEVICE_INTERFACE: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 139472938,
data2: 45892,
data3: 20442,
data4: [155, 233, 144, 87, 107, 141, 70, 240],
};
pub const GUID_BLUETOOTH_L2CAP_EVENT: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 2125348912, data2: 46857, data3: 19112, data4: [172, 85, 233, 83, 130, 156, 157, 170] };
pub const GUID_BLUETOOTH_RADIO_IN_RANGE: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 3929758594, data2: 9966, data3: 17678, data4: [176, 216, 210, 111, 227, 10, 56, 105] };
pub const GUID_BLUETOOTH_RADIO_OUT_OF_RANGE: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 3800590281, data2: 49834, data3: 19693, data4: [185, 105, 69, 112, 134, 96, 55, 196] };
pub const GUID_BTHPORT_DEVICE_INTERFACE: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 139472938, data2: 45892, data3: 20442, data4: [155, 233, 144, 87, 107, 141, 70, 240] };
pub const GUID_BTH_RFCOMM_SERVICE_DEVICE_INTERFACE: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 2973957182, data2: 64078, data3: 17931, data4: [138, 188, 7, 43, 98, 139, 60, 112] };
pub const GenericAudioServiceClassID_UUID16: u32 = 4611u32;
pub const GenericFileTransferServiceClassID_UUID16: u32 = 4610u32;
Expand Down
Expand Up @@ -372,9 +372,4 @@ pub const PURGE_RXABORT: PURGE_COMM_FLAGS = 2u32;
pub const PURGE_RXCLEAR: PURGE_COMM_FLAGS = 8u32;
pub const PURGE_TXABORT: PURGE_COMM_FLAGS = 1u32;
pub const PURGE_TXCLEAR: PURGE_COMM_FLAGS = 4u32;
pub const SID_3GPP_SUPSVCMODEL: ::windows_sys::core::GUID = ::windows_sys::core::GUID {
data1: 3620769287,
data2: 55143,
data3: 17528,
data4: [177, 74, 238, 204, 135, 234, 18, 247],
};
pub const SID_3GPP_SUPSVCMODEL: ::windows_sys::core::GUID = ::windows_sys::core::GUID { data1: 3620769287, data2: 55143, data3: 17528, data4: [177, 74, 238, 204, 135, 234, 18, 247] };

0 comments on commit f302772

Please sign in to comment.