| Crates.io | omitty |
| lib.rs | omitty |
| version | 0.2.0 |
| created_at | 2025-10-10 14:00:30.944793+00 |
| updated_at | 2025-10-10 15:02:03.932645+00 |
| description | On-demand TypeScript-like Omit<> for Rust - generate type variants with omitted fields using #[omitty] and Omit! macro |
| homepage | |
| repository | https://github.com/bytematebot/omitty |
| max_upload_size | |
| id | 1876967 |
| size | 28,699 |
A Rust procedural macro for generating type variants with omitted fields, on-demand.
Omit! macro#[omitty] on modulesimpl From<Original> generated automatically[dependencies]
omitty = "0.1.0"
serde = { version = "1.0", features = ["derive"] }
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 secret_token: String,
}
pub struct PublicUser {
pub user: Omit!(User, secret_token),
}
}
fn main() {
let user = api::User {
id: 42,
name: "Alice".to_string(),
secret_token: "super_secret".to_string(),
};
let public = api::PublicUser {
user: user.into(), // automatic From conversion
};
let json = serde_json::to_string(&public.user).unwrap();
// {"id":42,"name":"Alice"}
}
#[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,
}
pub struct PublicProfile {
pub user: Omit!(User, password_hash, secret_token, email),
}
pub struct AdminView {
pub user: Omit!(User, secret_token),
}
}
#[omitty]
mod api {
#[derive(omitty::Omittable, Debug, Clone)]
pub struct User<T> {
pub id: u64,
pub name: String,
pub secret: String,
pub metadata: T,
}
pub struct PublicUser<T> {
pub user: Omit!(User<T>, secret),
}
}
#[omitty]Omittable on your structOmit!(Type, field1, field2, ...) in field types__omitty__Type::TypeWithout_field1_field2impl From<Type> is generated for easy conversionFor Omit!(User, secret_token), omitty generates:
pub mod __omitty__User {
pub struct UserWithout_secret_token {
pub id: u64,
pub name: String,
}
impl From<super::User> for UserWithout_secret_token {
fn from(value: super::User) -> Self {
Self { id: value.id, name: value.name }
}
}
}
MIT OR Apache-2.0