ftswarm_proto 0.2.1

Protocol definitions for the ftswarm serial communication protocol
Documentation
use crate::{Deserialized, NameOf, Serialized};

#[derive(Debug)]
pub enum FtSwarmDirectCommand {
    Help,
    Setup,
    Halt,
    Whoami,
    Uptime,
    StartCli
}

impl NameOf for FtSwarmDirectCommand {
    fn name(&self) -> String {
        match self {
            FtSwarmDirectCommand::Help => "help".to_string(),
            FtSwarmDirectCommand::Setup => "setup".to_string(),
            FtSwarmDirectCommand::Halt => "halt".to_string(),
            FtSwarmDirectCommand::Whoami => "whoami".to_string(),
            FtSwarmDirectCommand::Uptime => "uptime".to_string(),
            FtSwarmDirectCommand::StartCli => "startCLI".to_string(),
        }
    }
}

impl Serialized for FtSwarmDirectCommand {
    fn serialize(&self) -> String {
        self.name()
    }
}

impl Deserialized for FtSwarmDirectCommand {
    fn deserialize(value: &String) -> Result<Self, String> where Self: Sized {
        match value.as_str() {
            "help" => Ok(FtSwarmDirectCommand::Help),
            "setup" => Ok(FtSwarmDirectCommand::Setup),
            "halt" => Ok(FtSwarmDirectCommand::Halt),
            "whoami" => Ok(FtSwarmDirectCommand::Whoami),
            "uptime" => Ok(FtSwarmDirectCommand::Uptime),
            "startCLI" => Ok(FtSwarmDirectCommand::StartCli),
            _ => Err(format!("Unknown command: {}", value))
        }
    }
}