Skip to main content

age_setup/types/
public_key.rs

1use crate::errors::Result;
2use crate::types::validation::validate_age_prefix;
3use std::fmt;
4#[derive(Debug, Clone)]
5pub struct PublicKey(String);
6impl PublicKey {
7    pub(crate) fn new(raw: String) -> Result<Self> {
8        validate_age_prefix(&raw)?;
9        Ok(Self(raw))
10    }
11    #[must_use]
12    pub fn expose(&self) -> &str {
13        &self.0
14    }
15}
16impl fmt::Display for PublicKey {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        write!(f, "{}", self.0)
19    }
20}
21impl AsRef<str> for PublicKey {
22    fn as_ref(&self) -> &str {
23        &self.0
24    }
25}
26#[cfg(test)]
27mod tests {
28    use super::*;
29    #[test]
30    fn test_public_key_new_valid() {
31        let pk = PublicKey::new("age1valid".to_string());
32        assert!(pk.is_ok());
33        assert_eq!(pk.unwrap().expose(), "age1valid");
34    }
35    #[test]
36    fn test_public_key_new_invalid() {
37        let pk = PublicKey::new("invalid".to_string());
38        assert!(pk.is_err());
39    }
40    #[test]
41    fn test_public_key_display() {
42        let pk = PublicKey::new("age1test".to_string()).unwrap();
43        assert_eq!(format!("{}", pk), "age1test");
44    }
45    #[test]
46    fn test_public_key_asref() {
47        let pk = PublicKey::new("age1asref".to_string()).unwrap();
48        let s: &str = pk.as_ref();
49        assert_eq!(s, "age1asref");
50    }
51    #[test]
52    fn test_public_key_clone() {
53        let pk1 = PublicKey::new("age1clone".to_string()).unwrap();
54        let pk2 = pk1.clone();
55        assert_eq!(pk1.expose(), pk2.expose());
56    }
57}