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