Crate facet_default

Crate facet_default 

Source
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.