#![cfg_attr(docsrs, feature(doc_cfg))]
#[cfg(all(feature = "yaml", not(feature = "serde_json")))]
compile_error!("The `serde_json` feature must be enabled when `yaml` support is active.");
pub use ortho_config_macros::{OrthoConfig, OrthoConfigSubcommandDocs};
pub use figment;
#[cfg(feature = "json5")]
#[cfg_attr(docsrs, doc(cfg(feature = "json5")))]
pub use figment_json5;
#[cfg(feature = "json5")]
#[cfg_attr(docsrs, doc(cfg(feature = "json5")))]
pub use json5;
#[cfg(feature = "serde_json")]
pub use serde_json;
#[cfg(feature = "yaml")]
#[cfg_attr(docsrs, doc(cfg(feature = "yaml")))]
pub use serde_saphyr;
#[cfg(feature = "toml")]
#[cfg_attr(docsrs, doc(cfg(feature = "toml")))]
pub use toml;
pub use uncased;
#[cfg(any(unix, target_os = "redox"))]
#[cfg_attr(docsrs, doc(cfg(any(unix, target_os = "redox"))))]
pub use xdg;
pub mod agent_context;
mod csv_env;
#[cfg(feature = "serde_json")]
#[cfg_attr(docsrs, doc(cfg(feature = "serde_json")))]
pub mod declarative;
pub mod discovery;
pub mod docs;
mod env_source;
mod error;
pub mod file;
mod localizer;
mod merge;
mod post_merge;
mod result_ext;
pub mod subcommand;
#[cfg(feature = "serde_json")]
#[cfg_attr(docsrs, doc(cfg(feature = "serde_json")))]
pub use crate::subcommand::SubcmdConfigMerge;
#[cfg(feature = "serde_json")]
#[cfg_attr(docsrs, doc(cfg(feature = "serde_json")))]
pub use agent_context::json::{serialize_agent_context, serialize_agent_context_pretty};
pub use agent_context::{
AGENT_CONTEXT_KIND_SUFFIX, AgentCommand, AgentContext, AgentExample, AgentInput, AgentPolicy,
AsyncSubmission, AsyncSubmissionMode, DeliveryRoute, InteractionMode, MutationEffect,
ORTHO_AGENT_CONTEXT_SCHEMA_VERSION, PaginationContract, PolicyMode, SkillCommandRef,
SkillManifest, SupportDeclaration, agent_context_kind,
};
pub use docs::{
CliMetadata, ConfigDiscoveryMeta, ConfigFormat, DefaultValue, Deprecation, DocMetadata,
EnvMetadata, Example, FieldMetadata, FileMetadata, HeadingIds, Link, Note,
ORTHO_DOCS_IR_VERSION, OrthoConfigDocs, OrthoConfigSubcommandDocs, PathPattern, PrecedenceMeta,
SectionsMetadata, SourceKind, ValueType, WindowsMetadata,
};
#[cfg(feature = "serde_json")]
#[cfg_attr(docsrs, doc(cfg(feature = "serde_json")))]
pub use result_ext::OrthoJsonMergeExt;
pub use result_ext::{IntoFigmentError, OrthoMergeExt, OrthoResultExt, ResultIntoFigment};
#[cfg(feature = "serde_json")]
#[cfg_attr(docsrs, doc(cfg(feature = "serde_json")))]
pub use subcommand::{
LoadGlobalsAndSelectedSubcommandError, SelectedSubcommandMerge, SelectedSubcommandMergeError,
load_globals_and_merge_selected_subcommand,
};
#[cfg(feature = "serde_json")]
#[cfg_attr(docsrs, doc(cfg(feature = "serde_json")))]
pub use subcommand::{
load_and_merge_subcommand, load_and_merge_subcommand_for,
load_and_merge_subcommand_for_with_matches, load_and_merge_subcommand_with_matches,
};
#[must_use]
pub fn normalize_prefix(prefix: &str) -> String {
prefix.trim_end_matches('_').to_ascii_lowercase()
}
pub use csv_env::CsvEnv;
#[cfg(feature = "serde_json")]
#[cfg_attr(docsrs, doc(cfg(feature = "serde_json")))]
pub use declarative::{DeclarativeMerge, MergeComposer, MergeLayer, MergeProvenance};
pub use discovery::{
ConfigDiscovery, ConfigDiscoveryBuilder, DiscoveryLayersOutcome, DiscoveryLoadOutcome,
LayerDiscoveryOutcome,
};
pub use env_source::{EnvSource, MapEnv, ProcessEnv, SharedEnvSource, process_env_source};
pub use error::{OrthoError, is_display_request};
pub use file::{FileLayerChain, load_config_file, load_config_file_as_chain};
pub use localizer::{
FluentBundleSource, FluentLocalizer, FluentLocalizerBuilder, FluentLocalizerError,
FormattingIssue, LocalizationArgs, LocalizeCmd, LocalizedParse, Localizer, NoOpLocalizer,
WithBase, clap_error_formatter, localize_clap_error, localize_clap_error_with_command,
message_id_for, parse_localized_command,
};
#[cfg(feature = "serde_json")]
pub use merge::{CliValueExtractor, sanitize_value, sanitized_provider, value_without_nones};
pub use post_merge::{PostMergeContext, PostMergeHook};
use std::sync::Arc;
pub use unic_langid::{LanguageIdentifier, langid};
pub trait OrthoConfig: Sized + serde::de::DeserializeOwned {
fn load() -> OrthoResult<Self> {
Self::load_from_iter(std::env::args_os())
}
fn load_from_iter<I, T>(iter: I) -> OrthoResult<Self>
where
I: IntoIterator<Item = T>,
T: Into<std::ffi::OsString> + Clone;
#[must_use]
fn prefix() -> &'static str {
""
}
}
pub type OrthoResult<T> = std::result::Result<T, Arc<OrthoError>>;