1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use crate::proxy::Proxy;
use crate::initdata::InitializationData;
use crate::errors::PropertyError;

/// The Communicator is a basic object in ZeroC Ice. Currently
/// this is more a stub that does dummy initialization.
pub struct Communicator {
    pub init_data: InitializationData
}

impl Communicator {
    pub fn new() -> Communicator {
        Communicator {
            init_data: InitializationData::new()
        }
    }

    pub fn string_to_proxy(&self, proxy_string: &str) -> Result<Proxy, Box<dyn std::error::Error>> {
        Proxy::new(proxy_string, &self.init_data.properties)
    }

    pub fn property_to_proxy(&self, property: &str) -> Result<Proxy, Box<dyn std::error::Error>> {
        match self.init_data.properties.get(property) {
            Some(value) => {
                Proxy::new(value, &self.init_data.properties)
            }
            None => {
                Err(Box::new(PropertyError::new(property)))
            }
        }
    }
}

pub fn initialize(config_file: &str) -> Communicator {
    let mut init_data = InitializationData::new();
    init_data.properties.load(config_file).unwrap();
    Communicator{
        init_data: init_data,
    }
}