add server configuration
This commit is contained in:
62
src/conf/mod.rs
Normal file
62
src/conf/mod.rs
Normal file
@@ -0,0 +1,62 @@
|
||||
use yaml_rust::yaml;
|
||||
use std::fs::File;
|
||||
use std::str::FromStr;
|
||||
use std::io::prelude::*;
|
||||
use std::collections::HashMap;
|
||||
|
||||
static file: &str = "mrprox.conf";
|
||||
|
||||
pub struct Servers{
|
||||
l_servers : HashMap<String, String>,
|
||||
}
|
||||
|
||||
impl Servers {
|
||||
pub fn new() -> Servers {
|
||||
Servers{
|
||||
l_servers: Self::get_servers(),
|
||||
}
|
||||
}
|
||||
|
||||
fn get_servers() -> HashMap<String, String> {
|
||||
let mut f = File::open(&file).unwrap();
|
||||
let mut s = String::new();
|
||||
let mut ret = HashMap::new();
|
||||
f.read_to_string(&mut s).unwrap();
|
||||
let docs = yaml::YamlLoader::load_from_str(&s).unwrap();
|
||||
let docs2;
|
||||
match &docs[0]["servers"] {
|
||||
yaml::Yaml::Hash(ref h) => docs2 = h,
|
||||
_ => return ret,
|
||||
}
|
||||
|
||||
|
||||
for (k, v) in docs2{
|
||||
//println!("{}",String::from(doc.as_str().unwrap()));
|
||||
ret.insert(String::from(k.as_str().unwrap()),
|
||||
String::from(v.as_str().unwrap()));
|
||||
}
|
||||
ret
|
||||
}
|
||||
|
||||
fn get_host(&self, host: &String) -> Option<(&String, &String)>{
|
||||
self.l_servers.get_key_value(host)
|
||||
}
|
||||
|
||||
pub fn get_server(&self, host: &String) -> Option<(String, u16)>{
|
||||
let raw: Vec<&str>;
|
||||
match self.get_host(host){
|
||||
Some(h) => raw=h.1.split(":").collect(),
|
||||
None => return None,
|
||||
}
|
||||
|
||||
if raw.len() == 2 {
|
||||
|
||||
match FromStr::from_str(raw[1]) {
|
||||
Ok(p) => return Some((String::from(raw[0]),p)),
|
||||
Err(_e) => return None,
|
||||
}
|
||||
} else {
|
||||
return None;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user