aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clippy.toml1
-rw-r--r--example/src/main.rs27
-rw-r--r--syrette/src/castable_factory.rs6
-rw-r--r--syrette/src/di_container.rs35
-rw-r--r--syrette/src/interfaces/factory.rs1
-rw-r--r--syrette/src/interfaces/injectable.rs4
-rw-r--r--syrette/src/lib.rs2
-rw-r--r--syrette/src/libs/intertrait/cast_box.rs8
-rw-r--r--syrette/src/libs/intertrait/cast_rc.rs8
-rw-r--r--syrette/src/libs/intertrait/hasher.rs16
-rw-r--r--syrette/src/libs/intertrait/mod.rs8
-rw-r--r--syrette/src/provider.rs11
-rw-r--r--syrette/src/ptr.rs2
-rw-r--r--syrette_macros/src/factory_type_alias.rs1
-rw-r--r--syrette_macros/src/injectable_impl.rs3
-rw-r--r--syrette_macros/src/lib.rs9
-rw-r--r--syrette_macros/src/libs/intertrait_macros/gen_caster.rs8
-rw-r--r--syrette_macros/src/libs/intertrait_macros/mod.rs8
18 files changed, 100 insertions, 58 deletions
diff --git a/clippy.toml b/clippy.toml
new file mode 100644
index 0000000..a85655e
--- /dev/null
+++ b/clippy.toml
@@ -0,0 +1 @@
+doc-valid-idents = ["CodeChain", ".."]
diff --git a/example/src/main.rs b/example/src/main.rs
index 1f4ddb6..d79a030 100644
--- a/example/src/main.rs
+++ b/example/src/main.rs
@@ -1,3 +1,6 @@
+#![deny(clippy::all)]
+#![deny(clippy::pedantic)]
+
use syrette::errors::di_container::DIContainerError;
use syrette::interfaces::factory::IFactory;
use syrette::ptr::{FactoryPtr, InterfacePtr};
@@ -58,14 +61,14 @@ trait ICow
struct Cow
{
- _moo_cnt: i32,
+ moo_cnt: i32,
}
impl Cow
{
fn new(moo_cnt: i32) -> Self
{
- Self { _moo_cnt: moo_cnt }
+ Self { moo_cnt }
}
}
@@ -73,7 +76,7 @@ impl ICow for Cow
{
fn moo(&self)
{
- for _ in 0..self._moo_cnt {
+ for _ in 0..self.moo_cnt {
println!("Moo");
}
}
@@ -89,9 +92,9 @@ trait IHuman
struct Human
{
- _dog: InterfacePtr<dyn IDog>,
- _cat: InterfacePtr<dyn ICat>,
- _cow_factory: FactoryPtr<CowFactory>,
+ dog: InterfacePtr<dyn IDog>,
+ cat: InterfacePtr<dyn ICat>,
+ cow_factory: FactoryPtr<CowFactory>,
}
#[injectable(IHuman)]
@@ -104,9 +107,9 @@ impl Human
) -> Self
{
Self {
- _dog: dog,
- _cat: cat,
- _cow_factory: cow_factory,
+ dog,
+ cat,
+ cow_factory,
}
}
}
@@ -117,13 +120,13 @@ impl IHuman for Human
{
println!("Hi doggy!");
- self._dog.woof();
+ self.dog.woof();
println!("Hi kitty!");
- self._cat.meow();
+ self.cat.meow();
- let cow: Box<dyn ICow> = (self._cow_factory)(3);
+ let cow: Box<dyn ICow> = (self.cow_factory)(3);
cow.moo();
}
diff --git a/syrette/src/castable_factory.rs b/syrette/src/castable_factory.rs
index d820c31..5d582bb 100644
--- a/syrette/src/castable_factory.rs
+++ b/syrette/src/castable_factory.rs
@@ -9,7 +9,7 @@ where
Args: 'static,
ReturnInterface: 'static + ?Sized,
{
- _func: &'static dyn Fn<Args, Output = InterfacePtr<ReturnInterface>>,
+ func: &'static dyn Fn<Args, Output = InterfacePtr<ReturnInterface>>,
}
impl<Args, ReturnInterface> CastableFactory<Args, ReturnInterface>
@@ -21,7 +21,7 @@ where
func: &'static dyn Fn<Args, Output = InterfacePtr<ReturnInterface>>,
) -> Self
{
- Self { _func: func }
+ Self { func }
}
}
@@ -40,7 +40,7 @@ where
{
extern "rust-call" fn call(&self, args: Args) -> Self::Output
{
- self._func.call(args)
+ self.func.call(args)
}
}
diff --git a/syrette/src/di_container.rs b/syrette/src/di_container.rs
index 86724e6..df51140 100644
--- a/syrette/src/di_container.rs
+++ b/syrette/src/di_container.rs
@@ -19,8 +19,8 @@ pub struct BindingBuilder<'a, Interface>
where
Interface: 'static + ?Sized,
{
- _di_container: &'a mut DIContainer,
- _phantom_data: PhantomData<Interface>,
+ di_container: &'a mut DIContainer,
+ interface_phantom: PhantomData<Interface>,
}
impl<'a, Interface> BindingBuilder<'a, Interface>
@@ -30,8 +30,8 @@ where
fn new(di_container: &'a mut DIContainer) -> Self
{
Self {
- _di_container: di_container,
- _phantom_data: PhantomData,
+ di_container,
+ interface_phantom: PhantomData,
}
}
@@ -43,7 +43,7 @@ where
{
let interface_typeid = TypeId::of::<Interface>();
- self._di_container._bindings.insert(
+ self.di_container.bindings.insert(
interface_typeid,
Rc::new(InjectableTypeProvider::<Implementation>::new()),
);
@@ -63,7 +63,7 @@ where
let factory_impl = CastableFactory::new(factory_func);
- self._di_container._bindings.insert(
+ self.di_container.bindings.insert(
interface_typeid,
Rc::new(FactoryProvider::new(FactoryPtr::new(factory_impl))),
);
@@ -80,16 +80,17 @@ where
/// ```
pub struct DIContainer
{
- _bindings: HashMap<TypeId, Rc<dyn IProvider>>,
+ bindings: HashMap<TypeId, Rc<dyn IProvider>>,
}
impl<'a> DIContainer
{
/// Returns a new `DIContainer`.
+ #[must_use]
pub fn new() -> Self
{
Self {
- _bindings: HashMap::new(),
+ bindings: HashMap::new(),
}
}
@@ -102,6 +103,13 @@ impl<'a> DIContainer
}
/// Returns a new instance of the type bound with `Interface`.
+ ///
+ /// # Errors
+ /// Will return `Err` if:
+ /// - No binding for `Interface` exists
+ /// - Resolving the binding for `Interface` fails
+ /// - Casting the binding for `Interface` fails
+ /// - The binding for `Interface` is not injectable
pub fn get<Interface>(
&self,
) -> error_stack::Result<InterfacePtr<Interface>, DIContainerError>
@@ -112,7 +120,7 @@ impl<'a> DIContainer
let interface_name = type_name::<Interface>();
- let binding = self._bindings.get(&interface_typeid).ok_or_else(|| {
+ let binding = self.bindings.get(&interface_typeid).ok_or_else(|| {
Report::new(DIContainerError)
.attach_printable(format!("No binding exists for {}", interface_name))
})?;
@@ -145,6 +153,13 @@ impl<'a> DIContainer
}
/// Returns the factory bound with factory type `Interface`.
+ ///
+ /// # Errors
+ /// Will return `Err` if:
+ /// - No binding for `Interface` exists
+ /// - Resolving the binding for `Interface` fails
+ /// - Casting the binding for `Interface` fails
+ /// - The binding for `Interface` is not a factory
pub fn get_factory<Interface>(
&self,
) -> error_stack::Result<FactoryPtr<Interface>, DIContainerError>
@@ -155,7 +170,7 @@ impl<'a> DIContainer
let interface_name = type_name::<Interface>();
- let binding = self._bindings.get(&interface_typeid).ok_or_else(|| {
+ let binding = self.bindings.get(&interface_typeid).ok_or_else(|| {
Report::new(DIContainerError)
.attach_printable(format!("No binding exists for {}", interface_name))
})?;
diff --git a/syrette/src/interfaces/factory.rs b/syrette/src/interfaces/factory.rs
index 3afd7a8..c97fc09 100644
--- a/syrette/src/interfaces/factory.rs
+++ b/syrette/src/interfaces/factory.rs
@@ -1,3 +1,4 @@
+#![allow(clippy::module_name_repetitions)]
use crate::libs::intertrait::CastFrom;
use crate::ptr::InterfacePtr;
diff --git a/syrette/src/interfaces/injectable.rs b/syrette/src/interfaces/injectable.rs
index 96d4f21..24032a6 100644
--- a/syrette/src/interfaces/injectable.rs
+++ b/syrette/src/interfaces/injectable.rs
@@ -5,6 +5,10 @@ use crate::DIContainer;
pub trait Injectable: CastFrom
{
+ /// Resolves the dependencies of the injectable.
+ ///
+ /// # Errors
+ /// Will return `Err` if resolving the dependencies fails.
fn resolve(
di_container: &DIContainer,
) -> error_stack::Result<InterfacePtr<Self>, ResolveError>
diff --git a/syrette/src/lib.rs b/syrette/src/lib.rs
index aee7fe2..992f276 100644
--- a/syrette/src/lib.rs
+++ b/syrette/src/lib.rs
@@ -1,4 +1,6 @@
#![feature(unboxed_closures, fn_traits)]
+#![deny(clippy::all)]
+#![deny(clippy::pedantic)]
//! Syrette
//!
diff --git a/syrette/src/libs/intertrait/cast_box.rs b/syrette/src/libs/intertrait/cast_box.rs
index d4da740..793efd0 100644
--- a/syrette/src/libs/intertrait/cast_box.rs
+++ b/syrette/src/libs/intertrait/cast_box.rs
@@ -1,13 +1,13 @@
/**
* Originally from Intertrait by CodeChain
*
- * https://github.com/CodeChain-io/intertrait
- * https://crates.io/crates/intertrait/0.2.2
+ * <https://github.com/CodeChain-io/intertrait>
+ * <https://crates.io/crates/intertrait/0.2.2>
*
* Licensed under either of
*
- * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
+ * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
+ * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>)
* at your option.
*/
diff --git a/syrette/src/libs/intertrait/cast_rc.rs b/syrette/src/libs/intertrait/cast_rc.rs
index 58d212a..79d8d60 100644
--- a/syrette/src/libs/intertrait/cast_rc.rs
+++ b/syrette/src/libs/intertrait/cast_rc.rs
@@ -1,13 +1,13 @@
/**
* Originally from Intertrait by CodeChain
*
- * https://github.com/CodeChain-io/intertrait
- * https://crates.io/crates/intertrait/0.2.2
+ * <https://github.com/CodeChain-io/intertrait>
+ * <https://crates.io/crates/intertrait/0.2.2>
*
* Licensed under either of
*
- * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
+ * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
+ * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>)
* at your option.
*/
diff --git a/syrette/src/libs/intertrait/hasher.rs b/syrette/src/libs/intertrait/hasher.rs
index 1fe7739..e7f110d 100644
--- a/syrette/src/libs/intertrait/hasher.rs
+++ b/syrette/src/libs/intertrait/hasher.rs
@@ -1,13 +1,15 @@
+#![allow(clippy::module_name_repetitions)]
+
/**
* Originally from Intertrait by CodeChain
*
- * https://github.com/CodeChain-io/intertrait
- * https://crates.io/crates/intertrait/0.2.2
+ * <https://github.com/CodeChain-io/intertrait>
+ * <https://crates.io/crates/intertrait/0.2.2>
*
* Licensed under either of
*
- * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
+ * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
+ * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>)
* at your option.
*/
@@ -34,11 +36,13 @@ impl Hasher for FastHasher
let mut bytes = bytes;
while bytes.len() > size_of::<u64>() {
let (u64_bytes, remaining) = bytes.split_at(size_of::<u64>());
+
self.0 ^= u64::from_ne_bytes(u64_bytes.try_into().unwrap());
- bytes = remaining
+
+ bytes = remaining;
}
self.0 ^= bytes
.iter()
- .fold(0u64, |result, b| (result << 8) | *b as u64);
+ .fold(0u64, |result, b| (result << 8) | u64::from(*b));
}
}
diff --git a/syrette/src/libs/intertrait/mod.rs b/syrette/src/libs/intertrait/mod.rs
index a3f24f1..1daca64 100644
--- a/syrette/src/libs/intertrait/mod.rs
+++ b/syrette/src/libs/intertrait/mod.rs
@@ -1,13 +1,13 @@
/**
* Originally from Intertrait by CodeChain
*
- * https://github.com/CodeChain-io/intertrait
- * https://crates.io/crates/intertrait/0.2.2
+ * <https://github.com/CodeChain-io/intertrait>
+ * <https://crates.io/crates/intertrait/0.2.2>
*
* Licensed under either of
*
- * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
+ * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
+ * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>)
* at your option.
*/
diff --git a/syrette/src/provider.rs b/syrette/src/provider.rs
index c344f25..3b7e04c 100644
--- a/syrette/src/provider.rs
+++ b/syrette/src/provider.rs
@@ -1,3 +1,4 @@
+#![allow(clippy::module_name_repetitions)]
use std::marker::PhantomData;
use crate::castable_factory::AnyFactory;
@@ -26,7 +27,7 @@ pub struct InjectableTypeProvider<InjectableType>
where
InjectableType: Injectable,
{
- _phantom_data: PhantomData<InjectableType>,
+ injectable_phantom: PhantomData<InjectableType>,
}
impl<InjectableType> InjectableTypeProvider<InjectableType>
@@ -36,7 +37,7 @@ where
pub fn new() -> Self
{
Self {
- _phantom_data: PhantomData,
+ injectable_phantom: PhantomData,
}
}
}
@@ -58,14 +59,14 @@ where
pub struct FactoryProvider
{
- _factory: FactoryPtr<dyn AnyFactory>,
+ factory: FactoryPtr<dyn AnyFactory>,
}
impl FactoryProvider
{
pub fn new(factory: FactoryPtr<dyn AnyFactory>) -> Self
{
- Self { _factory: factory }
+ Self { factory }
}
}
@@ -76,6 +77,6 @@ impl IProvider for FactoryProvider
_di_container: &DIContainer,
) -> error_stack::Result<Providable, ResolveError>
{
- Ok(Providable::Factory(self._factory.clone()))
+ Ok(Providable::Factory(self.factory.clone()))
}
}
diff --git a/syrette/src/ptr.rs b/syrette/src/ptr.rs
index 164e061..414d086 100644
--- a/syrette/src/ptr.rs
+++ b/syrette/src/ptr.rs
@@ -1,6 +1,6 @@
+#![allow(clippy::module_name_repetitions)]
use std::rc::Rc;
pub type InterfacePtr<Interface> = Box<Interface>;
pub type FactoryPtr<FactoryInterface> = Rc<FactoryInterface>;
-
diff --git a/syrette_macros/src/factory_type_alias.rs b/syrette_macros/src/factory_type_alias.rs
index 82e2315..8ea7baa 100644
--- a/syrette_macros/src/factory_type_alias.rs
+++ b/syrette_macros/src/factory_type_alias.rs
@@ -11,6 +11,7 @@ pub struct FactoryTypeAlias
impl Parse for FactoryTypeAlias
{
+ #[allow(clippy::match_wildcard_for_single_variants)]
fn parse(input: ParseStream) -> syn::Result<Self>
{
let type_alias = match input.parse::<ItemType>() {
diff --git a/syrette_macros/src/injectable_impl.rs b/syrette_macros/src/injectable_impl.rs
index e7d1b54..3000253 100644
--- a/syrette_macros/src/injectable_impl.rs
+++ b/syrette_macros/src/injectable_impl.rs
@@ -131,6 +131,7 @@ impl InjectableImpl
.find(|method_item| method_item.sig.ident == method_name)
}
+ #[allow(clippy::match_wildcard_for_single_variants)]
fn get_has_fn_args_self(fn_args: &Punctuated<FnArg, Comma>) -> bool
{
fn_args.iter().any(|arg| match arg {
@@ -170,7 +171,7 @@ impl InjectableImpl
match opt_colon_two {
Some(colon_two) => {
- acc.push_str(colon_two.to_token_stream().to_string().as_str())
+ acc.push_str(colon_two.to_token_stream().to_string().as_str());
}
None => {}
}
diff --git a/syrette_macros/src/lib.rs b/syrette_macros/src/lib.rs
index f686e1e..2981ea7 100644
--- a/syrette_macros/src/lib.rs
+++ b/syrette_macros/src/lib.rs
@@ -1,3 +1,6 @@
+#![deny(clippy::all)]
+#![deny(clippy::pedantic)]
+
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse, parse_macro_input};
@@ -20,6 +23,9 @@ use libs::intertrait_macros::gen_caster::generate_caster;
///
/// * A interface trait the struct implements.
///
+/// # Panics
+/// If the attributed item is not a impl.
+///
/// # Examples
/// ```
/// trait IConfigReader
@@ -74,6 +80,9 @@ pub fn injectable(args_stream: TokenStream, impl_stream: TokenStream) -> TokenSt
/// Makes a type alias usable as a factory interface.
///
+/// # Panics
+/// If the attributed item is not a type alias.
+///
/// # Examples
/// ```
/// trait IUser
diff --git a/syrette_macros/src/libs/intertrait_macros/gen_caster.rs b/syrette_macros/src/libs/intertrait_macros/gen_caster.rs
index 213a75e..9126200 100644
--- a/syrette_macros/src/libs/intertrait_macros/gen_caster.rs
+++ b/syrette_macros/src/libs/intertrait_macros/gen_caster.rs
@@ -1,13 +1,13 @@
/**
* Originally from Intertrait by CodeChain
*
- * https://github.com/CodeChain-io/intertrait
- * https://crates.io/crates/intertrait/0.2.2
+ * <https://github.com/CodeChain-io/intertrait>
+ * <https://crates.io/crates/intertrait/0.2.2>
*
* Licensed under either of
*
- * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
+ * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
+ * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>)
* at your option.
*/
diff --git a/syrette_macros/src/libs/intertrait_macros/mod.rs b/syrette_macros/src/libs/intertrait_macros/mod.rs
index da9775a..fa8c021 100644
--- a/syrette_macros/src/libs/intertrait_macros/mod.rs
+++ b/syrette_macros/src/libs/intertrait_macros/mod.rs
@@ -1,13 +1,13 @@
/**
* Originally from Intertrait by CodeChain
*
- * https://github.com/CodeChain-io/intertrait
- * https://crates.io/crates/intertrait/0.2.2
+ * <https://github.com/CodeChain-io/intertrait>
+ * <https://crates.io/crates/intertrait/0.2.2>
*
* Licensed under either of
*
- * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
+ * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
+ * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>)
* at your option.
*/