summaryrefslogtreecommitdiffstats
path: root/src/flags/literal.rs
blob: 0530f5788150934b5999f39e345eb282e10e1f66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//! This module defines the [Literal]. To set it up from [Cli], a [Config] and its
//! [Default] value, use its [configure_from](Configurable::configure_from) method.

use super::Configurable;

use crate::app::Cli;
use crate::config_file::Config;

/// The flag to set in order to show literal file names without quotes.
#[derive(Clone, Debug, Copy, PartialEq, Eq, Default)]
pub struct Literal(pub bool);

impl Configurable<Self> for Literal {
    /// Get a potential `Literal` value from [Cli].
    ///
    /// If the "literal" argument is passed, this returns a `Literal` with value `true` in a
    /// [Some]. Otherwise this returns `Literal` with value `false` in a [Some].
    fn from_cli(cli: &Cli) -> Option<Self> {
        if cli.literal {
            Some(Self(true))
        } else {
            Some(Self(false))
        }
    }

    /// Get a potential `Literal` value from a [Config].
    ///
    /// If the `Config::indicators` has value,
    /// this returns its value as the value of the `Literal`, in a [Some].
    /// Otherwise this returns `Literal` with value `false` in a [Some].
    fn from_config(config: &Config) -> Option<Self> {
        if let Some(value) = config.literal {
            Some(Self(value))
        } else {
            Some(Self(false))
        }
    }
}

#[cfg(test)]
mod test {
    use clap::Parser;

    use super::Literal;

    use crate::app::Cli;
    use crate::config_file::Config;
    use crate::flags::Configurable;

    #[test]
    fn test_from_cli_none() {
        let argv = ["lsd"];
        let cli = Cli::try_parse_from(argv).unwrap();
        assert_eq!(Some(Literal(false)), Literal::from_cli(&cli));
    }

    #[test]
    fn test_from_cli_literal() {
        let argv = ["lsd", "--literal"];
        let cli = Cli::try_parse_from(argv).unwrap();
        assert_eq!(Some(Literal(true)), Literal::from_cli(&cli));
    }

    #[test]
    fn test_from_config_none() {
        assert_eq!(
            Some(Literal(false)),
            Literal::from_config(&Config::with_none())
        );
    }

    #[test]
    fn test_from_config_true() {
        let mut c = Config::with_none();
        c.literal = Some(true);
        assert_eq!(Some(Literal(true)), Literal::from_config(&c));
    }

    #[test]
    fn test_from_config_false() {
        let mut c = Config::with_none();
        c.literal = Some(false);
        assert_eq!(Some(Literal(false)), Literal::from_config(&c));
    }
}