## Unreleased ## v0.4.1 - 2022-10-30 ### Bug Fixes - remove unused Rust feature flag ### Build System/Dependency Changes - bump versions to 0.4.1 ### Code Refactoring - add dependency history type - improve injectable macro error messages - add Debug implementations for castable factories - rename DI container binding map to DI container storage - reduce DI container coupling - improve internals of macros & add unit tests - reorganize DI containers - remove relying on Rust nightly for better handling of features - clarify binding builder to_factory signature - improve management of feature specific items - stop using the async_trait macro for AsyncInjectable - shorten async binding builder trait bounds ### Code Testing - add binding configurator unit tests - add castable factory unit tests - add provider unit tests - add binding builder unit tests - add more unit tests - fix the can bind to factory unit tests ### Documentation Changes - add sealed notices to DI container interfaces - add coverage badge - fix the example usage in the readme - fix unresolved links to DI container types - fix spelling mistakes in blocking & async DI containers - add binding builder examples - add async binding builder examples - remove unnecessary feature notices ### BREAKING CHANGE Binding builders & configurators now take dependency history type arguments, the DetectedCircular variant of InjectableError now contains a dependency history field & the injectable traits take dependency history instead of a Vec You now have to import the DI containers's interfaces to use the DI containers's methods DIContainer, AsyncDIContainer & the binding structs have been relocated ## v0.4.0 - 2022-10-01 ### Bug Fixes - prevent problems caused by non send + sync traits - add missing semicolon in the factory macro ### Build System/Dependency Changes - bump versions to 0.4.0 - add required features for the async-factory example - improve async dependencies ### Chores - remove repetition of allowing clippy::module_name_repetitions ### Code Refactoring - remove unused import in DI container module - remove IFactory from public API - remove repetition of declaring factory interfaces - reorganize modules in the macros crate - make the async & non-async DI container bind methods must_use - add put factory return types in TransientPtr automatically - prevent look for default factory without factory feature - make async DI container be used inside of a Arc - make DI container be used inside of a Rc - improve DI container cast errors - remove braces from expected injectable macro input - rename the factory macro flag 'async' to 'threadsafe' - remove unused import of ItemTrait - improve async DI container cast errors - replace arc cast panic with an error - limit FactoryPtr & AnyFactory to the factory feature - make DI container have single get function - move specifying binding scope to a binding scope configurator - improve private method names & clean up InjectableImpl ### Code Testing - move some factory function types to type aliases ### Documentation Changes - add v0.4.0 to changelog - improve item links in the injectable macro - fix unresolved link to TransientPtr - make IFood in async example Send + Sync - fix ambiguous link to the factory macro - add missing modules in the async example - add async support to readme - improve & add examples - use anyhow in the unbound example - correct the example in the readme - add CI shield to readme - update the DI container example - remove license shield from readme ### Features - add bind async default factories to async DI container - add binding async factories to async DI container - add factory macro async flag - allow factories to access async DI container - allow factories access to DI container - add a threadsafe flag to the declare_default_factory macro - implement async functionality - implement named bindings ### Style Improvements - add rustfmt config options ### BREAKING CHANGE The to_default_factory method of the blocking and async DI containers now expect a function returning another function The to_factory & to_default_factory methods of AsyncBindingBuilder now expects a function returning a factory function The async DI container is to be used inside of a Arc & it also no longer implements Default Factory types should now be written with the Fn trait instead of the IFactory trait and the to_factory & to_default_factory methods of BindingBuilder now expect a function returning a factory function The DI container is to be used inside of a Rc & it also no longer implements Default The injectable macro no longer expects braces around it's flags FactoryPtr has been limited to the factory feature The DI container get_singleton & get_factory functions have been replaced by the get function now returning a enum Specifying the scope of a DI container binding is now done with a binding scope configurator ## v0.3.0 - 2022-08-21 ### Bug Fixes - make DI container get_factory calls in the injectable macro valid ### Build System/Dependency Changes - bump versions to 0.3.0 - change license in manifests to LGPL-2.1-only ### Chores - change license to MIT or Apache-2.0 ### Code Refactoring - change errors to be more sane - make the declare_default_factory macro take a ty - only re-export DIContainer - add Cargo feature for preventing circular dependencies - move creating a dependency trace to it's own function - hide AnyFactory from docs - limit the factory macro to the factory feature ### Code Testing - correct DI container bind tests - reduce repetition in DI container tests ### Documentation Changes - add v0.3.0 to changelog - change project descriptions to describe it as a framework - fix declare_default_factory example - add injection of 3rd-party structs & traits to features list - add example for displaying a unbound interface error - simplify with-3rd-party example - add a example that uses a 3rd party library - fix IFactory example use statement - improve the factory example - correct examples - fix DI container module documentation - add license shield to readme - add factory feature notices ### Features - allow bind interface to default factory - prevent binding the same interface more than once - add detection and prevention of circular dependencies - add hide impl of Injectable from documentation ### BREAKING CHANGE Major improvements have been made to error types and the error_stack crate is no longer used Only DIContainer is re-exported from the di_container module The 'to' and 'to_factory' methods of BindingBuilder now return 'Result' ## v0.2.1 - 2022-08-01 ### Build System/Dependency Changes - bump versions to 0.2.1 ### Documentation Changes - add v0.2.1 to changelog - add doc comments & deny missing docs - add contributing section in readme ## v0.2.0 - 2022-07-31 ### Build System/Dependency Changes - bump versions to 0.2.0 - add docs.rs all-features flag ### Code Refactoring - tidy up DI container internals - add Intertrait cast error - rename InterfacePtr to TransientPtr - add back Intertrait tests & Rc support - hide castable factory from docs - clean up intertrait lib ### Documentation Changes - add v0.2.0 to changelog - add binding singletons to list of features - add asynchronous functionality to todo - add generics support to list of features ### Features - add injecting singletons into constructors - implement binding singletons - add support for generics ### Performance Improvements - use ahash in DI container ### BREAKING CHANGE InterfacePtr has been renamed to TransientPtr ## v0.1.1 - 2022-07-22 ### Build System/Dependency Changes - bump versions to 0.1.1 - add local path to macros dependency ### Code Refactoring - make factories an optional feature - re-export dependency of error_stack - reorganize folder hierarchy ### Documentation Changes - add v0.1.1 to changelog - add optional factory feature name in readme - add changelog - fix typo in example in readme - add shields, examples & more to readme - rename example folder to examples - use syrette from crates.io in example ## v0.1.0 - 2022-07-20 ### Build System/Dependency Changes - use syrette_macros from crates.io ### Chores - add repository & keywords to Cargo manifests ### Code Refactoring - use aggressive clippy linting - remove unused intertrait code - rename the castable_to macro to declare_interface - reduce the capabilities of the castable_to macro - reorganize and improve macros - use common pointer type aliases - add dedicated interface & error modules - move injectable type provider to own file ### Code Testing - add DI container unit tests ### Documentation Changes - replace symlinked readme with a copy - add readme symlink to syrette - improve and clean up doc comment examples - split example into multiple files - correct declare_interface macro example - remove the crate root example - add example - add documentation comments - add readme ### Features - add binding factories to DI container - add DI container ### Style Improvements - group imports - add rustfmt config