summaryrefslogtreecommitdiff
path: root/src/navigation.rs
diff options
context:
space:
mode:
authortom barrett <spalf0@gmail.com>2018-02-26 08:51:08 -0600
committertom barrett <spalf0@gmail.com>2018-02-26 08:51:08 -0600
commitc14dcf1998f5ba1ffea813da4f793fc3bde8c2b7 (patch)
treef650e9bdf008a785b4627db04446c717f530e7c5 /src/navigation.rs
parent6634f73a6768f61f928d51941be5e970e6011f07 (diff)
-figured out way to deserialize using serde_erased
Diffstat (limited to 'src/navigation.rs')
-rw-r--r--src/navigation.rs28
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));
+ }
}
}
}