dfx_base/
data_dictionary_provider.rs1use 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 fn get_session_data_dictionary(&self, begin_string: &str) -> &DataDictionary {
30 self.transport.get(begin_string).unwrap_or_else(|| &self.default)
32 }
33 fn get_application_data_dictionary(&self, appl_ver_id: &str) -> &DataDictionary {
34 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}