json
unknown
rust
2 years ago
3.6 kB
2
Indexable
extern crate serde_json; extern crate serde; #[macro_use] extern crate serde_derive; use serde_json::Value as JsonValue; use std::fmt; #[derive(Copy, Clone, Debug, Serialize, Deserialize)] struct GPS{ lat: f64, lon: f64, } enum employee_type { Teacher, Doctor, Police } #[derive(Serialize, Deserialize)] struct Teacher{ name: String, age: i64, location: GPS, student: Vec<String>, } struct Police{ name: String, age: i64, location: GPS, weapon: Vec<String>, } struct Doctor{ name: String, age: i64, location: GPS, patient: Vec<String>, } trait Employee{ fn find_location(&self) -> GPS; fn find_name(&self) -> &String; fn find_age(&self) -> i64; fn find_properties(&self) -> &Vec<String>; } impl Employee for Teacher{ fn find_location(&self) -> GPS{ self.location } fn find_name(&self) -> &String{ &self.name } fn find_age(&self) -> i64{ self.age } fn find_properties(&self) -> &Vec<String>{ &self.student } } impl Employee for Police{ fn find_location(&self) -> GPS{ self.location } fn find_name(&self) -> &String{ &self.name } fn find_age(&self) -> i64{ self.age } fn find_properties(&self) -> &Vec<String>{ &self.weapon } } impl Employee for Doctor{ fn find_location(&self) -> GPS{ self.location } fn find_name(&self) -> &String{ &self.name } fn find_age(&self) -> i64{ self.age } fn find_properties(&self) -> &Vec<String>{ &self.patient } } impl fmt::Display for Teacher { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, " Name: {}\n Age: {}\n Student: {:?}\n Pos: {}, {}\n", self.find_name(), self.find_age(), self.find_properties(), self.find_location().lat, self.find_location().lon) } } impl fmt::Display for Police { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, " Name: {}\n Age: {}\n Weapon: {:?}\n Pos: {}, {}\n", self.find_name(), self.find_age(), self.find_properties(), self.find_location().lat, self.find_location().lon) } } impl fmt::Display for Doctor { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, " Name: {}\n Age: {}\n Patient: {:?}\n Pos: {}, {}\n", self.find_name(), self.find_age(), self.find_properties(), self.find_location().lat, self.find_location().lon) } } fn main() { // let a = Teacher{name: "John".to_string(), age: 65, student: vec![String::from("A1"), String::from("A2")], location: GPS { lat: 8.15154, lon: -584.55 }}; // println!("{}", a); // let b = Police{name: "John".to_string(), age: 65, weapon: vec![String::from("A1"), String::from("A2")], location: GPS { lat: 8.15154, lon: -584.55 }}; // println!("{}", b); // let c = Doctor{name: "John".to_string(), age: 65, patient: vec![String::from("A1"), String::from("A2")], location: GPS { lat: 8.15154, lon: -584.55 }}; // println!("{}", c); let json_str = r#" { "name" : "John", "age" : 65, "location" : GPS { lat: 8.15154, lon: -584.55 }, "student" : ["a","b","c"] } "#; let res = serde_json::from_str(json_str); if res.is_ok(){ let p: JsonValue = res.unwrap(); println!("{}", p["name"]); }else { println!("error"); } }
Editor is loading...