1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
use super::{CmdError, Error, QueryResponse};
use crate::types::{
register::{Address, Entry, Register, RegisterOp, User},
PublicKey,
};
use serde::{Deserialize, Serialize};
use std::fmt;
use xor_name::XorName;
#[derive(Hash, Eq, PartialEq, PartialOrd, Clone, Serialize, Deserialize, Debug)]
pub enum RegisterRead {
Get(Address),
Read(Address),
GetPolicy(Address),
GetUserPermissions {
address: Address,
user: User,
},
GetOwner(Address),
}
#[allow(clippy::large_enum_variant)]
#[derive(Eq, PartialEq, Clone, Serialize, Deserialize)]
pub enum RegisterWrite {
New(Register),
Edit(RegisterOp<Entry>),
Delete(Address),
}
impl RegisterRead {
pub fn error(&self, error: Error) -> QueryResponse {
match *self {
RegisterRead::Get(_) => QueryResponse::GetRegister(Err(error)),
RegisterRead::Read(_) => QueryResponse::ReadRegister(Err(error)),
RegisterRead::GetPolicy(_) => QueryResponse::GetRegisterPolicy(Err(error)),
RegisterRead::GetUserPermissions { .. } => {
QueryResponse::GetRegisterUserPermissions(Err(error))
}
RegisterRead::GetOwner(_) => QueryResponse::GetRegisterOwner(Err(error)),
}
}
pub fn dst_address(&self) -> XorName {
match self {
RegisterRead::Get(ref address)
| RegisterRead::Read(ref address)
| RegisterRead::GetPolicy(ref address)
| RegisterRead::GetUserPermissions { ref address, .. }
| RegisterRead::GetOwner(ref address) => *address.name(),
}
}
}
impl RegisterWrite {
pub fn error(&self, error: Error) -> CmdError {
CmdError::Data(error)
}
pub fn dst_address(&self) -> XorName {
match self {
RegisterWrite::New(ref data) => *data.name(),
RegisterWrite::Delete(ref address) => *address.name(),
RegisterWrite::Edit(ref op) => *op.address.name(),
}
}
pub fn owner(&self) -> Option<PublicKey> {
match self {
Self::New(data) => Some(data.owner()),
_ => None,
}
}
}
impl fmt::Debug for RegisterWrite {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
write!(
formatter,
"RegisterWrite::{}",
match self {
RegisterWrite::New(register) => format!("New({:?})", register.address()),
RegisterWrite::Delete(address) => format!("Delete({:?})", address),
RegisterWrite::Edit(op) => format!("Edit({:?})", op),
}
)
}
}