]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/issue-2804.rs
auto merge of #13600 : brandonw/rust/master, r=brson
[rust.git] / src / test / run-pass / issue-2804.rs
1
2 // Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
3 // file at the top-level directory of this distribution and at
4 // http://rust-lang.org/COPYRIGHT.
5 //
6 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
9 // option. This file may not be copied, modified, or distributed
10 // except according to those terms.
11
12 extern crate collections;
13 extern crate serialize;
14
15 use collections::HashMap;
16 use serialize::json;
17 use std::option;
18
19 enum object {
20     bool_value(bool),
21     int_value(i64),
22 }
23
24 fn lookup(table: ~json::Object, key: ~str, default: ~str) -> ~str
25 {
26     match table.find(&key) {
27         option::Some(&json::String(ref s)) => {
28             (*s).clone()
29         }
30         option::Some(value) => {
31             println!("{} was expected to be a string but is a {:?}", key, value);
32             default
33         }
34         option::None => {
35             default
36         }
37     }
38 }
39
40 fn add_interface(_store: int, managed_ip: ~str, data: json::Json) -> (~str, object)
41 {
42     match &data {
43         &json::Object(ref interface) => {
44             let name = lookup((*interface).clone(), ~"ifDescr", ~"");
45             let label = format!("{}-{}", managed_ip, name);
46
47             (label, bool_value(false))
48         }
49         _ => {
50             println!("Expected dict for {} interfaces but found {:?}", managed_ip, data);
51             (~"gnos:missing-interface", bool_value(true))
52         }
53     }
54 }
55
56 fn add_interfaces(store: int, managed_ip: ~str, device: HashMap<~str, json::Json>)
57 -> Vec<(~str, object)> {
58     match device.get(&~"interfaces")
59     {
60         &json::List(ref interfaces) =>
61         {
62           interfaces.iter().map(|interface| {
63                 add_interface(store, managed_ip.clone(), (*interface).clone())
64           }).collect()
65         }
66         _ =>
67         {
68             println!("Expected list for {} interfaces but found {:?}", managed_ip,
69                    device.get(&~"interfaces"));
70             Vec::new()
71         }
72     }
73 }
74
75 pub fn main() {}