Skip to content

Commit

Permalink
feat: add Statelist struct
Browse files Browse the repository at this point in the history
Add `Statelist` struct, and deserialize it properly within the `States` struct.
  • Loading branch information
indiv0 committed Dec 14, 2016
1 parent 463f9e1 commit abfdcb8
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 1 deletion.
11 changes: 11 additions & 0 deletions src/model.in.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,17 @@ pub struct States {
// Attributes
pub count: u32,

pub state: Vec<State>,
pub statelist: Option<Vec<Statelist>>,
}

/// A series of `State` attributes, combined into a list.
#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct Statelist {
// Attributes
pub count: u32,
pub value: String,

pub state: Vec<State>,
}

Expand Down
61 changes: 60 additions & 1 deletion src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,17 @@ include!(concat!(env!("OUT_DIR"), "/model.rs"));
mod tests {
use serde_xml::from_str;

use super::{Img, Infos, Plaintext, Pod, QueryResult, Subpod};
use super::{
Img,
Infos,
Plaintext,
Pod,
QueryResult,
State,
Statelist,
States,
Subpod,
};

#[test]
fn test_query_result_deserializer() {
Expand Down Expand Up @@ -73,6 +83,55 @@ mod tests {
*/
}

#[test]
fn test_state_deserializer() {
let s = r#"
<state name='More digits' input='Decimal Approximation__More digits'/>
"#.to_owned();
from_str::<State>(&s).unwrap();

let s = r#"
<states count='1'>
<state name='More digits' input='Decimal Approximation__More digits'/>
</states>
"#.to_owned();
from_str::<States>(&s).unwrap();

let s = r#"
<statelist count='9' value='Current week'>
<state name='Current week' input='WeatherCharts:WeatherData__Current week' />
<state name='Current day' input='WeatherCharts:WeatherData__Current day' />
<state name='Next week' input='WeatherCharts:WeatherData__Next week' />
<state name='Past week' input='WeatherCharts:WeatherData__Past week' />
<state name='Past month' input='WeatherCharts:WeatherData__Past month' />
<state name='Past year' input='WeatherCharts:WeatherData__Past year' />
<state name='Past 5 years' input='WeatherCharts:WeatherData__Past 5 years' />
<state name='Past 10 years' input='WeatherCharts:WeatherData__Past 10 years' />
<state name='All' input='WeatherCharts:WeatherData__All' />
</statelist>
"#.to_owned();
from_str::<Statelist>(&s).unwrap();

let s = r#"
<states count='3'>
<state name='Show metric' input='WeatherCharts:WeatherData__Show metric' />
<state name='More' input='WeatherCharts:WeatherData__More' />
<statelist count='9' value='Current week'>
<state name='Current week' input='WeatherCharts:WeatherData__Current week' />
<state name='Current day' input='WeatherCharts:WeatherData__Current day' />
<state name='Next week' input='WeatherCharts:WeatherData__Next week' />
<state name='Past week' input='WeatherCharts:WeatherData__Past week' />
<state name='Past month' input='WeatherCharts:WeatherData__Past month' />
<state name='Past year' input='WeatherCharts:WeatherData__Past year' />
<state name='Past 5 years' input='WeatherCharts:WeatherData__Past 5 years' />
<state name='Past 10 years' input='WeatherCharts:WeatherData__Past 10 years' />
<state name='All' input='WeatherCharts:WeatherData__All' />
</statelist>
</states>
"#.to_owned();
from_str::<States>(&s).unwrap();
}

#[test]
fn test_pod_deserializer() {
let s = POD_STR.to_owned();
Expand Down

0 comments on commit abfdcb8

Please sign in to comment.