stream_deck_sdk 1.0.6

Rust unofficial SDK for the Elgato Stream Deck
Documentation
use std::env;

use serde::Deserialize;
use serde_repr::Deserialize_repr;

#[derive(Deserialize_repr, Clone)]
#[repr(u16)]
pub enum DeviceType {
    StreamDeck = 0,
    StreamDeckMini = 1,
    StreamDeckXL = 2,
    StreamDeckMobile = 3,
    StreamDeckPedal = 5,
    CorsairVoyager = 6,
    StreamDeckPlus = 7,
}

#[derive(Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct StreamDeckArgs {
    pub port: i32,
    pub plugin_uuid: String,
    pub register_event: String,
    pub info: Option<Info>,
}

#[derive(Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ApplicationInfo {
    pub font: Option<String>,
    pub language: Option<String>,
    pub platform: Option<String>,
    pub platform_version: Option<String>,
    pub version: Option<String>,
}

#[derive(Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ColorsInfo {
    pub button_mouse_over_background_color: Option<String>,
    pub button_pressed_background_color: Option<String>,
    pub button_pressed_border_color: Option<String>,
    pub button_pressed_text_color: Option<String>,
    pub highlight_color: Option<String>,
}

#[derive(Deserialize, Clone)]
pub struct PluginInfo {
    pub uuid: Option<String>,
    pub version: Option<String>,
}

#[derive(Deserialize, Clone)]
pub struct DeviceSize {
    pub columns: i32,
    pub rows: i32,
}

#[derive(Deserialize, Clone)]
pub struct DeviceInfo {
    pub id: Option<String>,
    pub name: Option<String>,
    pub size: Option<DeviceSize>,
    #[serde(rename = "type")]
    pub device_type: i32,
}

#[derive(Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Info {
    pub application: ApplicationInfo,
    pub device_pixel_ratio: Option<i32>,
    pub devices: Option<Vec<DeviceInfo>>,
    pub plugin: PluginInfo,
}

pub fn parse_args() -> StreamDeckArgs {
    let mut port: i32 = 0;
    let mut plugin_uuid: String = "".to_string();
    let mut register_event: String = "".to_string();
    let mut info: Option<Info> = None;
    let args: Vec<String> = env::args().collect();
    args.iter().enumerate().for_each(|(i, p)| match p.as_str() {
        "-port" => port = args[i + 1].parse().unwrap(),
        "-pluginUUID" => plugin_uuid = args[i + 1].to_string(),
        "-registerEvent" => register_event = args[i + 1].to_string(),
        "-info" => {
            let parsed = serde_json::from_str(&args[i + 1].to_string());
            if parsed.is_ok() {
                info = parsed.unwrap();
            }
        }
        &_ => {}
    });
    return StreamDeckArgs {
        port,
        plugin_uuid,
        register_event,
        info,
    };
}