bspc_rust_lib 0.2.0

A library that allows bspc commands to be executed through rust programs
Documentation
use crate::bspc::{descriptor::Descriptor, modifier::Modifier, selector::{Assembleable, Selector}};

use super::{modifier::MonitorModifier, descriptor::MonitorDescriptor};

pub struct MonitorSelector {
    reference_selector: Option<Box<MonitorSelector>>,
    descriptor: Option<MonitorDescriptor>,
    modifiers: Vec<MonitorModifier>
}

impl Selector for MonitorSelector {
    type Descriptor = MonitorDescriptor;
    type Modifier = MonitorModifier;

    fn new() -> MonitorSelector {
        MonitorSelector {
            reference_selector: None,
            descriptor: None,
            modifiers: Vec::new()
        }
    }

    fn set_reference_selector(mut self, reference_selector: MonitorSelector) -> Self {
        self.reference_selector = Some(Box::new(reference_selector));
        self
    }
    fn set_descriptor(mut self, descriptor: MonitorDescriptor) -> Self {
        self.descriptor = Some(descriptor);
        self
    }
    fn add_modifier(mut self, modifier: MonitorModifier) -> Self {
        self.modifiers.push(modifier);
        self
    }

    fn get_query_prefix(&self) -> String {
        "--monitor".to_string()
    }
}

impl Assembleable for MonitorSelector {
    fn assemble(&self, default: Option<&MonitorDescriptor>) -> String {
        let mut result: String = match &self.reference_selector {
            Some(reference_selector) => format!("{}#", reference_selector.assemble(None)),
            None => String::new()
        };
        match &self.descriptor {
            Some(descriptor) => {
                result.push_str(&descriptor.get_string());
            },
            None => {
                match default {
                    Some(default_value) => {
                        result.push_str(&default_value.get_string());
                    }
                    None => {}
                }
            }
        }
        for modifier in &self.modifiers {
            result.push_str(&modifier.get_string());
        }
        result
    }
}