From b5149091a263b373cb1302d197a79ea94653d826 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 9 Jul 2022 20:52:34 +0200 Subject: refactor: move injectable type provider to own file --- syrette/src/di_container.rs | 43 ++---------------------------------------- syrette/src/provider.rs | 46 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 41 deletions(-) create mode 100644 syrette/src/provider.rs diff --git a/syrette/src/di_container.rs b/syrette/src/di_container.rs index ce0d829..7aa8225 100644 --- a/syrette/src/di_container.rs +++ b/syrette/src/di_container.rs @@ -7,48 +7,9 @@ use std::rc::Rc; use error_stack::{Context, Report, ResultExt}; -use crate::injectable::{Injectable, ResolveError}; +use crate::injectable::Injectable; use crate::libs::intertrait::cast_box::CastBox; - -trait IInjectableTypeProvider -{ - fn provide( - &self, - di_container: &DIContainer, - ) -> error_stack::Result, ResolveError>; -} - -struct InjectableTypeProvider -where - InjectableType: Injectable, -{ - _phantom_data: PhantomData, -} - -impl InjectableTypeProvider -where - InjectableType: Injectable, -{ - fn new() -> Self - { - Self { - _phantom_data: PhantomData, - } - } -} - -impl IInjectableTypeProvider for InjectableTypeProvider -where - InjectableType: Injectable, -{ - fn provide( - &self, - di_container: &DIContainer, - ) -> error_stack::Result, ResolveError> - { - Ok(InjectableType::resolve(di_container)?) - } -} +use crate::provider::{IInjectableTypeProvider, InjectableTypeProvider}; pub struct BindingBuilder<'a, InterfaceTrait> where diff --git a/syrette/src/provider.rs b/syrette/src/provider.rs new file mode 100644 index 0000000..090aaac --- /dev/null +++ b/syrette/src/provider.rs @@ -0,0 +1,46 @@ +use std::marker::PhantomData; + +extern crate error_stack; + +use crate::injectable::{Injectable, ResolveError}; +use crate::DIContainer; + +pub trait IInjectableTypeProvider +{ + fn provide( + &self, + di_container: &DIContainer, + ) -> error_stack::Result, ResolveError>; +} + +pub struct InjectableTypeProvider +where + InjectableType: Injectable, +{ + _phantom_data: PhantomData, +} + +impl InjectableTypeProvider +where + InjectableType: Injectable, +{ + pub fn new() -> Self + { + Self { + _phantom_data: PhantomData, + } + } +} + +impl IInjectableTypeProvider for InjectableTypeProvider +where + InjectableType: Injectable, +{ + fn provide( + &self, + di_container: &DIContainer, + ) -> error_stack::Result, ResolveError> + { + Ok(InjectableType::resolve(di_container)?) + } +} -- cgit v1.2.3-18-g5258