aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/struct.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/examples/struct.rs b/examples/struct.rs
new file mode 100644
index 0000000..52b2eb7
--- /dev/null
+++ b/examples/struct.rs
@@ -0,0 +1,51 @@
+#![deny(warnings)]
+extern crate toml;
+extern crate rustc_serialize;
+
+use rustc_serialize::Decodable;
+
+#[derive(Debug,RustcDecodable)]
+struct Config {
+ global_string: Option<String>,
+ global_integer: Option<u64>,
+ server: Option<ServerConfig>,
+ peers: Option<Vec<PeerConfig>>,
+}
+
+#[derive(Debug,RustcDecodable)]
+struct ServerConfig {
+ ip: Option<String>,
+ port: Option<u64>,
+}
+
+#[derive(Debug,RustcDecodable)]
+struct PeerConfig {
+ ip: Option<String>,
+ port: Option<u64>,
+}
+
+fn main() {
+ let toml_str = r#"
+ global_string = "test"
+ global_integer = 5
+
+ [server]
+ ip = "127.0.0.1"
+ port = 80
+
+ [[peers]]
+ ip = "127.0.0.1"
+ port = 8080
+
+ [[peers]]
+ ip = "127.0.0.1"
+ port = 8081
+ "#;
+
+ let toml = toml::Parser::new(&toml_str).parse().unwrap();
+
+ let mut decoder = toml::Decoder::new(toml::Value::Table(toml));
+ let decoded = Config::decode(&mut decoder).unwrap();
+
+ println!("{:?}", decoded);
+}