blob: f60600e214b87ce2384f8e25295d28dac9a2168c [file] [log] [blame]
use crate::config;
use crate::config::tree::sections::Status;
use crate::config::tree::{keys, Key, Section};
impl Status {
/// The `status.showUntrackedFiles` key
pub const SHOW_UNTRACKED_FILES: ShowUntrackedFiles = ShowUntrackedFiles::new_with_validate(
"showUntrackedFiles",
&config::Tree::STATUS,
validate::ShowUntrackedFiles,
);
}
/// The `status.showUntrackedFiles` key.
pub type ShowUntrackedFiles = keys::Any<validate::ShowUntrackedFiles>;
mod show_untracked_files {
use std::borrow::Cow;
use crate::{bstr::BStr, config, config::tree::status::ShowUntrackedFiles, status};
impl ShowUntrackedFiles {
pub fn try_into_show_untracked_files(
&'static self,
value: Cow<'_, BStr>,
) -> Result<status::UntrackedFiles, config::key::GenericErrorWithValue> {
use crate::bstr::ByteSlice;
Ok(match value.as_ref().as_bytes() {
b"no" => status::UntrackedFiles::None,
b"normal" => status::UntrackedFiles::Collapsed,
b"all" => status::UntrackedFiles::Files,
_ => return Err(config::key::GenericErrorWithValue::from_value(self, value.into_owned())),
})
}
}
}
impl Section for Status {
fn name(&self) -> &str {
"status"
}
fn keys(&self) -> &[&dyn Key] {
&[&Self::SHOW_UNTRACKED_FILES]
}
}
mod validate {
use crate::{bstr::BStr, config::tree::keys};
pub struct ShowUntrackedFiles;
impl keys::Validate for ShowUntrackedFiles {
fn validate(&self, value: &BStr) -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
super::Status::SHOW_UNTRACKED_FILES.try_into_show_untracked_files(value.into())?;
Ok(())
}
}
}