sylvia_iot_data/models/
network_uldata.rs1use std::error::Error as StdError;
4
5use async_trait::async_trait;
6use chrono::{DateTime, Utc};
7use serde_json::{Map, Value};
8
9#[derive(Debug, PartialEq)]
11pub struct NetworkUlData {
12 pub data_id: String,
13 pub proc: DateTime<Utc>,
14 pub unit_code: Option<String>,
15 pub network_code: String,
16 pub network_addr: String,
17 pub unit_id: Option<String>,
18 pub device_id: Option<String>,
19 pub time: DateTime<Utc>,
20 pub profile: String,
21 pub data: String,
22 pub extension: Option<Map<String, Value>>,
23}
24
25pub enum SortKey {
27 Proc,
28 Time,
29 NetworkCode,
30 NetworkAddr,
31}
32
33pub struct SortCond {
35 pub key: SortKey,
36 pub asc: bool,
37}
38
39pub struct ListOptions<'a> {
41 pub cond: &'a ListQueryCond<'a>,
43 pub offset: Option<u64>,
45 pub limit: Option<u64>,
47 pub sort: Option<&'a [SortCond]>,
49 pub cursor_max: Option<u64>,
53}
54
55#[derive(Default)]
57pub struct QueryCond<'a> {
58 pub unit_id: Option<&'a str>,
59 pub device_id: Option<&'a str>,
60 pub proc_gte: Option<DateTime<Utc>>,
61 pub proc_lte: Option<DateTime<Utc>>,
62}
63
64#[derive(Default)]
66pub struct ListQueryCond<'a> {
67 pub unit_id: Option<&'a str>,
69 pub device_id: Option<&'a str>,
71 pub network_code: Option<&'a str>,
73 pub network_addr: Option<&'a str>,
75 pub profile: Option<&'a str>,
77 pub proc_gte: Option<DateTime<Utc>>,
79 pub proc_lte: Option<DateTime<Utc>>,
81 pub time_gte: Option<DateTime<Utc>>,
83 pub time_lte: Option<DateTime<Utc>>,
85}
86
87#[async_trait]
89pub trait NetworkUlDataModel: Sync {
90 async fn init(&self) -> Result<(), Box<dyn StdError>>;
92
93 async fn count(&self, cond: &ListQueryCond) -> Result<u64, Box<dyn StdError>>;
97
98 async fn list(
106 &self,
107 opts: &ListOptions,
108 cursor: Option<Box<dyn Cursor>>,
109 ) -> Result<(Vec<NetworkUlData>, Option<Box<dyn Cursor>>), Box<dyn StdError>>;
110
111 async fn add(&self, data: &NetworkUlData) -> Result<(), Box<dyn StdError>>;
113
114 async fn del(&self, cond: &QueryCond) -> Result<(), Box<dyn StdError>>;
116}
117
118#[async_trait]
123pub trait Cursor: Send {
124 async fn try_next(&mut self) -> Result<Option<NetworkUlData>, Box<dyn StdError>>;
125
126 fn offset(&self) -> u64;
127}
128
129pub const EXPIRES: i64 = 100 * 86400;