]> git.proxmox.com Git - proxmox-backup.git/blame - src/api2/reader/environment.rs
api/compat: drop more compat imports from api_schema.rs
[proxmox-backup.git] / src / api2 / reader / environment.rs
CommitLineData
dd066d28
DM
1//use failure::*;
2use std::sync::Arc;
3use std::collections::HashMap;
4
5use serde_json::Value;
6
a2479cfa
WB
7use proxmox::api::{RpcEnvironment, RpcEnvironmentType};
8
dd066d28
DM
9use crate::server::WorkerTask;
10use crate::backup::*;
11use crate::server::formatter::*;
12
13//use proxmox::tools;
14
15/// `RpcEnvironmet` implementation for backup reader service
16#[derive(Clone)]
17pub 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
29impl 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
62impl 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
85impl AsRef<ReaderEnvironment> for dyn RpcEnvironment {
86 fn as_ref(&self) -> &ReaderEnvironment {
87 self.as_any().downcast_ref::<ReaderEnvironment>().unwrap()
88 }
89}
90
91impl AsRef<ReaderEnvironment> for Box<dyn RpcEnvironment> {
92 fn as_ref(&self) -> &ReaderEnvironment {
93 self.as_any().downcast_ref::<ReaderEnvironment>().unwrap()
94 }
95}