Crates.io | variant-rs |
lib.rs | variant-rs |
version | 0.4.0 |
source | src |
created_at | 2022-07-13 03:12:52.25849 |
updated_at | 2024-02-02 21:56:50.240812 |
description | VARIANT support for Rust. Clean, idiomatic handling of WinAPI/COM results. |
homepage | |
repository | https://github.com/zdimension/variant-rs |
max_upload_size | |
id | 624842 |
size | 56,435 |
variant-rs
is a Rust crate that provides idiomatic handling of COM VARIANT
types. Rust supports discriminated
union types out of the box, so although VARIANT
s are usually a pain to work with, Rust makes it easy to encode and
decode them.
The crate is designed to work with the VARIANT
type from the winapi
crate.
use variant_rs::*;
fn main() {
let v1 = Variant::I32(123); // manual instanciation
let v2 = 123i32.to_variant(); // ToVariant trait
let v3 = 123.into(); // From / Into traits
assert_eq!(v1, v2);
assert_eq!(v1, v3);
let bstr: Variant = "Hello, world!".into();
let ptr: VARIANT = bstr.clone().try_into().unwrap(); // convert to COM VARIANT
let back: Variant = ptr.try_into().unwrap(); // convert back
assert_eq!(bstr, back);
}
VARIANT
types and corresponding typesVARIANT type |
Rust type | Rust type (BY_REF) |
---|---|---|
VT_EMPTY |
() |
N/A |
VT_NULL |
() |
N/A |
VT_I1 |
i8 |
PSTR |
VT_I2 |
i16 |
&'static mut i16 |
VT_I4 |
i32 |
&'static mut i32 |
VT_I8 |
i64 |
&'static mut i64 |
VT_UI1 |
u8 |
&'static mut u8 |
VT_UI2 |
u16 |
&'static mut u16 |
VT_UI4 |
u32 |
&'static mut u32 |
VT_UI8 |
u64 |
&'static mut u64 |
VT_INT |
i32 |
&'static mut i32 |
VT_UINT |
u32 |
&'static mut u32 |
VT_R4 |
f32 |
&'static mut f32 |
VT_R8 |
f64 |
&'static mut f64 |
VT_BOOL |
bool |
&'static mut ComBool |
VT_BSTR |
BSTR |
&'static mut BSTR |
VT_ERROR |
HRESULT (i32 ) |
&'static mut HRESULT (i32 ) |
VT_CY |
Currency |
&'static mut ComCurrency |
VT_DATE |
NaiveDateTime |
&'static mut ComDate |
VT_DECIMAL |
Decimal |
&'static mut ComDecimal |
VT_UNKNOWN |
Option<IUnknown> |
N/A |
VT_DISPATCH |
Option<IDispatch> |
N/A |
VT_VARIANT |
N/A | PtrWrapper<VARIANT> |
ComBool
i16
-backed enum.
ComCurrency
Maps COM's i64
currency data CY
to Decimal
.
ComDecimal
Maps COM's 96-bit decimals DECIMAL
to Decimal
.
ComData
Maps COM's DATE
(f64
milliseconds from 1899-12-30) to NaiveDateTime
.
PtrWrapper
Safe wrapper around COM interface pointers.
Add this to your Cargo.toml
:
[dependencies]
variant-rs = "0.4.0"
This project is licensed under either of