ftswarm_proto 0.2.5

Protocol definitions for the ftswarm serial communication protocol
Documentation
pub mod rpc;
pub mod subscription;

#[derive(Debug, Clone)]
pub enum S2RMessage {
    Log(String),
    RPCResponse(String),
    Subscription(String),
    Error(String),
    StartCLI
}

fn is_log_message(message: &str) -> bool {
    message.starts_with("[")
}

fn is_rpc_response(message: &str) -> bool {
    message.starts_with("R: ")
}

fn is_subscription_response(message: &str) -> bool {
    message.starts_with("S: ")
}

fn is_error_message(message: &str) -> bool {
    message.trim().starts_with("^")
}

impl From<String> for S2RMessage {
    fn from(value: String) -> Self {
        if value.contains("@@@ ftSwarmOS CLI started") {
            return S2RMessage::StartCLI;
        }

        return if is_log_message(&value) {
            S2RMessage::Log(value)
        } else if is_rpc_response(&value) {
            S2RMessage::RPCResponse(value.replacen("R: ", "", 1))
        } else if is_subscription_response(&value) {
            S2RMessage::Subscription(value.replacen("S: ", "", 1))
        } else if is_error_message(&value) {
            S2RMessage::Error(value.replacen("^ Error:", "", 1).trim().to_string())
        } else {
            S2RMessage::RPCResponse(value)
        }
    }
}