dto_mapper 0.3.2

A library to create dynamic DTOs (Data Transfer Object) from a structure
Documentation
use derive_builder::Builder;
use dto_mapper::DtoMapper;
use serde::{Deserialize, Serialize};
#[allow(unused)]
use std::str::FromStr;
#[allow(unused)]

fn concat_str(s1: &str, s2: &str) -> String {
    s1.to_owned() + " " + s2
}

#[derive(DtoMapper, Debug, Default, Clone)]
#[mapper( dto="LoginDto"  , map=[ ("username:login",true) , ("password",true)] , derive=(Debug, Clone, PartialEq) )]
#[mapper( dto="ProfileDto" , ignore=["password"]  , derive=(Debug, Clone, PartialEq) )]
#[mapper( dto="PersonDto" , no_builder=true , map=[ ("firstname",true), ("lastname",true), ("email",false) ]  )]
#[mapper( dto="CustomDto" , no_builder=true , map=[ ("email",false) ] , derive=(Debug, Clone) ,
  new_fields=[( "name: String", "concat_str( self.firstname.as_str(), self.lastname.as_str() )" )]
)]
#[mapper(
    dto="CustomDtoWithAttribute" ,
    no_builder=true ,
    map=[ ("email", false, ["#[serde(rename = \"email_address\")]"] ) ],
    derive=(Debug, Clone, Serialize, Deserialize),
    new_fields=[
        (
            "name: String",
            "concat_str( self.firstname.as_str(), self.lastname.as_str() )",
            ["#[serde(rename = \"full_name\")]"],
        ),
        (
          "hidden_password: String",
         r#""*".repeat( self.password.len() )"#
        ),
    ],
    macro_attr=["serde(rename_all = \"UPPERCASE\")"]
)]
struct User {
    username: String,
    password: String,
    email: String,
    firstname: String,
    middle_name: Option<String>,
    lastname: String,
    age: u8,
}

fn main() {
    let user = User {
        firstname: "Dessalines".into(),
        lastname: "Jean Jacques".into(),
        email: "dessalines@gmail.com".into(),
        password: "password123".into(),
        ..User::default()
    };

    println!("{:?}", user);
    let custom_dto: CustomDto = user.clone().into();
    println!("{:?}", custom_dto);

    let custom_dto_attributes: CustomDtoWithAttribute = user.clone().into();
    println!("{:?}", custom_dto_attributes);
}