diff options
author | HampusM <hampus@hampusmat.com> | 2022-10-02 12:59:05 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-10-02 12:59:05 +0200 |
commit | 31f62ea0c634360030dcf89203268fa5684b5905 (patch) | |
tree | 24f52afd3f011ca36098c661bccd32ddc0f7833c /src/di_container.rs | |
parent | c614b0f70b672265c3a2a790bb8fc92e09f6fd00 (diff) |
docs: add binding builder examples
Diffstat (limited to 'src/di_container.rs')
-rw-r--r-- | src/di_container.rs | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/di_container.rs b/src/di_container.rs index d86f593..7ccfd3f 100644 --- a/src/di_container.rs +++ b/src/di_container.rs @@ -213,6 +213,36 @@ where /// # Errors /// Will return Err if the associated [`DIContainer`] already have a binding for /// the interface. + /// + /// # Examples + /// ``` + /// # use std::error::Error; + /// # + /// # use syrette::{DIContainer, injectable}; + /// # + /// # trait Foo {} + /// # + /// # struct Bar {} + /// # + /// # #[injectable(Foo)] + /// # impl Bar { + /// # fn new() -> Self + /// # { + /// # Self {} + /// # } + /// # } + /// # + /// # impl Foo for Bar {} + /// # + /// # fn main() -> Result<(), Box<dyn Error>> + /// # { + /// # let mut di_container = DIContainer::new(); + /// # + /// di_container.bind::<dyn Foo>().to::<Bar>(); + /// # + /// # Ok(()) + /// # } + /// ``` pub fn to<Implementation>( &self, ) -> Result<BindingScopeConfigurator<Interface, Implementation>, BindingBuilderError> @@ -246,6 +276,63 @@ where /// # Errors /// Will return Err if the associated [`DIContainer`] already have a binding for /// the interface. + /// + /// # Examples + /// ``` + /// # use std::error::Error; + /// # + /// # use syrette::{DIContainer, factory}; + /// # use syrette::ptr::TransientPtr; + /// # + /// # trait ICustomerID {} + /// # trait ICustomer {} + /// # + /// # struct Customer + /// # { + /// # name: String, + /// # id: TransientPtr<dyn ICustomerID> + /// # } + /// # + /// # impl Customer { + /// # fn new(name: String, id: TransientPtr<dyn ICustomerID>) -> Self + /// # { + /// # Self { name, id } + /// # } + /// # } + /// # + /// # impl ICustomer for Customer {} + /// # + /// # #[factory] + /// # type ICustomerFactory = dyn Fn(String, u32) -> dyn ICustomer; + /// # + /// # #[factory] + /// # type ICustomerIDFactory = dyn Fn(u32) -> dyn ICustomerID; + /// # + /// # fn main() -> Result<(), Box<dyn Error>> + /// # { + /// # let mut di_container = DIContainer::new(); + /// # + /// di_container + /// .bind::<ICustomerFactory>() + /// .to_factory(&|context| { + /// Box::new(move |name, id| { + /// let customer_id_factory = context + /// .get::<ICustomerIDFactory>() + /// .unwrap() + /// .factory() + /// .unwrap(); + /// + /// let customer_id = customer_id_factory(id); + /// + /// let customer = TransientPtr::new(Customer::new(name, customer_id)); + /// + /// customer as TransientPtr<dyn ICustomer> + /// }) + /// }); + /// # + /// # Ok(()) + /// # } + /// ``` #[cfg(feature = "factory")] pub fn to_factory<Args, Return>( &self, @@ -293,6 +380,50 @@ where /// # Errors /// Will return Err if the associated [`DIContainer`] already have a binding for /// the interface. + /// + /// # Examples + /// ``` + /// # use std::error::Error; + /// # + /// # use syrette::{DIContainer, factory}; + /// # use syrette::ptr::TransientPtr; + /// # + /// # trait IBuffer {} + /// # + /// # struct Buffer<const SIZE: usize> + /// # { + /// # buf: [u8; SIZE] + /// # } + /// # + /// # impl<const SIZE: usize> Buffer<SIZE> + /// # { + /// # fn new() -> Self + /// # { + /// # Self { + /// # buf: [0; SIZE] + /// # } + /// # } + /// # } + /// # + /// # impl<const SIZE: usize> IBuffer for Buffer<SIZE> {} + /// # + /// # const BUFFER_SIZE: usize = 12; + /// # + /// # fn main() -> Result<(), Box<dyn Error>> + /// # { + /// # let mut di_container = DIContainer::new(); + /// # + /// di_container.bind::<dyn IBuffer>().to_default_factory(&|_| { + /// Box::new(|| { + /// let buffer = TransientPtr::new(Buffer::<BUFFER_SIZE>::new()); + /// + /// buffer as TransientPtr<dyn IBuffer> + /// }) + /// }); + /// # + /// # Ok(()) + /// # } + /// ``` #[cfg(feature = "factory")] pub fn to_default_factory<Return, FactoryFunc>( &self, |