-
Notifications
You must be signed in to change notification settings - Fork 61
/
appkey.rs
160 lines (136 loc) · 3.42 KB
/
appkey.rs
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use thiserror::Error;
use ya_client_model::NodeId;
use ya_service_bus::RpcMessage;
pub const BUS_ID: &str = "/local/appkey";
pub const DEFAULT_ROLE: &str = "manager";
pub const AUTOCONFIGURED_KEY_NAME: &str = "autoconfigured";
const DEFAULT_PAGE_SIZE: u32 = 20;
#[derive(Clone, Error, Debug, Serialize, Deserialize)]
#[error("appkey error [{code}]: {message}")]
pub struct Error {
pub code: u32,
pub message: String,
}
impl Error {
pub fn internal(e: impl std::fmt::Display) -> Self {
Self {
code: 500,
message: e.to_string(),
}
}
pub fn bad_request(e: impl std::fmt::Display) -> Self {
Self {
code: 400,
message: e.to_string(),
}
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Create {
pub name: String,
pub role: String,
pub identity: NodeId,
pub allow_origins: Vec<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Get {
pub key: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetByName {
pub name: String,
}
impl Get {
pub fn with_key(key: String) -> Self {
Get { key }
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct List {
pub identity: Option<String>,
pub page: u32,
pub per_page: u32,
}
impl List {
pub fn with_identity(identity: impl ToString) -> Self {
List {
identity: Some(identity.to_string()),
page: 1,
per_page: DEFAULT_PAGE_SIZE,
}
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Remove {
pub name: String,
pub identity: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AppKey {
pub name: String,
pub key: String,
pub role: String,
pub identity: NodeId,
pub created_date: NaiveDateTime,
pub allow_origins: Vec<String>,
}
impl RpcMessage for Create {
const ID: &'static str = "Create";
type Item = String;
type Error = Error;
}
impl RpcMessage for Get {
const ID: &'static str = "Get";
type Item = AppKey;
type Error = Error;
}
impl RpcMessage for GetByName {
const ID: &'static str = "GetByName";
type Item = AppKey;
type Error = Error;
}
impl RpcMessage for List {
const ID: &'static str = "List";
type Item = (Vec<AppKey>, u32);
type Error = Error;
}
impl RpcMessage for Remove {
const ID: &'static str = "Remove";
type Item = ();
type Error = Error;
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Subscribe {
pub endpoint: String,
}
impl RpcMessage for Subscribe {
const ID: &'static str = "Subscribe";
type Item = u64;
type Error = Error;
}
pub mod event {
use super::Error;
use crate::appkey::AppKey;
use serde::{Deserialize, Serialize};
use ya_service_bus::RpcMessage;
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum Event {
NewKey(AppKey),
DroppedKey(AppKey),
}
impl RpcMessage for Event {
const ID: &'static str = "AppKey__Event";
type Item = ();
type Error = Error;
}
}