use super::Configurable;
use crate::app::Cli;
use crate::config_file::Config;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct SymlinkArrow(String);
impl Configurable<Self> for SymlinkArrow {
fn from_cli(_: &Cli) -> Option<Self> {
None
}
fn from_config(config: &Config) -> Option<Self> {
config
.symlink_arrow
.as_ref()
.map(|arrow| SymlinkArrow(arrow.to_string()))
}
}
impl Default for SymlinkArrow {
fn default() -> Self {
Self(String::from("\u{21d2}")) }
}
use std::fmt;
impl fmt::Display for SymlinkArrow {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[cfg(test)]
mod test {
use clap::Parser;
use crate::app::Cli;
use crate::config_file::Config;
use crate::flags::Configurable;
use super::SymlinkArrow;
#[test]
fn test_symlink_arrow_from_config_utf8() {
let mut c = Config::with_none();
c.symlink_arrow = Some("↹".into());
assert_eq!(
Some(SymlinkArrow(String::from("\u{21B9}"))),
SymlinkArrow::from_config(&c)
);
}
#[test]
fn test_symlink_arrow_from_args_none() {
let argv = ["lsd"];
let cli = Cli::try_parse_from(argv).unwrap();
assert_eq!(None, SymlinkArrow::from_cli(&cli));
}
#[test]
fn test_symlink_arrow_default() {
assert_eq!(
SymlinkArrow(String::from("\u{21d2}")),
SymlinkArrow::default()
);
}
#[test]
fn test_symlink_display() {
assert_eq!("⇒", format!("{}", SymlinkArrow::default()));
}
}