sylvia_iot_broker/models/
network_route.rs1use std::error::Error as StdError;
4
5use async_trait::async_trait;
6use chrono::{DateTime, Utc};
7
8#[derive(Debug, PartialEq)]
10pub struct NetworkRoute {
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 network_id: String,
17 pub network_code: String,
18 pub created_at: DateTime<Utc>,
19}
20
21#[derive(Clone)]
23pub struct NetworkRouteCacheUlData {
24 pub app_mgr_keys: Vec<String>,
25}
26
27pub enum SortKey {
29 CreatedAt,
30 ApplicationCode,
31 NetworkCode,
32}
33
34pub struct SortCond {
36 pub key: SortKey,
37 pub asc: bool,
38}
39
40pub struct ListOptions<'a> {
42 pub cond: &'a ListQueryCond<'a>,
44 pub offset: Option<u64>,
46 pub limit: Option<u64>,
48 pub sort: Option<&'a [SortCond]>,
50 pub cursor_max: Option<u64>,
54}
55
56#[derive(Default)]
58pub struct QueryCond<'a> {
59 pub route_id: Option<&'a str>,
60 pub unit_id: Option<&'a str>,
61 pub application_id: Option<&'a str>,
62 pub network_id: Option<&'a str>,
63}
64
65#[derive(Default)]
67pub struct ListQueryCond<'a> {
68 pub route_id: Option<&'a str>,
70 pub unit_id: Option<&'a str>,
72 pub unit_code: Option<&'a str>,
74 pub application_id: Option<&'a str>,
76 pub application_code: Option<&'a str>,
78 pub network_id: Option<&'a str>,
80 pub network_code: Option<&'a str>,
82}
83
84#[async_trait]
86pub trait NetworkRouteModel: Sync {
87 async fn init(&self) -> Result<(), Box<dyn StdError>>;
89
90 async fn count(&self, cond: &ListQueryCond) -> Result<u64, Box<dyn StdError>>;
94
95 async fn list(
103 &self,
104 opts: &ListOptions,
105 cursor: Option<Box<dyn Cursor>>,
106 ) -> Result<(Vec<NetworkRoute>, Option<Box<dyn Cursor>>), Box<dyn StdError>>;
107
108 async fn get(&self, route_id: &str) -> Result<Option<NetworkRoute>, Box<dyn StdError>>;
112
113 async fn add(&self, route: &NetworkRoute) -> Result<(), Box<dyn StdError>>;
115
116 async fn del(&self, cond: &QueryCond) -> Result<(), Box<dyn StdError>>;
118}
119
120#[async_trait]
125pub trait Cursor: Send {
126 async fn try_next(&mut self) -> Result<Option<NetworkRoute>, Box<dyn StdError>>;
127
128 fn offset(&self) -> u64;
129}
130
131#[async_trait]
133pub trait NetworkRouteCache: Sync {
134 async fn clear(&self) -> Result<(), Box<dyn StdError>>;
136
137 async fn get_uldata(
139 &self,
140 network_id: &str,
141 ) -> Result<Option<NetworkRouteCacheUlData>, Box<dyn StdError>>;
142
143 async fn set_uldata(
145 &self,
146 network_id: &str,
147 value: Option<&NetworkRouteCacheUlData>,
148 ) -> Result<(), Box<dyn StdError>>;
149
150 async fn del_uldata(&self, network_id: &str) -> Result<(), Box<dyn StdError>>;
152}