repox 0.1.0

trait framework for data repository patterns
Documentation
# **`#created_by`**

> 🏭 **Macro**
>
> > ```text
> > #[created_by($struct_type)]
> > ```
> >
> > This macro is a simple way to implement the `Creatable<T>` trait for
> > a custom structure you want to use as parameters when creating a new
> > entity.  Today, this macro is just a convenient way to implement
> > the `Creatable<T>`; however, in the future, it may be extended to
> > support more features which are common for creation parameters.
>
> 📝 _Macro Example:_
>
> > ```rust
> > use repox::Entity;
> >
> > #[derive(Debug, Clone, PartialEq, Entity)]
> > #[created_by(PostParams)]  // <- this structure can be used to create new
> > pub struct Post {          //    Post entities for supporting repositories
> >     pub id: u64,
> >     pub author_id: u32,
> >     pub data: String,
> > }
> >
> > #[derive(Debug, Clone)]
> > pub struct PostParams {
> >     pub author_id: u32,
> >     pub title: String,      // <- it will be on the repository to decide
> >     pub content: String,    //    how to use these fields to create a Post
> > }
> >
> > // It can be used by repositories to create new entities
> > async fn create_sample_post(
> >     repository: &impl repox::CreateWith<Post, PostParams>,
> >     author_id: u32
> > ) -> Result<Post, anyhow::Error> {
> >     repository.create_with(PostParams {
> >         author_id,
> >         title: "Sample Title".into(),
> >         content: "Sample content...".into(),
> >     }).await
> > }
> > ```
>
> 🔬 _Macro Details:_
>
> > Here is the same example, but, without using the macro to show that
> > there is no magic here and that this macro is just a convenient way to
> > implement the `Creatable<T>` trait for a custom structure 🧙‍♂️.
>
> > ```rust
> > use repox::Entity;
> >
> > #[derive(Debug, Clone, PartialEq, Entity)]
> > pub struct Post {
> >     pub id: u64,
> >     pub author_id: u32,
> >     pub data: String,
> > }
> >
> > #[derive(Debug, Clone)]
> > pub struct PostParams {
> >     pub author_id: u32,
> >     pub title: String,
> >     pub content: String,
> > }
> >
> > // without the following impl the `create_sample_post`
> > // would not compile since `CreateWith<T, P>` requires
> > // that `P` be `Creatable<T>`
> > impl repox::Creatable<Post> for PostParams {}
> >
> > // It can be used by repositories to create new entities
> > async fn create_sample_post(
> >     repository: &impl repox::CreateWith<Post, PostParams>,
> >     author_id: u32
> > ) -> Result<Post, anyhow::Error> {
> >     repository.create_with(PostParams {
> >         author_id,
> >         title: "Sample Title".into(),
> >         content: "Sample content...".into(),
> >     }).await
> > }
> > ```