age_setup/types/
public_key.rs1use 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}