From 5894e39dd73579bdb949a3eaeb7b7b68f88df4e8 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sun, 10 Jul 2022 13:03:53 +0200 Subject: refactor: add dedicated interface & error modules --- example/src/main.rs | 3 ++- syrette/src/di_container.rs | 20 +++----------------- syrette/src/errors/di_container.rs | 16 ++++++++++++++++ syrette/src/errors/injectable.rs | 17 +++++++++++++++++ syrette/src/errors/mod.rs | 2 ++ syrette/src/injectable.rs | 29 ----------------------------- syrette/src/interfaces/injectable.rs | 12 ++++++++++++ syrette/src/interfaces/mod.rs | 1 + syrette/src/lib.rs | 6 ++++-- syrette/src/provider.rs | 3 ++- syrette_macros/src/lib.rs | 6 +++--- 11 files changed, 62 insertions(+), 53 deletions(-) create mode 100644 syrette/src/errors/di_container.rs create mode 100644 syrette/src/errors/injectable.rs create mode 100644 syrette/src/errors/mod.rs delete mode 100644 syrette/src/injectable.rs create mode 100644 syrette/src/interfaces/injectable.rs create mode 100644 syrette/src/interfaces/mod.rs diff --git a/example/src/main.rs b/example/src/main.rs index 920d9f0..1f23179 100644 --- a/example/src/main.rs +++ b/example/src/main.rs @@ -1,4 +1,5 @@ -use syrette::{injectable, DIContainer, DIContainerError}; +use syrette::errors::di_container::DIContainerError; +use syrette::{injectable, DIContainer}; trait IDog { diff --git a/syrette/src/di_container.rs b/syrette/src/di_container.rs index f9580ae..32d53f2 100644 --- a/syrette/src/di_container.rs +++ b/syrette/src/di_container.rs @@ -1,13 +1,12 @@ use std::any::{type_name, TypeId}; use std::collections::HashMap; -use std::fmt; -use std::fmt::{Display, Formatter}; use std::marker::PhantomData; use std::rc::Rc; -use error_stack::{Context, Report, ResultExt}; +use error_stack::{Report, ResultExt}; -use crate::injectable::Injectable; +use crate::errors::di_container::DIContainerError; +use crate::interfaces::injectable::Injectable; use crate::libs::intertrait::cast_box::CastBox; use crate::provider::{IInjectableTypeProvider, InjectableTypeProvider}; @@ -47,19 +46,6 @@ where } } -#[derive(Debug)] -pub struct DIContainerError; - -impl Display for DIContainerError -{ - fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result - { - fmt.write_str("A DI container error has occurred") - } -} - -impl Context for DIContainerError {} - /// Dependency injection container. /// /// # Examples diff --git a/syrette/src/errors/di_container.rs b/syrette/src/errors/di_container.rs new file mode 100644 index 0000000..f301df2 --- /dev/null +++ b/syrette/src/errors/di_container.rs @@ -0,0 +1,16 @@ +use error_stack::Context; +use std::fmt; +use std::fmt::{Display, Formatter}; + +#[derive(Debug)] +pub struct DIContainerError; + +impl Display for DIContainerError +{ + fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result + { + fmt.write_str("A DI container error has occurred") + } +} + +impl Context for DIContainerError {} diff --git a/syrette/src/errors/injectable.rs b/syrette/src/errors/injectable.rs new file mode 100644 index 0000000..6b0cdc5 --- /dev/null +++ b/syrette/src/errors/injectable.rs @@ -0,0 +1,17 @@ +use core::fmt; +use std::fmt::{Display, Formatter}; + +use error_stack::Context; + +#[derive(Debug)] +pub struct ResolveError; + +impl Display for ResolveError +{ + fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result + { + fmt.write_str("Failed to resolve injectable struct") + } +} + +impl Context for ResolveError {} diff --git a/syrette/src/errors/mod.rs b/syrette/src/errors/mod.rs new file mode 100644 index 0000000..b0d50f0 --- /dev/null +++ b/syrette/src/errors/mod.rs @@ -0,0 +1,2 @@ +pub mod di_container; +pub mod injectable; diff --git a/syrette/src/injectable.rs b/syrette/src/injectable.rs deleted file mode 100644 index 3cc0d7f..0000000 --- a/syrette/src/injectable.rs +++ /dev/null @@ -1,29 +0,0 @@ -use core::fmt; -use std::fmt::{Display, Formatter}; - -use error_stack::Context; - -use crate::libs::intertrait::CastFrom; -use crate::DIContainer; - -#[derive(Debug)] -pub struct ResolveError; - -impl Display for ResolveError -{ - fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result - { - fmt.write_str("Failed to resolve injectable struct") - } -} - -impl Context for ResolveError {} - -pub trait Injectable: CastFrom -{ - fn resolve( - di_container: &DIContainer, - ) -> error_stack::Result, ResolveError> - where - Self: Sized; -} diff --git a/syrette/src/interfaces/injectable.rs b/syrette/src/interfaces/injectable.rs new file mode 100644 index 0000000..e704e02 --- /dev/null +++ b/syrette/src/interfaces/injectable.rs @@ -0,0 +1,12 @@ +use crate::errors::injectable::ResolveError; +use crate::libs::intertrait::CastFrom; +use crate::DIContainer; + +pub trait Injectable: CastFrom +{ + fn resolve( + di_container: &DIContainer, + ) -> error_stack::Result, ResolveError> + where + Self: Sized; +} diff --git a/syrette/src/interfaces/mod.rs b/syrette/src/interfaces/mod.rs new file mode 100644 index 0000000..31e53af --- /dev/null +++ b/syrette/src/interfaces/mod.rs @@ -0,0 +1 @@ +pub mod injectable; diff --git a/syrette/src/lib.rs b/syrette/src/lib.rs index fb5d03f..7278c37 100644 --- a/syrette/src/lib.rs +++ b/syrette/src/lib.rs @@ -4,7 +4,8 @@ //! //! # Examples //! ``` -//! use syrette::{injectable, DIContainer, DIContainerError}; +//! use syrette::errors::di_container::DIContainerError; +//! use syrette::{injectable, DIContainer}; //! //! trait IDog //! { @@ -115,7 +116,8 @@ //! ``` pub mod di_container; -pub mod injectable; +pub mod errors; +pub mod interfaces; pub use di_container::*; pub use syrette_macros::*; diff --git a/syrette/src/provider.rs b/syrette/src/provider.rs index 090aaac..0d6a1cc 100644 --- a/syrette/src/provider.rs +++ b/syrette/src/provider.rs @@ -2,7 +2,8 @@ use std::marker::PhantomData; extern crate error_stack; -use crate::injectable::{Injectable, ResolveError}; +use crate::errors::injectable::ResolveError; +use crate::interfaces::injectable::Injectable; use crate::DIContainer; pub trait IInjectableTypeProvider diff --git a/syrette_macros/src/lib.rs b/syrette_macros/src/lib.rs index faf338c..1761534 100644 --- a/syrette_macros/src/lib.rs +++ b/syrette_macros/src/lib.rs @@ -205,16 +205,16 @@ pub fn injectable(args_stream: TokenStream, impl_stream: TokenStream) -> TokenSt quote! { #item_impl - impl syrette::injectable::Injectable for #self_type_path { + impl syrette::interfaces::injectable::Injectable for #self_type_path { fn resolve( di_container: &syrette::DIContainer - ) -> error_stack::Result, syrette::injectable::ResolveError> + ) -> error_stack::Result, syrette::errors::injectable::ResolveError> { use error_stack::ResultExt; return Ok(Box::new(Self::new( #(di_container.get::<#dependency_types>() - .change_context(syrette::injectable::ResolveError) + .change_context(syrette::errors::injectable::ResolveError) .attach_printable(format!( "Unable to resolve a dependency of {}", std::any::type_name::<#self_type_path>() -- cgit v1.2.3-18-g5258