diff --git a/crates/libs/implement/src/lib.rs b/crates/libs/implement/src/lib.rs index a6b588b334..23e23134fe 100644 --- a/crates/libs/implement/src/lib.rs +++ b/crates/libs/implement/src/lib.rs @@ -1,5 +1,29 @@ use quote::{quote, ToTokens}; +/// Implements one or more COM interfaces. +/// +/// # Example +/// ```rust,ignore +/// #[interface("094d70d6-5202-44b8-abb8-43860da5aca2")] +/// unsafe trait IValue: IUnknown { +/// fn GetValue(&self, value: *mut i32) -> HRESULT; +/// } +/// +/// #[implement(IValue)] +/// struct Value(i32); +/// +/// impl IValue_Impl for Value { +/// unsafe fn GetValue(&self, value: *mut i32) -> HRESULT { +/// *value = self.0; +/// HRESULT(0) +/// } +/// } +/// +/// fn main() { +/// let object: IValue = Value(123).into(); +/// // Call interface methods... +/// } +/// ``` #[proc_macro_attribute] pub fn implement(attributes: proc_macro::TokenStream, original_type: proc_macro::TokenStream) -> proc_macro::TokenStream { let attributes = syn::parse_macro_input!(attributes as ImplementAttributes); diff --git a/crates/libs/interface/src/lib.rs b/crates/libs/interface/src/lib.rs index 329740c387..ea7aaecd88 100644 --- a/crates/libs/interface/src/lib.rs +++ b/crates/libs/interface/src/lib.rs @@ -2,13 +2,28 @@ use quote::quote; use syn::parse::{Parse, ParseStream}; use syn::spanned::Spanned; -/// A COM interface definition +/// Defines a COM interface to call or implement. /// /// # Example /// ```rust,ignore -/// #[windows_interface::interface("8CEEB155-2849-4ce5-9448-91FF70E1E4D9")] -/// unsafe trait IUIAnimationVariable: IUnknown { -/// fn GetValue(&self, value: *mut f64) -> HRESULT; +/// #[interface("094d70d6-5202-44b8-abb8-43860da5aca2")] +/// unsafe trait IValue: IUnknown { +/// fn GetValue(&self, value: *mut i32) -> HRESULT; +/// } +/// +/// #[implement(IValue)] +/// struct Value(i32); +/// +/// impl IValue_Impl for Value { +/// unsafe fn GetValue(&self, value: *mut i32) -> HRESULT { +/// *value = self.0; +/// HRESULT(0) +/// } +/// } +/// +/// fn main() { +/// let object: IValue = Value(123).into(); +/// // Call interface methods... /// } /// ``` #[proc_macro_attribute] diff --git a/crates/libs/windows/src/lib.rs b/crates/libs/windows/src/lib.rs index a3e6652d0c..a97aeb025e 100644 --- a/crates/libs/windows/src/lib.rs +++ b/crates/libs/windows/src/lib.rs @@ -13,11 +13,9 @@ extern crate self as windows; pub mod core { pub use windows_core::*; - #[doc(hidden)] #[cfg(feature = "implement")] pub use windows_implement::implement; - #[doc(hidden)] #[cfg(feature = "implement")] pub use windows_interface::interface; }