1use ave_identity::{DigestIdentifier, PublicKey};
7use borsh::{BorshDeserialize, BorshSerialize};
8use serde::{Deserialize, Serialize};
9
10use crate::{Namespace, SchemaType, ValueWrapper};
11
12#[derive(
14 Debug,
15 Clone,
16 Serialize,
17 Deserialize,
18 Eq,
19 PartialEq,
20 BorshSerialize,
21 BorshDeserialize,
22)]
23pub enum EventRequest {
24 Create(CreateRequest),
26 Fact(FactRequest),
28 Transfer(TransferRequest),
30 Confirm(ConfirmRequest),
32 Reject(RejectRequest),
34 EOL(EOLRequest),
36}
37
38impl EventRequest {
39 pub fn check_request_signature(
41 &self,
42 signer: &PublicKey,
43 owner: &PublicKey,
44 new_owner: &Option<PublicKey>,
45 ) -> bool {
46 match self {
47 Self::Create(..) | Self::Transfer(..) | Self::EOL(..) => {
48 signer == owner
49 }
50 Self::Confirm(..) | Self::Reject(..) => {
51 new_owner.as_ref() == Some(signer)
52 }
53 Self::Fact(..) => true,
54 }
55 }
56
57 pub const fn is_create_event(&self) -> bool {
59 matches!(self, Self::Create(_create_request))
60 }
61
62 pub const fn is_fact_event(&self) -> bool {
64 matches!(self, Self::Fact(_fact_request))
65 }
66
67 pub fn get_subject_id(&self) -> DigestIdentifier {
72 match self {
73 Self::Create(_create_request) => DigestIdentifier::default(),
74 Self::Fact(fact_request) => fact_request.subject_id.clone(),
75 Self::Transfer(transfer_request) => {
76 transfer_request.subject_id.clone()
77 }
78 Self::Confirm(confirm_request) => {
79 confirm_request.subject_id.clone()
80 }
81 Self::Reject(reject_request) => reject_request.subject_id.clone(),
82 Self::EOL(eolrequest) => eolrequest.subject_id.clone(),
83 }
84 }
85}
86
87#[derive(
89 Debug,
90 Clone,
91 Serialize,
92 Deserialize,
93 Eq,
94 PartialEq,
95 BorshSerialize,
96 BorshDeserialize,
97)]
98pub struct CreateRequest {
99 pub name: Option<String>,
101 pub description: Option<String>,
103 pub governance_id: DigestIdentifier,
105 pub schema_id: SchemaType,
107 pub namespace: Namespace,
109}
110
111#[derive(
113 Debug,
114 Clone,
115 Serialize,
116 Deserialize,
117 Eq,
118 PartialEq,
119 BorshSerialize,
120 BorshDeserialize,
121)]
122pub struct FactRequest {
123 pub subject_id: DigestIdentifier,
125 pub payload: ValueWrapper,
127}
128
129#[derive(
131 Debug,
132 Clone,
133 Serialize,
134 Deserialize,
135 Eq,
136 PartialEq,
137 BorshSerialize,
138 BorshDeserialize,
139)]
140pub struct TransferRequest {
141 pub subject_id: DigestIdentifier,
143 pub new_owner: PublicKey,
145}
146
147#[derive(
149 Debug,
150 Clone,
151 Serialize,
152 Deserialize,
153 Eq,
154 PartialEq,
155 BorshSerialize,
156 BorshDeserialize,
157)]
158pub struct ConfirmRequest {
159 pub subject_id: DigestIdentifier,
160 pub name_old_owner: Option<String>,
162}
163
164#[derive(
166 Debug,
167 Clone,
168 Serialize,
169 Deserialize,
170 Eq,
171 PartialEq,
172 BorshSerialize,
173 BorshDeserialize,
174)]
175pub struct EOLRequest {
176 pub subject_id: DigestIdentifier,
178}
179
180#[derive(
182 Debug,
183 Clone,
184 Serialize,
185 Deserialize,
186 Eq,
187 PartialEq,
188 BorshSerialize,
189 BorshDeserialize,
190)]
191pub struct RejectRequest {
192 pub subject_id: DigestIdentifier,
193}