com 0.6.0

Utilities for implementing COM Client and Servers
Documentation
use com::interfaces::IUnknown;

com::interfaces! {
    #[uuid("00000000-0000-0000-0000-000000000001")]
    unsafe interface IFoo: IUnknown {}
}

com::class! {
    class SimpleClass: IFoo {
    }

    impl IFoo for SimpleClass {}
}

fn main() {
    let instance1 = SimpleClass::allocate();
    let instance1_as_foo = instance1.query_interface::<IFoo>().unwrap();
    let instance1_as_foo_again = instance1.query_interface::<IFoo>().unwrap();
    assert_eq!(instance1_as_foo, instance1_as_foo_again);

    let instance2 = SimpleClass::allocate();
    let instance2_as_foo = instance2.query_interface::<IFoo>().unwrap();
    assert_ne!(instance1_as_foo, instance2_as_foo);
}