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
use crate::values::device_type::DeviceType;
use crate::common::PropertyName;
use crate::values::platform_name::PlatformName;
use crate::values::browser_name::BrowserName;

pub mod property_value;
pub mod device_type;
pub mod platform_name;
pub mod browser_name;

#[derive(PartialEq, Debug)]
pub enum PropertyValue<'detector> {
    DeviceType(DeviceType),
    IsSmartPhone(bool),
    IsTablet(bool),
    HardwareName(&'detector str),
    HardwareModel(&'detector str),
    HardwareVendor(&'detector str),
    PlatformName(PlatformName<'detector>),
    PlatformVersion(&'detector str),
    BrowserName(BrowserName<'detector>),
    BrowserVersion(&'detector str)
}

fn value_to_bool(value:&str) -> Option<bool>{
    match value{
        "True" => Some(true),
        "False" => Some(false),
        _ => None
    }
}

impl<'detector> PropertyValue<'detector> {
    pub fn new(property_name: &PropertyName, value: &'detector str) -> Option<PropertyValue<'detector>> {
        match property_name {
            PropertyName::HardwareName => Some(PropertyValue::HardwareName(value)),
            PropertyName::HardwareVendor => Some(PropertyValue::HardwareVendor(value)),
            PropertyName::HardwareModel => Some(PropertyValue::HardwareModel(value)),
            PropertyName::IsSmartPhone => match value_to_bool(value) {
                Some(converted) => Some(PropertyValue::IsSmartPhone(converted)),
                _ => None
            },
            PropertyName::IsTablet => match value_to_bool(value) {
                Some(converted) => Some(PropertyValue::IsTablet(converted)),
                _ => None
            },
            PropertyName::DeviceType => match DeviceType::from_str(value) {
                Some(converted) => Some(PropertyValue::DeviceType(converted)),
                _ => None
            },
            PropertyName::PlatformName => Some(PropertyValue::PlatformName(PlatformName::from(value))),
            PropertyName::BrowserName => Some(PropertyValue::BrowserName(BrowserName::from(value))),
            PropertyName::PlatformVersion => Some(PropertyValue::PlatformVersion(value)),
            PropertyName::BrowserVersion =>  Some(PropertyValue::BrowserVersion(value))
        }
    }
}