fieldmasker 0.0.1

A utility for selecting and filtering response fields via field masks.
Documentation
#![forbid(unsafe_code)]
#![deny(missing_docs)]

//! Field-level response masking for Serde-serializable data.
//!
//! This crate lets you serialize a value while selecting only a subset of its fields,
//! using a “field mask” syntax (`"a,b.c,d.*.e"`). It is transport-agnostic and works
//! with any Serde serializer (e.g., JSON, YAML).
//!
//! # Quick start
//! ```rust
//! use fieldmasker::{FieldMask, Masked, MaskSpec};
//! use serde::Serialize;
//!
//! #[derive(Serialize, MaskSpec)]
//! struct User {
//!     id: u64,
//!     name: String,
//!     email: String,
//! }
//!
//!
//! let u = User { id: 1, name: "Ada".into(), email: "a@ex.com".into() };
//! let mask = FieldMask::parse("id,name").unwrap();
//! let masked = Masked::new(u, mask);
//! let json = serde_json::to_string(&masked).unwrap();
//! assert!(json.contains("id"));
//! assert!(json.contains("name"));
//! assert!(!json.contains("email"));
//! ```
//!
//! ## Features
//! - `derive` (default): exposes `fieldmasker_derive::MaskSpec` derive macro.
//! - `axum`: adds integration helpers for Axum.
//! - `hashbrown`: enables `MaskSpec` for `hashbrown::HashMap<String, V>`.

#[cfg(feature = "derive")]
pub use fieldmasker_derive::MaskSpec;

pub use spec::MaskSpec;

#[cfg(feature = "axum")]
pub mod axum_integration;
mod error;
mod field_mask;
mod ser;
pub mod spec;
mod trie;
mod validate;

pub use error::FieldMaskError;
pub use field_mask::FieldMask;
pub use ser::masked::Masked;