67 lines
2.0 KiB
Rust
67 lines
2.0 KiB
Rust
use std::{error::Error, fs::read_to_string, io};
|
|
use toml::{Table, Value};
|
|
|
|
pub struct ZoneConnectionData {
|
|
pub conection_str: String,
|
|
pub key_name: String,
|
|
pub key: String,
|
|
}
|
|
|
|
pub struct ServerZonesConnection {
|
|
pub root_domain: String,
|
|
pub servers_data: Vec<ZoneConnectionData>,
|
|
}
|
|
|
|
impl ZoneConnectionData {
|
|
pub fn get_config(file_name: &String) -> Result<Vec<Self>, Box<dyn Error>> {
|
|
let mut ret = Vec::new();
|
|
let key_toml = read_to_string(file_name)?.parse::<Table>()?;
|
|
|
|
for servers in key_toml["server"]
|
|
.as_array()
|
|
.ok_or(generate_toml_parser_error_in_field("server"))?
|
|
{
|
|
let conection_str: String = servers["connection_str"]
|
|
.as_str()
|
|
.ok_or(generate_toml_parser_error_in_field("connection_str"))?
|
|
.to_string();
|
|
let key_name: String = servers["key"]["name"]
|
|
.as_str()
|
|
.ok_or(generate_toml_parser_error_in_field("key name"))?
|
|
.to_string();
|
|
let key: String = servers["key"]["value"]
|
|
.as_str()
|
|
.ok_or(generate_toml_parser_error_in_field("key value"))?
|
|
.to_string();
|
|
ret.push(Self {
|
|
conection_str,
|
|
key_name,
|
|
key,
|
|
});
|
|
}
|
|
Ok(ret)
|
|
}
|
|
}
|
|
|
|
impl ServerZonesConnection {
|
|
pub fn get_config(file_name: &String) -> Result<Self, Box<dyn Error>> {
|
|
let root_domain: String =
|
|
read_to_string(file_name)?.parse::<Table>()?["zone"]["root_domain"]
|
|
.as_str()
|
|
.ok_or(generate_toml_parser_error_in_field("zone root_domain"))?
|
|
.to_string();
|
|
|
|
Ok(Self {
|
|
root_domain,
|
|
servers_data: ZoneConnectionData::get_config(file_name)?,
|
|
})
|
|
}
|
|
}
|
|
|
|
fn generate_toml_parser_error_in_field(field: &str) -> io::Error {
|
|
io::Error::new(
|
|
io::ErrorKind::InvalidData,
|
|
format!("Invalid format for config.toml in {} field", field),
|
|
)
|
|
}
|