chore: initial sanitized public snapshot
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
use super::registry::OPTION_SPECS;
|
||||
use super::reserved::{RESERVED_OPTION_NAMES, ReservedOptionName};
|
||||
use super::{OptionScope, OptionSource, OptionSpec, OptionStatus};
|
||||
|
||||
/// Returns the canonical option specification for a known spelling.
|
||||
#[must_use]
|
||||
pub fn option_spec(name: &str) -> Option<&'static OptionSpec> {
|
||||
OPTION_SPECS
|
||||
.iter()
|
||||
.find(|s| s.name == name)
|
||||
.or_else(|| OPTION_SPECS.iter().find(|s| s.aliases.contains(&name)))
|
||||
}
|
||||
/// Returns whether an option is required by the `aria2-rust-pro` surface.
|
||||
#[must_use]
|
||||
pub fn is_required_pro_option(option: &str) -> bool {
|
||||
OPTION_SPECS.iter().any(|s| {
|
||||
s.name == option
|
||||
&& (s.source == OptionSource::Pro || s.source == OptionSource::CompatibilityAlias)
|
||||
})
|
||||
}
|
||||
|
||||
/// Returns whether a status should be exposed in live option listings.
|
||||
#[must_use]
|
||||
pub const fn is_live_option_status(status: OptionStatus) -> bool {
|
||||
matches!(
|
||||
status,
|
||||
OptionStatus::Implemented | OptionStatus::Verified | OptionStatus::Deprecated
|
||||
)
|
||||
}
|
||||
|
||||
/// Filters the registry while preserving canonical-name uniqueness.
|
||||
fn unique_option_specs(predicate: impl Fn(&OptionSpec) -> bool) -> Vec<&'static OptionSpec> {
|
||||
let mut seen = std::collections::BTreeSet::new();
|
||||
OPTION_SPECS
|
||||
.iter()
|
||||
.filter(|spec| predicate(spec) && seen.insert(spec.name))
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// Returns all live option specs without duplicate canonical names.
|
||||
#[must_use]
|
||||
pub fn live_option_specs() -> Vec<&'static OptionSpec> {
|
||||
unique_option_specs(|spec| is_live_option_status(spec.status))
|
||||
}
|
||||
|
||||
/// Returns all options available in the global scope.
|
||||
#[must_use]
|
||||
pub fn global_option_specs() -> Vec<&'static OptionSpec> {
|
||||
unique_option_specs(|spec| {
|
||||
matches!(spec.metadata.scope, OptionScope::Global | OptionScope::Both)
|
||||
})
|
||||
}
|
||||
/// Returns all options available in the per-download scope.
|
||||
#[must_use]
|
||||
pub fn per_download_option_specs() -> Vec<&'static OptionSpec> {
|
||||
unique_option_specs(|spec| {
|
||||
matches!(
|
||||
spec.metadata.scope,
|
||||
OptionScope::PerDownload | OptionScope::Both
|
||||
)
|
||||
})
|
||||
}
|
||||
/// Returns the reserved option-name table.
|
||||
#[must_use]
|
||||
pub const fn reserved_option_names() -> &'static [ReservedOptionName] {
|
||||
RESERVED_OPTION_NAMES
|
||||
}
|
||||
/// Returns the canonical RPC option name for a known spelling.
|
||||
#[must_use]
|
||||
pub fn rpc_option_name(name: &str) -> Option<&'static str> {
|
||||
option_spec(name).and_then(|s| s.rpc_names.first().copied())
|
||||
}
|
||||
/// Returns the environment-variable name associated with an option.
|
||||
#[must_use]
|
||||
pub fn env_var_for_option(name: &str) -> Option<String> {
|
||||
option_spec(name).map(|s| format!("ARIA2_{}", s.name.replace('-', "_").to_ascii_uppercase()))
|
||||
}
|
||||
Reference in New Issue
Block a user