pass_it_on/configuration/
client_configuration_file.rs1use crate::configuration::{collect_interfaces, ClientConfiguration};
2use crate::interfaces::{Interface, InterfaceConfig};
3use crate::Error;
4use serde::Deserialize;
5
6#[derive(Deserialize, Debug)]
8pub(super) struct ClientConfigFileParser {
9 client: ClientConfigFile,
10}
11
12#[derive(Deserialize, Debug)]
14pub struct ClientConfigFile {
15 key: String,
16 interface: Vec<Box<dyn InterfaceConfig>>,
17}
18
19impl ClientConfigFileParser {
20 pub fn from(string: &str) -> Result<ClientConfiguration, Error> {
22 let parsed: ClientConfigFileParser = toml::from_str(string)?;
23 parsed.client.try_into()
24 }
25}
26
27impl TryFrom<ClientConfigFile> for ClientConfiguration {
28 type Error = Error;
29
30 fn try_from(value: ClientConfigFile) -> Result<Self, Self::Error> {
31 let interfaces: Vec<Box<dyn Interface + Send>> = collect_interfaces(value.interface)?;
32 ClientConfiguration::new(value.key.as_str(), interfaces)
33 }
34}