holochain_types/
warrant.rs1use std::str::FromStr;
4
5use holochain_keystore::{AgentPubKeyExt, LairResult, MetaLairClient};
6use holochain_zome_types::prelude::*;
7
8#[derive(
10 Clone,
11 Debug,
12 Serialize,
13 Deserialize,
14 SerializedBytes,
15 Eq,
16 PartialEq,
17 Hash,
18 derive_more::From,
19 derive_more::Deref,
20)]
21pub struct WarrantOp(SignedWarrant);
22
23impl WarrantOp {
24 pub fn get_type(&self) -> WarrantOpType {
26 match self.proof {
27 WarrantProof::ChainIntegrity(_) => WarrantOpType::ChainIntegrityWarrant,
28 }
29 }
30
31 pub async fn sign(keystore: &MetaLairClient, warrant: Warrant) -> LairResult<Self> {
33 let signature = warrant.author.sign(keystore, warrant.clone()).await?;
34 Ok(Self::from(SignedWarrant::new(warrant, signature)))
35 }
36
37 pub fn timestamp(&self) -> Timestamp {
39 self.timestamp
40 }
41
42 pub fn warrant(&self) -> &Warrant {
44 self
45 }
46
47 pub fn into_warrant(self) -> Warrant {
49 self.0.into_data()
50 }
51}
52
53#[derive(
55 Clone,
56 Copy,
57 Debug,
58 Serialize,
59 Deserialize,
60 Eq,
61 PartialEq,
62 Hash,
63 derive_more::Display,
64 strum_macros::EnumString,
65)]
66pub enum WarrantOpType {
67 ChainIntegrityWarrant,
69}
70
71impl HashableContent for WarrantOp {
72 type HashType = hash_type::DhtOp;
73
74 fn hash_type(&self) -> Self::HashType {
75 hash_type::DhtOp
76 }
77
78 fn hashable_content(&self) -> HashableContentBytes {
79 self.warrant().hashable_content()
80 }
81}
82
83impl holochain_sqlite::rusqlite::ToSql for WarrantOpType {
84 fn to_sql(
85 &self,
86 ) -> holochain_sqlite::rusqlite::Result<holochain_sqlite::rusqlite::types::ToSqlOutput> {
87 Ok(holochain_sqlite::rusqlite::types::ToSqlOutput::Owned(
88 format!("{}", self).into(),
89 ))
90 }
91}
92
93impl holochain_sqlite::rusqlite::types::FromSql for WarrantOpType {
94 fn column_result(
95 value: holochain_sqlite::rusqlite::types::ValueRef<'_>,
96 ) -> holochain_sqlite::rusqlite::types::FromSqlResult<Self> {
97 String::column_result(value).and_then(|string| {
98 WarrantOpType::from_str(&string)
99 .map_err(|_| holochain_sqlite::rusqlite::types::FromSqlError::InvalidType)
100 })
101 }
102}