diff options
author | tom barrett <spalf0@gmail.com> | 2018-02-26 08:51:08 -0600 |
---|---|---|
committer | tom barrett <spalf0@gmail.com> | 2018-02-26 08:51:08 -0600 |
commit | c14dcf1998f5ba1ffea813da4f793fc3bde8c2b7 (patch) | |
tree | f650e9bdf008a785b4627db04446c717f530e7c5 /src/navigation.rs | |
parent | 6634f73a6768f61f928d51941be5e970e6011f07 (diff) |
-figured out way to deserialize using serde_erased
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)); + } } } } |