Crate non_exhaustive
source ·Expand description
Macro to create non_exhaustive structs and structs with private fields with the functional update syntax, i.e., using ..Default::default().
Given the foreign structs:
#[non_exhaustive]
#[derive(Default)]
pub struct NonExhaustive {
pub field: usize
}
#[derive(Default)]
pub struct PrivateFields {
pub pub_field: usize,
private_field: usize
}The following is not possible:
ⓘ
NonExhaustive {
field: 1,
..Default::default()
};
PrivateFields {
pub_field: 1,
..Default::default()
};non_exhaustive! remedies that:
use non_exhaustive::non_exhaustive;
non_exhaustive! {NonExhaustive {
field: 1,
..Default::default()
}};
non_exhaustive! {PrivateFields {
pub_field: 1,
..Default::default()
}};For the common case of using Default::default(), non_exhaustive! allows omitting the ..expression:
use non_exhaustive::non_exhaustive;
non_exhaustive!(NonExhaustive { field: 1 });
non_exhaustive!(PrivateFields { pub_field: 1 });Under the hood, non_exhaustive! is extremely simple, it expands to:
{
let mut value: NonExhaustive = Default::default();
value.field = 1;
value
};Macros§
- Macro to create non_exhaustive structs and structs with private fields with the functional update syntax, i.e., using
..Default::default().