csv_sanity/transformers/
choice.rs

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
use Transformer;
use transformer::{
    TransformResultHelper,
    TransformResult
};

#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Clone, Debug)]
pub struct ChoiceTransformer {
    choices: Vec<String>,
}

impl ChoiceTransformer
{
    pub fn new(choices: Vec<String>) -> ChoiceTransformer
    {
        ChoiceTransformer {
            choices: choices,
        }
    }
}

impl Transformer for ChoiceTransformer
{
    fn transform(&self, field_value: &str, field_name: &str, record_n: usize) -> TransformResult
    {
        if self.choices.contains(&field_value.to_string()) {
            TransformResult::present(&field_value)
        } else {
            TransformResult::error(
                field_value,
                field_name,
                record_n,
                &format!("not in valid choices {:?}", self.choices)
            )
        }
    }
}