| Crates.io | facet-default |
| lib.rs | facet-default |
| version | 0.43.2 |
| created_at | 2025-12-29 20:37:52.806577+00 |
| updated_at | 2026-01-23 18:04:12.188035+00 |
| description | Derive Default for facet types with custom field defaults |
| homepage | |
| repository | https://github.com/facet-rs/facet |
| max_upload_size | |
| id | 2011303 |
| size | 23,625 |
Derive Default for your types using facet's plugin system with custom field defaults.
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)
}
#[facet(default::value = literal)] - Use a literal value (converted via .into())#[facet(default::func = "path")] - Call a function to get the default valueFields 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().
For enums, mark the default variant with #[facet(default::variant)]:
use facet::Facet;
use facet_default as default;
#[derive(Facet, Debug, PartialEq)]
#[facet(derive(Default))]
#[repr(u8)]
pub enum Status {
#[facet(default::variant)]
Pending,
Active,
Done,
}
assert_eq!(Status::default(), Status::Pending);
Enum variants with fields also work - fields use their own default attributes:
use facet::Facet;
use facet_default as default;
#[derive(Facet, Debug)]
#[facet(derive(Default))]
#[repr(u8)]
pub enum Request {
#[facet(default::variant)]
Get {
#[facet(default::value = "/")]
path: String,
#[facet(default::value = 80u16)]
port: u16,
},
Post { path: String, body: String },
}
Thanks to all individual sponsors:
...along with corporate sponsors:
...without whom this work could not exist.
The facet logo was drawn by Misiasart.
Licensed under either of:
at your option.