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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
//! Space API definitions and serialization. //! //! This crate contains all data-related definitions that are present in the Space API //! (http://spaceapi.net/). It also handles serializing that data to JSON by implementing the //! [`ToJson`](http://doc.rust-lang.org/rustc-serialize/rustc_serialize/json/trait.ToJson.html) //! trait for all structs. //! //! The currently supported Space API version is 0.13. It is not yet fully implemented. //! //! # Examples //! //! ## Serializing //! //! You can create a new `Status` instance by using the `new()` constructor method. //! //! To serialize the status to //! [`Json`](http://doc.rust-lang.org/rustc-serialize/rustc_serialize/json/enum.Json.html), use //! the [`ToJson`](http://doc.rust-lang.org/rustc-serialize/rustc_serialize/json/trait.ToJson.html) //! trait implementation. You can then create a string from the resulting object. //! //! extern crate rustc_serialize; //! extern crate spaceapi; //! //! use spaceapi::{Status, Location, Contact}; //! use spaceapi::optional::Optional; //! use rustc_serialize::json::ToJson; //! //! # fn main() { //! let status = Status::new( //! "coredump", //! "https://www.coredump.ch/logo.png", //! "https://www.coredump.ch/", //! Location { //! address: Optional::Value( //! "Spinnereistrasse 2, 8640 Rapperswil, Switzerland".into()), //! lat: 47.22936, //! lon: 8.82949, //! }, //! Contact { //! irc: Optional::Value("irc://freenode.net/#coredump".into()), //! twitter: Optional::Value("@coredump_ch".into()), //! foursquare: Optional::Value("525c20e5498e875d8231b1e5".into()), //! email: Optional::Value("danilo@coredump.ch".into()), //! }, //! vec![ //! "email".into(), //! "twitter".into(), //! ], //! ); //! //! let jsonstatus = status.to_json(); //! let stringstatus = jsonstatus.to_string(); //! //! # assert!(&stringstatus[0..1] == "{"); //! # } //! //! ## Deserializing //! //! You can deserialize any struct of the Space API through `rustc_serialize::json`: //! //! extern crate rustc_serialize; //! extern crate spaceapi; //! //! use rustc_serialize::json; //! use spaceapi::Location; //! //! # fn main() { //! let location = "{\"lat\": 47.22936, \"lon\": 8.82949}"; //! let decoded: Location = json::decode(location).unwrap(); //! println!("{:?}", decoded); //! //! // Output: //! // Location { address: Absent, lat: 47.22936000000001, lon: 8.829490000000002 } //! # } #[macro_use] extern crate log; extern crate rustc_serialize; pub mod optional; pub mod sensors; mod status; pub use status::*;