Derive Macro o2o::o2o

source ·
#[derive(o2o)]
{
    // Attributes available to this derive:
    #[owned_into]
    #[ref_into]
    #[into]
    #[from_owned]
    #[from_ref]
    #[from]
    #[map_owned]
    #[map_ref]
    #[map]
    #[owned_into_existing]
    #[ref_into_existing]
    #[into_existing]
    #[child]
    #[children]
    #[parent]
    #[ghost]
    #[where_clause]
    #[o2o]
}
Expand description

§Object to Object mapper for Rust

o2o can implement std::convert::From<T>, std::convert::Into<T>, and custom o2o::traits::IntoExisting<T> traits via procedural macro.

§Basic example

use o2o::o2o;
 
struct Person {
    id: u32,
    name: String,
    age: u8
}
 
#[derive(o2o)]
#[from_owned(Person)] // This tells o2o to generate 'From<Person> for PersonDto' implementation
#[owned_into(Person)] // This generates 'Into<Person> for PersonDto'
struct PersonDto {
    id: u32,
    name: String,
    age: u8
}
 
// Applying #[derive(o2o)] on PersonDto allows you to do this:
 
let person = Person { id: 123, name: "John".into(), age: 42 };
let dto = PersonDto::from(person);
 
assert_eq!(dto.id, 123); assert_eq!(dto.name, "John"); assert_eq!(dto.age, 42);
 
// and this:
 
let dto = PersonDto { id: 321, name: "Jack".into(), age: 23 };
let person: Person = dto.into();
 
assert_eq!(person.id, 321); assert_eq!(person.name, "Jack"); assert_eq!(person.age, 23);

For more examples, visit github.com