uiautomation 0.0.2

UI Automation Framework for Windows
use std::fmt::Display;

#[derive(Debug)]
pub enum Value {
    INT(i32),
    LONG(i64),
    STR(String)
}

impl Value {
    pub fn as_int(&self) -> i32 {
        match self {
            Value::INT(value) => *value,
            Value::LONG(value) => *value as i32,
            Value::STR(value) => value.parse::<i32>().unwrap_or(0),
        }
    }

    pub fn as_long(&self) -> i64 {
        match self {
            Value::INT(value) => *value as i64,
            Value::LONG(value) => *value,
            Value::STR(value) => value.parse::<i64>().unwrap_or(0),
        }
    }

    pub fn as_string(&self) -> String{
        match self {
            Value::INT(value) => format!("{}", value),
            Value::LONG(value) => format!("{}", value),
            Value::STR(value) => value.clone(),
        }
    }
}

impl From<i16> for Value {
    fn from(value: i16) -> Self {
        Value::INT(value as i32)
    }
}
impl From<i32> for Value {
    fn from(value: i32) -> Self {
        Value::INT(value)
    }
}

impl From<i64> for Value {
    fn from(value: i64) -> Self {
        Value::LONG(value)
    }
}

impl From<&str> for Value {
    fn from(value: &str) -> Self {
        Value::STR(String::from(value))
    }
}

impl Display for Value {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Value::INT(value) => write!(f, "{}", value),
            Value::LONG(value) => write!(f, "{}", value),
            Value::STR(value) => write!(f, "{}", value),
        }
    }
}