Skip to main content

passay_rs/rule/
reference.rs

1use std::any::Any;
2use std::fmt::Debug;
3
4/// Reference to another password.
5pub trait Reference: Debug + Any {
6    fn password(&self) -> &str;
7    fn salt(&self) -> &Option<Salt>;
8
9    fn as_any(&self) -> &dyn Any;
10}
11
12pub enum Salt {
13    Prefix(String),
14    Suffix(String),
15}
16
17impl Salt {
18    pub fn prefix(s: String) -> Salt {
19        Salt::Prefix(s)
20    }
21    pub fn suffix(s: String) -> Salt {
22        Salt::Suffix(s)
23    }
24    pub fn apply_to(&self, password: String) -> String {
25        match self {
26            Salt::Prefix(s) => {
27                let mut s = s.to_owned();
28                s.push_str(&password);
29                s
30            }
31            Salt::Suffix(s) => {
32                let mut pass = password.to_owned();
33                pass.push_str(s);
34                pass
35            }
36        }
37    }
38}