framesmith 0.1.0

A Rust library for controlling Samsung Frame TVs over the local network
Documentation
use serde::Deserialize;

use crate::types::PowerState;

#[derive(Debug, Clone, Deserialize)]
pub struct DeviceInfo {
    #[serde(default)]
    pub(crate) device: DeviceInfoInner,
}

#[derive(Debug, Clone, Default, Deserialize)]
pub(crate) struct DeviceInfoInner {
    #[serde(default, rename = "name")]
    pub(crate) name: String,
    #[serde(default, rename = "modelName")]
    pub(crate) model_name: String,
    #[serde(default, rename = "model")]
    pub(crate) model_id: String,
    #[serde(default, rename = "FrameTVSupport")]
    pub(crate) frame_tv_support: String,
    #[serde(default, rename = "PowerState")]
    pub(crate) power_state: String,
    #[serde(default, rename = "OS")]
    pub(crate) os: String,
    #[serde(default, rename = "resolution")]
    pub(crate) resolution: String,
    #[serde(default, rename = "networkType")]
    pub(crate) network_type: String,
    #[serde(default, rename = "wifiMac")]
    pub(crate) wifi_mac: String,
    #[serde(default, rename = "ip")]
    pub(crate) ip: String,
}

impl DeviceInfo {
    pub fn name(&self) -> &str {
        &self.device.name
    }

    pub fn model(&self) -> &str {
        &self.device.model_name
    }

    pub fn model_id(&self) -> &str {
        &self.device.model_id
    }

    pub fn frame_tv_support(&self) -> bool {
        self.device.frame_tv_support == "true"
    }

    pub fn power_state(&self) -> PowerState {
        match self.device.power_state.as_str() {
            "on" => PowerState::On,
            "off" => PowerState::Off,
            _ => PowerState::Unknown,
        }
    }

    pub fn os(&self) -> &str {
        &self.device.os
    }

    pub fn resolution(&self) -> &str {
        &self.device.resolution
    }

    pub fn network_type(&self) -> &str {
        &self.device.network_type
    }

    pub fn wifi_mac(&self) -> &str {
        &self.device.wifi_mac
    }

    pub fn ip(&self) -> &str {
        &self.device.ip
    }
}