sylvia_iot_broker/models/
device_route.rs1use std::error::Error as StdError;
4
5use async_trait::async_trait;
6use chrono::{DateTime, Utc};
7
8#[derive(Debug, PartialEq)]
10pub struct DeviceRoute {
11 pub route_id: String,
12 pub unit_id: String,
13 pub unit_code: String, pub application_id: String,
15 pub application_code: String,
16 pub device_id: String,
17 pub network_id: String,
18 pub network_code: String,
19 pub network_addr: String,
20 pub profile: String,
21 pub created_at: DateTime<Utc>,
22 pub modified_at: DateTime<Utc>,
23}
24
25#[derive(Clone)]
27pub struct DeviceRouteCacheUlData {
28 pub app_mgr_keys: Vec<String>,
29}
30
31#[derive(Clone)]
34pub struct DeviceRouteCacheDlData {
35 pub net_mgr_key: String,
36 pub network_id: String,
37 pub network_addr: String,
38 pub device_id: String,
39 pub profile: String,
40}
41
42pub enum SortKey {
44 CreatedAt,
45 ModifiedAt,
46 ApplicationCode,
47 NetworkCode,
48 NetworkAddr,
49}
50
51pub struct SortCond {
53 pub key: SortKey,
54 pub asc: bool,
55}
56
57pub struct ListOptions<'a> {
59 pub cond: &'a ListQueryCond<'a>,
61 pub offset: Option<u64>,
63 pub limit: Option<u64>,
65 pub sort: Option<&'a [SortCond]>,
67 pub cursor_max: Option<u64>,
71}
72
73#[derive(Default)]
75pub struct QueryCond<'a> {
76 pub route_id: Option<&'a str>,
77 pub unit_id: Option<&'a str>,
78 pub application_id: Option<&'a str>,
79 pub network_id: Option<&'a str>,
80 pub device_id: Option<&'a str>,
81 pub network_addrs: Option<&'a Vec<&'a str>>,
82}
83
84#[derive(Default)]
86pub struct ListQueryCond<'a> {
87 pub route_id: Option<&'a str>,
89 pub unit_id: Option<&'a str>,
91 pub unit_code: Option<&'a str>,
93 pub application_id: Option<&'a str>,
95 pub application_code: Option<&'a str>,
97 pub network_id: Option<&'a str>,
99 pub network_code: Option<&'a str>,
101 pub network_addr: Option<&'a str>,
103 pub network_addrs: Option<&'a Vec<&'a str>>,
105 pub device_id: Option<&'a str>,
107}
108
109pub struct GetCacheQueryCond<'a> {
111 pub unit_code: &'a str,
113 pub network_code: &'a str,
115 pub network_addr: &'a str,
117}
118
119pub struct DelCacheQueryCond<'a> {
121 pub unit_code: &'a str,
123 pub network_code: Option<&'a str>,
125 pub network_addr: Option<&'a str>,
127}
128
129pub struct GetCachePubQueryCond<'a> {
131 pub unit_id: &'a str,
133 pub device_id: &'a str,
135}
136
137pub struct DelCachePubQueryCond<'a> {
139 pub unit_id: &'a str,
141 pub device_id: Option<&'a str>,
143}
144
145pub struct UpdateQueryCond<'a> {
147 pub device_id: &'a str,
149}
150
151#[derive(Default)]
153pub struct Updates<'a> {
154 pub modified_at: Option<DateTime<Utc>>,
155 pub profile: Option<&'a str>,
156}
157
158#[async_trait]
160pub trait DeviceRouteModel: Sync {
161 async fn init(&self) -> Result<(), Box<dyn StdError>>;
163
164 async fn count(&self, cond: &ListQueryCond) -> Result<u64, Box<dyn StdError>>;
168
169 async fn list(
177 &self,
178 opts: &ListOptions,
179 cursor: Option<Box<dyn Cursor>>,
180 ) -> Result<(Vec<DeviceRoute>, Option<Box<dyn Cursor>>), Box<dyn StdError>>;
181
182 async fn get(&self, route_id: &str) -> Result<Option<DeviceRoute>, Box<dyn StdError>>;
186
187 async fn add(&self, route: &DeviceRoute) -> Result<(), Box<dyn StdError>>;
189
190 async fn add_bulk(&self, devices: &Vec<DeviceRoute>) -> Result<(), Box<dyn StdError>>;
192
193 async fn del(&self, cond: &QueryCond) -> Result<(), Box<dyn StdError>>;
195
196 async fn update(
198 &self,
199 cond: &UpdateQueryCond,
200 updates: &Updates,
201 ) -> Result<(), Box<dyn StdError>>;
202}
203
204#[async_trait]
209pub trait Cursor: Send {
210 async fn try_next(&mut self) -> Result<Option<DeviceRoute>, Box<dyn StdError>>;
211
212 fn offset(&self) -> u64;
213}
214
215#[async_trait]
217pub trait DeviceRouteCache: Sync {
218 async fn clear(&self) -> Result<(), Box<dyn StdError>>;
220
221 async fn get_uldata(
223 &self,
224 device_id: &str,
225 ) -> Result<Option<DeviceRouteCacheUlData>, Box<dyn StdError>>;
226
227 async fn set_uldata(
229 &self,
230 device_id: &str,
231 value: Option<&DeviceRouteCacheUlData>,
232 ) -> Result<(), Box<dyn StdError>>;
233
234 async fn del_uldata(&self, device_id: &str) -> Result<(), Box<dyn StdError>>;
236
237 async fn get_dldata(
239 &self,
240 cond: &GetCacheQueryCond,
241 ) -> Result<Option<DeviceRouteCacheDlData>, Box<dyn StdError>>;
242
243 async fn set_dldata(
245 &self,
246 cond: &GetCacheQueryCond,
247 value: Option<&DeviceRouteCacheDlData>,
248 ) -> Result<(), Box<dyn StdError>>;
249
250 async fn del_dldata(&self, cond: &DelCacheQueryCond) -> Result<(), Box<dyn StdError>>;
252
253 async fn get_dldata_pub(
255 &self,
256 cond: &GetCachePubQueryCond,
257 ) -> Result<Option<DeviceRouteCacheDlData>, Box<dyn StdError>>;
258
259 async fn set_dldata_pub(
261 &self,
262 cond: &GetCachePubQueryCond,
263 value: Option<&DeviceRouteCacheDlData>,
264 ) -> Result<(), Box<dyn StdError>>;
265
266 async fn del_dldata_pub(&self, cond: &DelCachePubQueryCond) -> Result<(), Box<dyn StdError>>;
268}