use omitty::omitty;
#[omitty]
mod api {
#[derive(omitty::Omittable, Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct User {
pub id: u64,
pub name: String,
pub email: String,
pub password_hash: String,
pub secret_token: String,
}
#[derive(Debug, Clone)]
pub struct PublicProfile {
pub user: Omit!(User, password_hash, secret_token, email),
}
#[derive(Debug, Clone)]
pub struct AdminView {
pub user: Omit!(User, secret_token),
}
}
fn main() {
let user = api::User {
id: 1,
name: "Alice".to_string(),
email: "alice@example.com".to_string(),
password_hash: "hashed".to_string(),
secret_token: "secret".to_string(),
};
let public = api::PublicProfile {
user: user.clone().into(),
};
let admin = api::AdminView { user: user.into() };
println!("Public: {:?}", public.user);
println!("Admin: {:?}", admin.user);
assert_eq!(public.user.id, 1);
assert_eq!(admin.user.email, "alice@example.com");
}