dfx_base/
data_dictionary_provider.rs

1use std::collections::BTreeMap;
2
3use crate::data_dictionary::DataDictionary;
4
5pub trait DataDictionaryProvider: Send {
6    fn get_session_data_dictionary(&self, begin_string: &str) -> &DataDictionary;
7    fn get_application_data_dictionary(&self, appl_ver_id: &str) -> &DataDictionary;
8    fn add_session_data_dictionary(&mut self, begin_string: &str, dictionary: DataDictionary);
9    fn add_application_data_dictionary(&mut self, appl_ver_id: &str, dictionary: DataDictionary);
10}
11
12#[derive(Clone, Debug, Default)]
13pub struct DefaultDataDictionaryProvider {
14    default: DataDictionary,
15    transport: BTreeMap<String, DataDictionary>,
16    app: BTreeMap<String, DataDictionary>,
17}
18impl DefaultDataDictionaryProvider {
19    pub fn new() -> Self {
20        DefaultDataDictionaryProvider::default()
21    }
22    pub fn boxed() -> Box<dyn DataDictionaryProvider> {
23        Box::new(DefaultDataDictionaryProvider::default())
24    }
25}
26
27impl DataDictionaryProvider for DefaultDataDictionaryProvider {
28    //TODO should this not be session id instead of begin string?
29    fn get_session_data_dictionary(&self, begin_string: &str) -> &DataDictionary {
30        //TODO
31        self.transport.get(begin_string).unwrap_or_else(|| &self.default)
32    }
33    fn get_application_data_dictionary(&self, appl_ver_id: &str) -> &DataDictionary {
34        //TODO
35        self.app.get(appl_ver_id).unwrap_or_else(|| &self.default)
36    }
37
38    fn add_session_data_dictionary(&mut self, begin_string: &str, dictionary: DataDictionary) {
39        self.transport.insert(begin_string.into(), dictionary);
40    }
41
42    fn add_application_data_dictionary(&mut self, appl_ver_id: &str, dictionary: DataDictionary) {
43        self.app.insert(appl_ver_id.into(), dictionary);
44    }
45}