apollo-configuration 0.4.0

A typed, friendly configuration system for Apollo products.
Documentation
use apollo_configuration::configuration;
use apollo_configuration::types::{
    Duration, HeaderName, HeaderValue, IpAddr, Ipv4Addr, Ipv6Addr, Method, Regex, SocketAddr,
    SocketAddrV4, SocketAddrV6, Uri, Url,
};
use apollo_redaction::Redacted;

/// A configuration struct containing all supported types for schema snapshot testing.
#[configuration]
struct AllTypesConfig {
    // Primitives
    #[config(required)]
    bool_field: bool,
    #[config(required)]
    i32_field: i32,
    #[config(required)]
    u32_field: u32,
    #[config(required)]
    i64_field: i64,
    #[config(required)]
    u64_field: u64,
    #[config(required)]
    usize_field: usize,
    #[config(required)]
    string_field: String,

    // URL types
    #[config(required)]
    url_field: Url,

    // IP types
    #[config(required)]
    ip_addr_field: IpAddr,
    #[config(required)]
    ipv4_addr_field: Ipv4Addr,
    #[config(required)]
    ipv6_addr_field: Ipv6Addr,

    // Socket types
    #[config(required)]
    socket_addr_field: SocketAddr,
    #[config(required)]
    socket_addr_v4_field: SocketAddrV4,
    #[config(required)]
    socket_addr_v6_field: SocketAddrV6,

    // HTTP types
    #[config(required)]
    method_field: Method,
    #[config(required)]
    uri_field: Uri,
    #[config(required)]
    header_name_field: HeaderName,
    #[config(required)]
    header_value_field: HeaderValue,

    // Other types
    #[config(required)]
    duration_field: Duration,
    #[config(required)]
    regex_field: Regex,

    // Wrapper types
    option_field: Option<String>,
    #[config(required)]
    vec_field: Vec<String>,
    #[config(required)]
    redacted_field: Redacted<String>,
    #[config(required)]
    redacted_url_field: Redacted<Url>,
}

#[test]
fn json_schema_snapshot() {
    let schema = schemars::schema_for!(AllTypesConfig);
    insta::assert_json_snapshot!(schema);
}