1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
pub mod parser; use std::fmt::{Debug, Formatter, Error as FmtError}; #[derive(Copy, Clone, PartialEq, Eq)] pub struct GUID(pub u32, pub u16, pub u16, pub u64); impl GUID { pub const EMPTY : Self = Self(0,0,0,0); /// {0BE35203-8F91-11CE-9DE3-00AA004BB851} pub const STD_FONT : Self = Self(0x0352E30B, 0x918F, 0xCE11, 0x51B84B00AA00E39D); /// {AFC20920-DA4E-11CE-B943-00AA006887B4} pub const TEXT_PROPS : Self = Self(0x2009C2AF, 0x4EDA, 0xCE11, 0xB4876800AA0043B9); /// {0BE35204-8F91-11CE-9DE3-00AA004BB851} pub const STD_PICTURE : Self = Self(0x0452E30B, 0x918F, 0xCE11, 0x51B84B00AA00E39D); /// What is this font? pub const WTF_FONT : Self = Self(0x105B80DE, 0x95F1, 0x11D0, 0x5CCBBD00AA00A0B0); /// {00020400-0000-0000-C000-000000000046} pub const DEFAULT : Self = Self(0x00020400, 0x0000, 0x0000, 0x000000000046C000); } impl Debug for GUID { fn fmt<'a>(&self, fmt: &mut Formatter<'a>) -> Result<(), FmtError> { write!(fmt, "{{{:x}-{:x}-{:x}-{:x}}}", self.0, self.1, self.2, self.3) } } bitflags! { /// ## [MS-OAUT] VARFLAGS /// /// The VARFLAGS enumeration values are used in the wVarFlags field of a VARDESC to specify the /// features of a field, constant, or ODL dispinterface property, as specified in section 2.2.43. pub struct VarFlags: u16 { /// MUST be set if the variable is an ODL dispinterface property that was declared with the [readonly] attribute (see section 2.2.49.5.3). const READONLY = 0x1; /// MUST be set if the variable is a property member of an ODL interface that was declared with the [source] attribute (see section 2.2.49.8). const SOURCE = 0x2; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [bindable] attribute (see section 2.2.49.5.2). const BINDABLE = 0x4; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [requestedit] attribute (see section 2.2.49.5.2). const REQUEST_EDIT = 0x8; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [displaybind] attribute (see section 2.2.49.5.2). const DISPLAY_BIND = 0x10; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [defaultbind] attribute (see section 2.2.49.5.2). const DEFAULT_BIND = 0x20; /// MUST be set if the variable is a member of a type that was declared with the [hidden] attribute (see section 2.2.49.5.1). const HIDDEN = 0x40; /// MUST be set if the variable is a member of a type that was declared with the [restricted] attribute (see section 2.2.49.5.1). const RESTRICTED = 0x80; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [defaultcollelem] attribute (see section 2.2.49.5.1). const DEFAULT_COLL_ELEM = 0x100; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [uidefault] attribute (see section 2.2.49.5.1). const UI_DEFAULT = 0x200; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [nonbrowsable] attribute (see section 2.2.49.5.1). const NON_BROWSABLE = 0x400; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [replaceable] attribute (see section 2.2.49.5.1). MUST be ignored on receipt. const REPLACEABLE = 0x800; /// MUST be set if the variable is an ODL dispinterface property that was declared with the [immediatebind] attribute (see section 2.2.49.5.2). const IMMEDIATE_BIND = 0x1000; } } #[repr(u16)] #[derive(Debug, FromPrimitive, ToPrimitive, PartialEq, Eq)] pub enum VarType { Empty = 0x0000, Null = 0x0001, I2 = 0x0002, I4 = 0x0003, R4 = 0x0004, R8 = 0x0005, Cy = 0x0006, Date = 0x0007, BStr = 0x0008, Dispatch = 0x0009, Error = 0x000A, Bool = 0x000B, Variant = 0x000C, Unknown = 0x000D, Decimal = 0x000E, I1 = 0x0010, UI1 = 0x0011, UI2 = 0x0012, UI4 = 0x0013, I8 = 0x0014, UI8 = 0x0015, Int = 0x0016, UInt = 0x0017, Void = 0x0018, HResult = 0x0019, Ptr = 0x001A, Safearray = 0x001B, CArray = 0x001C, UserDefined = 0x001D, LPStr = 0x001E, LPWStr = 0x001F, Record = 0x0024, IntPtr = 0x0025, UIntPtr = 0x0026, Array = 0x2000, ByRef = 0x4000, }