]>
Commit | Line | Data |
---|---|---|
dd066d28 DM |
1 | //use failure::*; |
2 | use std::sync::Arc; | |
3 | use std::collections::HashMap; | |
4 | ||
5 | use serde_json::Value; | |
6 | ||
a2479cfa WB |
7 | use proxmox::api::{RpcEnvironment, RpcEnvironmentType}; |
8 | ||
dd066d28 DM |
9 | use crate::server::WorkerTask; |
10 | use crate::backup::*; | |
11 | use crate::server::formatter::*; | |
12 | ||
13 | //use proxmox::tools; | |
14 | ||
15 | /// `RpcEnvironmet` implementation for backup reader service | |
16 | #[derive(Clone)] | |
17 | pub struct ReaderEnvironment { | |
18 | env_type: RpcEnvironmentType, | |
19 | result_attributes: HashMap<String, Value>, | |
20 | user: String, | |
21 | pub debug: bool, | |
22 | pub formatter: &'static OutputFormatter, | |
23 | pub worker: Arc<WorkerTask>, | |
24 | pub datastore: Arc<DataStore>, | |
25 | pub backup_dir: BackupDir, | |
26 | // state: Arc<Mutex<SharedBackupState>> | |
27 | } | |
28 | ||
29 | impl ReaderEnvironment { | |
30 | pub fn new( | |
31 | env_type: RpcEnvironmentType, | |
32 | user: String, | |
33 | worker: Arc<WorkerTask>, | |
34 | datastore: Arc<DataStore>, | |
35 | backup_dir: BackupDir, | |
36 | ) -> Self { | |
37 | ||
38 | ||
39 | Self { | |
40 | result_attributes: HashMap::new(), | |
41 | env_type, | |
42 | user, | |
43 | worker, | |
44 | datastore, | |
45 | debug: false, | |
46 | formatter: &JSON_FORMATTER, | |
47 | backup_dir, | |
48 | //state: Arc::new(Mutex::new(state)), | |
49 | } | |
50 | } | |
51 | ||
52 | pub fn log<S: AsRef<str>>(&self, msg: S) { | |
53 | self.worker.log(msg); | |
54 | } | |
55 | ||
56 | pub fn debug<S: AsRef<str>>(&self, msg: S) { | |
57 | if self.debug { self.worker.log(msg); } | |
58 | } | |
59 | ||
60 | } | |
61 | ||
62 | impl RpcEnvironment for ReaderEnvironment { | |
63 | ||
64 | fn set_result_attrib(&mut self, name: &str, value: Value) { | |
65 | self.result_attributes.insert(name.into(), value); | |
66 | } | |
67 | ||
68 | fn get_result_attrib(&self, name: &str) -> Option<&Value> { | |
69 | self.result_attributes.get(name) | |
70 | } | |
71 | ||
72 | fn env_type(&self) -> RpcEnvironmentType { | |
73 | self.env_type | |
74 | } | |
75 | ||
76 | fn set_user(&mut self, _user: Option<String>) { | |
77 | panic!("unable to change user"); | |
78 | } | |
79 | ||
80 | fn get_user(&self) -> Option<String> { | |
81 | Some(self.user.clone()) | |
82 | } | |
83 | } | |
84 | ||
85 | impl AsRef<ReaderEnvironment> for dyn RpcEnvironment { | |
86 | fn as_ref(&self) -> &ReaderEnvironment { | |
87 | self.as_any().downcast_ref::<ReaderEnvironment>().unwrap() | |
88 | } | |
89 | } | |
90 | ||
91 | impl AsRef<ReaderEnvironment> for Box<dyn RpcEnvironment> { | |
92 | fn as_ref(&self) -> &ReaderEnvironment { | |
93 | self.as_any().downcast_ref::<ReaderEnvironment>().unwrap() | |
94 | } | |
95 | } |