sylvia_iot_data/models/
model_sqlite.rs1use std::{error::Error as StdError, sync::Arc};
4
5use async_trait::async_trait;
6use sqlx::SqlitePool;
7
8use super::{
9 application_dldata, application_uldata, coremgr_opdata, network_dldata, network_uldata,
10 sqlite::{
11 application_dldata::Model as ApplicationDlDataModel,
12 application_uldata::Model as ApplicationUlDataModel,
13 conn::{self, Options},
14 coremgr_opdata::Model as CoremgrOpDataModel,
15 network_dldata::Model as NetworkDlDataModel,
16 network_uldata::Model as NetworkUlDataModel,
17 },
18};
19
20#[derive(Clone)]
22pub struct Model {
23 conn: Arc<SqlitePool>,
24 application_dldata: Arc<ApplicationDlDataModel>,
25 application_uldata: Arc<ApplicationUlDataModel>,
26 coremgr_opdata: Arc<CoremgrOpDataModel>,
27 network_dldata: Arc<NetworkDlDataModel>,
28 network_uldata: Arc<NetworkUlDataModel>,
29}
30
31impl Model {
32 pub async fn new(opts: &Options) -> Result<Self, Box<dyn StdError>> {
34 let conn = Arc::new(conn::connect(opts).await?);
35 Ok(Model {
36 conn: conn.clone(),
37 application_dldata: Arc::new(ApplicationDlDataModel::new(conn.clone()).await?),
38 application_uldata: Arc::new(ApplicationUlDataModel::new(conn.clone()).await?),
39 coremgr_opdata: Arc::new(CoremgrOpDataModel::new(conn.clone()).await?),
40 network_dldata: Arc::new(NetworkDlDataModel::new(conn.clone()).await?),
41 network_uldata: Arc::new(NetworkUlDataModel::new(conn.clone()).await?),
42 })
43 }
44
45 pub fn get_connection(&self) -> &SqlitePool {
47 &self.conn
48 }
49}
50
51#[async_trait]
52impl super::Model for Model {
53 async fn close(&self) -> Result<(), Box<dyn StdError>> {
54 Ok(())
55 }
56
57 fn application_dldata(&self) -> &dyn application_dldata::ApplicationDlDataModel {
58 self.application_dldata.as_ref()
59 }
60
61 fn application_uldata(&self) -> &dyn application_uldata::ApplicationUlDataModel {
62 self.application_uldata.as_ref()
63 }
64
65 fn coremgr_opdata(&self) -> &dyn coremgr_opdata::CoremgrOpDataModel {
66 self.coremgr_opdata.as_ref()
67 }
68
69 fn network_dldata(&self) -> &dyn network_dldata::NetworkDlDataModel {
70 self.network_dldata.as_ref()
71 }
72
73 fn network_uldata(&self) -> &dyn network_uldata::NetworkUlDataModel {
74 self.network_uldata.as_ref()
75 }
76}