use core::fmt::Display;
#[allow(private_bounds)]
pub trait ProgramOptionMeta: Sealed {
fn id(&self) -> &dyn Display;
fn description(&self) -> Option<&dyn Display>;
fn short_form(&self) -> Option<char>;
fn long_form(&self) -> Option<&dyn Display>;
fn is_positional(&self) -> bool;
fn env_form(&self) -> Option<&dyn Display>;
fn has_serde_source(&self) -> bool;
fn is_required(&self) -> bool;
fn default_help_str(&self) -> Option<&dyn Display>;
}
#[non_exhaustive]
pub enum ValueSource<'a> {
#[non_exhaustive]
Args {},
#[non_exhaustive]
Env {
var: &'a dyn Display,
},
#[non_exhaustive]
Document {
name: &'a dyn Display,
},
#[non_exhaustive]
Default {},
}
#[allow(private_bounds)]
pub trait ConfigEvent: Sealed {
fn program_option(&self) -> &dyn ProgramOptionMeta;
fn value_source(&self) -> ValueSource<'_>;
}
#[doc(hidden)]
pub type ConfigLogger<'a> = &'a mut dyn FnMut(&dyn ConfigEvent);
#[doc(hidden)]
pub(crate) trait Sealed {}