saa_common/
traits.rs

1use core::ops::Deref;
2use crate::{AuthError, CredentialId};
3
4
5pub trait Verifiable  {
6
7    fn id(&self) -> CredentialId;
8
9    fn hrp(&self) -> Option<String> {
10        None
11    }
12
13    fn validate(&self) -> Result<(), AuthError>;
14
15    #[cfg(feature = "native")]
16    fn verify(&self) -> Result<(), AuthError>;
17
18    #[cfg(feature = "wasm")]
19    fn verify_cosmwasm(&self,  _:  &dyn crate::wasm::Api) -> Result<(), AuthError>  {
20        #[cfg(feature = "native")]
21        {
22            self.verify()?;
23            return Ok(());
24        }
25        #[cfg(not(feature = "native"))]
26        Err(AuthError::generic("Not implemented"))
27    }
28}
29
30
31
32impl<T: Deref<Target = dyn Verifiable>> Verifiable for T {
33    
34    fn id(&self) -> CredentialId {
35        self.deref().id()
36    }
37
38    fn hrp(&self) -> Option<String> {
39        self.deref().hrp()
40    }
41
42    fn validate(&self) -> Result<(), AuthError> {
43        self.deref().validate()
44    }
45
46    #[cfg(feature = "native")]
47    fn verify(&self) -> Result<(), AuthError> {
48        self.deref().verify()
49    }
50
51    #[cfg(feature = "wasm")]
52    fn verify_cosmwasm(&self, api: &dyn crate::wasm::Api) -> Result<(), AuthError> {
53        self.deref().verify_cosmwasm(api)
54    }
55}
56