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
use ini::Ini; use std::error::Error; use url::Url; #[derive(Debug, Serialize, Deserialize)] struct User { username: String, token: String, kattis: String, } pub fn parse_kattisrc(path: String) -> Result<(), Box<Error>> { let kattisrc = Ini::load_from_file(path).unwrap(); let user_section = kattisrc.section(Some("user")).unwrap(); let kattis_section = kattisrc.section(Some("kattis")).unwrap(); let kattis_url = kattis_section.get("loginurl").unwrap(); let mut url = Url::parse(kattis_url)?; url.path_segments_mut().map_err(|_| "cannot be base")?.pop(); let user = User { username: user_section.get("username").unwrap().parse()?, token: user_section.get("token").unwrap().parse()?, kattis: url.to_string(), }; println!("{:?}", user); Ok(()) }