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