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
16    fn message(&self) -> Cow<[u8]>;
17
18    fn validate(&self) -> Result<(), AuthError>;
19
20    #[cfg(any(feature = "native", feature = "wasm"))]  
21    fn verify(&self,
22        #[cfg(feature = "wasm")]
23        deps: crate::wasm::Deps
24    ) -> Result<crate::CredentialInfo, AuthError>;
25
26}
27
28
29impl<T: Deref<Target = dyn Identifiable>> Identifiable for T {
30    fn id(&self) -> CredentialId {
31        self.deref().id()
32    }
33
34    fn name(&self) -> CredentialName {
35        self.deref().name()
36    }
37}
38
39
40
41impl<T: Deref> Verifiable for T 
42    where 
43        T: Identifiable,
44        T::Target: Identifiable + Verifiable
45{
46    
47    fn validate(&self) -> Result<(), AuthError> {
48        self.deref().validate()
49    }
50
51    #[cfg(any(feature = "native", feature = "wasm"))]
52    fn verify(&self,
53        #[cfg(feature = "wasm")]
54        deps: crate::wasm::Deps
55    ) -> Result<crate::CredentialInfo, AuthError> {
56        self.deref().verify(
57            #[cfg(feature = "wasm")]
58            deps
59        )
60    }
61    
62    fn message(&self) -> Cow<[u8]> {
63        self.deref().message()
64    }
65}
66
67
68