1use crate::errors::Result;
2use std::fmt;
3#[derive(Debug, Clone)]
4pub struct PublicKey(String);
5impl PublicKey {
6 pub fn new(raw: String) -> Result<Self> {
7 crate::validation::validate_age_prefix(&raw)?;
8 Ok(Self(raw))
9 }
10 #[must_use]
11 pub fn expose(&self) -> &str {
12 &self.0
13 }
14}
15impl fmt::Display for PublicKey {
16 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17 write!(f, "{}", self.0)
18 }
19}
20impl AsRef<str> for PublicKey {
21 fn as_ref(&self) -> &str {
22 &self.0
23 }
24}
25#[cfg(test)]
26mod tests {
27 use super::*;
28 #[test]
29 fn valid() {
30 let pk = PublicKey::new("age1test".into()).unwrap();
31 assert_eq!(pk.expose(), "age1test");
32 }
33 #[test]
34 fn invalid() {
35 assert!(PublicKey::new("bad".into()).is_err());
36 }
37}