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