A Rust crate for creating plugins for the OpenAction API (backwards-compatible with the Stream Deck SDK)
use openaction::*;use serde::{Deserialize,Serialize};#[derive(Serialize,Deserialize,Default,Clone)]#[serde(default)]structCounterSettings{value:u32,}structCounterAction;#[async_trait]implActionforCounterAction{constUUID:ActionUuid = "com.example.counter.counter";typeSettings = CounterSettings;asyncfnkey_up(&self,instance:&Instance,settings:&Self::Settings,) -> OpenActionResult<()>{letmut clone = settings.clone();
clone.value = settings.value + 1;
instance.set_settings(&clone).await?;
instance.set_title(Some(clone.value.to_string()),None).await}}#[tokio::main]asyncfnmain() -> OpenActionResult<()>{{use simplelog::*;ifletErr(error) = TermLogger::init(LevelFilter::Debug,Config::default(),TerminalMode::Stdout,ColorChoice::Never,){eprintln!("Logger initialization failed: {}", error);}}register_action(CounterAction).await;run(std::env::args().collect()).await}