saa_common/
traits.rs

1use core::ops::Deref;
2use std::borrow::Cow;
3
4use crate::{AuthError, CredentialId, CredentialName};
5
6
7pub trait Identifiable {
8    fn id(&self) -> CredentialId;
9    fn name(&self) -> CredentialName;
10}
11
12
13
14pub trait Verifiable : Identifiable  {
15    fn message(&self) -> Cow<[u8]>;
16    fn validate(&self) -> Result<(), AuthError>;
17    #[cfg(any(feature = "native", feature = "wasm"))]  
18    fn verify(&self,
19        #[cfg(feature = "wasm")]
20        deps: crate::wasm::Deps
21    ) -> Result<crate::CredentialInfo, AuthError>;
22}
23
24
25impl<T: Deref<Target = dyn Identifiable>> Identifiable for T {
26    fn id(&self) -> CredentialId {
27        self.deref().id()
28    }
29
30    fn name(&self) -> CredentialName {
31        self.deref().name()
32    }
33}
34
35
36
37impl<T: Deref> Verifiable for T 
38    where 
39        T: Identifiable,
40        T::Target: Identifiable + Verifiable
41{
42    
43    fn validate(&self) -> Result<(), AuthError> {
44        self.deref().validate()
45    }
46
47    #[cfg(any(feature = "native", feature = "wasm"))]
48    fn verify(&self,
49        #[cfg(feature = "wasm")]
50        deps: crate::wasm::Deps
51    ) -> Result<crate::CredentialInfo, AuthError> {
52        self.deref().verify(
53            #[cfg(feature = "wasm")]
54            deps
55        )
56    }
57    
58    fn message(&self) -> Cow<[u8]> {
59        self.deref().message()
60    }
61}
62
63
64