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::{descriptor::DesktopDescriptor, modifier::DesktopModifier};

pub struct DesktopSelector {
    reference_selector: Option<Box<DesktopSelector>>,
    descriptor: Option<DesktopDescriptor>,
    modifiers: Vec<DesktopModifier>
}

impl Selector for DesktopSelector {
    type Descriptor = DesktopDescriptor;
    type Modifier = DesktopModifier;

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

    fn set_reference_selector(mut self, reference_selector: DesktopSelector) -> Self {
        self.reference_selector = Some(Box::new(reference_selector));
        return self;
    }
    fn set_descriptor(mut self, descriptor: DesktopDescriptor) -> Self {
        self.descriptor = Some(descriptor);
        return self;
    }
    fn add_modifier(mut self, modifier: DesktopModifier) -> Self {
        self.modifiers.push(modifier);
        return self;
    }

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

impl Assembleable for DesktopSelector {
    fn assemble(&self, default: Option<&DesktopDescriptor>) -> 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());
        }
        return result;
    }
}