diff options
Diffstat (limited to 'src/navigation.rs')
-rw-r--r-- | src/navigation.rs | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/navigation.rs b/src/navigation.rs index 02156d3..bcb0c4d 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -2,23 +2,39 @@ use std::net::TcpStream; use std::io::BufRead; use std::io::BufReader; +extern crate erased_serde; extern crate serde_json; +use std::collections::BTreeMap; + use mass::Mass; use ship::Ship; +use astroid::Astroid; + +use erased_serde::Deserializer; pub fn Navigation(mut stream :TcpStream, mut buff_r : BufReader<TcpStream>){ loop { let mut data = String::new(); buff_r.read_line(&mut data).unwrap(); - let string_masses = data.split(","); - //let masses : Vec<Box<Mass>> = Vec::new(); + + let string_masses = data.split(";"); + let mut masses : Vec<Box<Mass>> = Vec::new(); for string_mass in string_masses { - //let mass = Box::new(Ship::new("",(0,0,0))); - //mass.deserialize(string_mass); + if string_mass.len() == 1 { + break; + } + let json = &mut serde_json::de::Deserializer::from_slice(string_mass.as_bytes()); + let mut deserialized : Box<Deserializer> = Box::new(Deserializer::erase(json)); - //let mass : Box<Mass> = serde_json::from_str(string_mass).unwrap(); - //masses.push(Box::new(mass)); + if string_mass.contains("Ship") { + let mass : Ship = erased_serde::deserialize(&mut deserialized).unwrap(); + masses.push(Box::new(mass)); + } + else { + let mass : Astroid = erased_serde::deserialize(&mut deserialized).unwrap(); + masses.push(Box::new(mass)); + } } } } |