1use ave_identity::{DigestIdentifier, PublicKey};
2use borsh::{BorshDeserialize, BorshSerialize};
3use serde::{Deserialize, Serialize};
4
5use crate::{Namespace, SchemaType, ValueWrapper};
6
7#[derive(
9 Debug,
10 Clone,
11 Serialize,
12 Deserialize,
13 Eq,
14 PartialEq,
15 BorshSerialize,
16 BorshDeserialize,
17)]
18pub enum EventRequest {
19 Create(CreateRequest),
21 Fact(FactRequest),
23 Transfer(TransferRequest),
25
26 Confirm(ConfirmRequest),
27
28 Reject(RejectRequest),
29 EOL(EOLRequest),
31}
32
33impl EventRequest {
34 pub fn check_request_signature(
35 &self,
36 signer: &PublicKey,
37 owner: &PublicKey,
38 new_owner: &Option<PublicKey>,
39 ) -> bool {
40 match self {
41 EventRequest::Create(..)
42 | EventRequest::Transfer(..)
43 | EventRequest::EOL(..) => signer == owner,
44 EventRequest::Confirm(..) | EventRequest::Reject(..) => {
45 if let Some(new_owner) = new_owner {
46 new_owner == signer
47 } else {
48 false
49 }
50 }
51 EventRequest::Fact(..) => true,
52 }
53 }
54
55 pub fn is_create_event(&self) -> bool {
56 matches!(self, EventRequest::Create(_create_request))
57 }
58 pub fn is_fact_event(&self) -> bool {
59 matches!(self, EventRequest::Fact(_fact_request))
60 }
61
62 pub fn get_subject_id(&self) -> DigestIdentifier {
63 match self {
64 EventRequest::Create(_create_request) => {
65 DigestIdentifier::default()
66 }
67 EventRequest::Fact(fact_request) => fact_request.subject_id.clone(),
68 EventRequest::Transfer(transfer_request) => {
69 transfer_request.subject_id.clone()
70 }
71 EventRequest::Confirm(confirm_request) => {
72 confirm_request.subject_id.clone()
73 }
74 EventRequest::Reject(reject_request) => {
75 reject_request.subject_id.clone()
76 }
77 EventRequest::EOL(eolrequest) => eolrequest.subject_id.clone(),
78 }
79 }
80}
81
82#[derive(
84 Debug,
85 Clone,
86 Serialize,
87 Deserialize,
88 Eq,
89 PartialEq,
90 BorshSerialize,
91 BorshDeserialize,
92)]
93pub struct CreateRequest {
94 pub name: Option<String>,
96 pub description: Option<String>,
98 pub governance_id: DigestIdentifier,
100 pub schema_id: SchemaType,
102 pub namespace: Namespace,
104}
105
106#[derive(
108 Debug,
109 Clone,
110 Serialize,
111 Deserialize,
112 Eq,
113 PartialEq,
114 BorshSerialize,
115 BorshDeserialize,
116)]
117pub struct FactRequest {
118 pub subject_id: DigestIdentifier,
120 pub payload: ValueWrapper,
122}
123
124#[derive(
126 Debug,
127 Clone,
128 Serialize,
129 Deserialize,
130 Eq,
131 PartialEq,
132 BorshSerialize,
133 BorshDeserialize,
134)]
135pub struct TransferRequest {
136 pub subject_id: DigestIdentifier,
138 pub new_owner: PublicKey,
140}
141
142#[derive(
144 Debug,
145 Clone,
146 Serialize,
147 Deserialize,
148 Eq,
149 PartialEq,
150 BorshSerialize,
151 BorshDeserialize,
152)]
153pub struct ConfirmRequest {
154 pub subject_id: DigestIdentifier,
155 pub name_old_owner: Option<String>,
157}
158
159#[derive(
161 Debug,
162 Clone,
163 Serialize,
164 Deserialize,
165 Eq,
166 PartialEq,
167 BorshSerialize,
168 BorshDeserialize,
169)]
170pub struct EOLRequest {
171 pub subject_id: DigestIdentifier,
173}
174
175#[derive(
176 Debug,
177 Clone,
178 Serialize,
179 Deserialize,
180 Eq,
181 PartialEq,
182 BorshSerialize,
183 BorshDeserialize,
184)]
185pub struct RejectRequest {
186 pub subject_id: DigestIdentifier,
187}