From 18a96163d730b7e44270603a4c6de071b725db5f Mon Sep 17 00:00:00 2001 From: Andreas Grois Date: Sat, 1 May 2021 22:16:54 +0200 Subject: First draft of pulse architecture. --- pulse/src/config.rs | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 pulse/src/config.rs (limited to 'pulse/src/config.rs') diff --git a/pulse/src/config.rs b/pulse/src/config.rs new file mode 100644 index 0000000..77b2a22 --- /dev/null +++ b/pulse/src/config.rs @@ -0,0 +1,66 @@ +use serde::{Serialize,Deserialize}; +use std::collections::BTreeMap; +use swaystatus_plugin::*; + + +#[derive(Serialize, Deserialize)] +#[serde(tag = "Sink")] +enum Sink { + Default, + Specific { + sink_name : String + } +} + +#[derive(Serialize, Deserialize)] +#[serde(tag = "Format")] +enum Volume { + Off, + Numeric { + label : String + }, + Binned { + label: String, + bin_symbol_map : BTreeMap + } +} + +#[derive(Serialize, Deserialize)] +#[serde(tag = "Format")] +enum Balance { + Off, + Numeric { + label : String + }, + Binned { + label :String, + bin_symbol_map : BTreeMap + } +} + + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "PascalCase", default)] +pub struct PulseVolumeConfig { + sink : Sink, + volume : Volume, + balance : Balance +} + +impl Default for PulseVolumeConfig { + fn default() -> Self { + PulseVolumeConfig { + sink : Sink::Default, + volume : Volume::Numeric { label : String::new()}, + balance : Balance::Off + } + } +} + +impl SwayStatusModuleInstance for PulseVolumeConfig { + fn make_runnable<'p>(&'p self,to_main : Box) -> (Box, Box) { + let (runnable, sender_for_main) = crate::runnable::PulseVolumeRunnable::new(&self, to_main); + (Box::new(runnable), Box::new(sender_for_main)) + } +} + -- cgit v1.2.3