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