Expand description
§facet-default
Derive Default for your types using facet’s plugin system with custom field defaults.
§Usage
ⓘ
use facet::Facet;
use facet_default as default;
#[derive(Facet, Debug)]
#[facet(derive(Default))]
pub struct Config {
#[facet(default::value = "localhost")]
host: String,
#[facet(default::value = 8080u16)]
port: u16,
#[facet(default::func = "default_timeout")]
timeout: std::time::Duration,
// No attribute = uses Default::default()
debug: bool,
}
fn default_timeout() -> std::time::Duration {
std::time::Duration::from_secs(30)
}§Attributes
§Field Level
#[facet(default::value = literal)]- Use a literal value (converted via.into())#[facet(default::func = "path")]- Call a function to get the default value (path as string)
Fields without attributes use Default::default().
Note: For numeric literals, use type suffixes to ensure correct types (e.g., 8080u16
instead of 8080 for a u16 field). String literals are automatically converted via .into().
§Enums
For enums, mark the default variant:
ⓘ
#[derive(Facet, Debug)]
#[facet(derive(Default))]
#[repr(u8)]
pub enum Status {
#[facet(default::variant)]
Pending,
Active,
Done,
}Macros§
- __
facet_ invoke - Plugin chain entry point.
Enums§
- Attr
- Default attribute types for configuring Default implementation.