sylvia_iot_broker/models/
dldata_buffer.rs1use std::error::Error as StdError;
4
5use async_trait::async_trait;
6use chrono::{DateTime, Utc};
7
8#[derive(Debug, PartialEq)]
10pub struct DlDataBuffer {
11 pub data_id: String,
12 pub unit_id: String,
13 pub unit_code: String,
14 pub application_id: String,
15 pub application_code: String,
16 pub network_id: String,
17 pub network_addr: String,
18 pub device_id: String,
19 pub created_at: DateTime<Utc>,
20 pub expired_at: DateTime<Utc>,
21}
22
23pub enum SortKey {
25 CreatedAt,
26 ExpiredAt,
27 ApplicationCode,
28}
29
30pub struct SortCond {
32 pub key: SortKey,
33 pub asc: bool,
34}
35
36pub struct ListOptions<'a> {
38 pub cond: &'a ListQueryCond<'a>,
40 pub offset: Option<u64>,
42 pub limit: Option<u64>,
44 pub sort: Option<&'a [SortCond]>,
46 pub cursor_max: Option<u64>,
50}
51
52#[derive(Default)]
54pub struct QueryCond<'a> {
55 pub data_id: Option<&'a str>,
56 pub unit_id: Option<&'a str>,
57 pub application_id: Option<&'a str>,
58 pub network_id: Option<&'a str>,
59 pub network_addrs: Option<&'a Vec<&'a str>>,
60 pub device_id: Option<&'a str>,
61}
62
63#[derive(Default)]
65pub struct ListQueryCond<'a> {
66 pub unit_id: Option<&'a str>,
68 pub application_id: Option<&'a str>,
70 pub network_id: Option<&'a str>,
72 pub device_id: Option<&'a str>,
74}
75
76#[async_trait]
78pub trait DlDataBufferModel: Sync {
79 async fn init(&self) -> Result<(), Box<dyn StdError>>;
81
82 async fn count(&self, cond: &ListQueryCond) -> Result<u64, Box<dyn StdError>>;
86
87 async fn list(
95 &self,
96 opts: &ListOptions,
97 cursor: Option<Box<dyn Cursor>>,
98 ) -> Result<(Vec<DlDataBuffer>, Option<Box<dyn Cursor>>), Box<dyn StdError>>;
99
100 async fn get(&self, data_id: &str) -> Result<Option<DlDataBuffer>, Box<dyn StdError>>;
102
103 async fn add(&self, data: &DlDataBuffer) -> Result<(), Box<dyn StdError>>;
105
106 async fn del(&self, cond: &QueryCond) -> Result<(), Box<dyn StdError>>;
108}
109
110#[async_trait]
115pub trait Cursor: Send {
116 async fn try_next(&mut self) -> Result<Option<DlDataBuffer>, Box<dyn StdError>>;
117
118 fn offset(&self) -> u64;
119}