rusty-tracks 0.0.8

Rust client to connect to DataTracks.
Documentation
use flatbuffers::{FlatBufferBuilder, WIPOffset};
use track_rails::message_generated::protocol;
use track_rails::message_generated::protocol::{Bool, BoolArgs, Float, FloatArgs, Integer, IntegerArgs, Null, NullArgs, Text, TextArgs, ValueWrapper, ValueWrapperArgs};

pub enum Value {
    Text(String),
    Number(i64),
    Float(f64),
    Bool(bool),
    Null,
}

impl Value{
    pub fn flatternize<'b>(&self, builder: & mut FlatBufferBuilder<'b>) -> WIPOffset<ValueWrapper<'b>> {
        match self {
            Value::Text(t) => {
                let text = builder.create_string(t.as_str());
                let text = Text::create(builder, &TextArgs{data: Some(text)}).as_union_value();
                ValueWrapper::create(builder, &ValueWrapperArgs{ data_type: protocol::Value::Text, data: Some(text) })
            }
            Value::Number(n) => {
                let number = Integer::create(builder, &IntegerArgs{data: *n }).as_union_value();
                ValueWrapper::create(builder, &ValueWrapperArgs{ data_type: protocol::Value::Integer, data: Some(number) })
            }
            Value::Float(f) => {
                let float = Float::create(builder, &FloatArgs{data: *f as f32 }).as_union_value();
                ValueWrapper::create(builder, &ValueWrapperArgs{ data_type: protocol::Value::Float, data: Some(float) })
            }
            Value::Bool(b) => {
                let bool = Bool::create(builder, &BoolArgs{data: *b}).as_union_value();
                ValueWrapper::create(builder, &ValueWrapperArgs{ data_type: protocol::Value::Bool, data: Some(bool) })
            }
            Value::Null => {
                let null = Null::create(builder, &NullArgs{}).as_union_value();
                ValueWrapper::create(builder, &ValueWrapperArgs{ data_type: protocol::Value::Null, data: Some(null) })
            }
        }
        
    }
}

impl From<i64> for Value {
    fn from(value: i64) -> Self {
        Value::Number(value)
    }
}

impl From<f64> for Value {  
    fn from(value: f64) -> Self {
        Value::Float(value)
    }
}

impl From<bool> for Value {
    fn from(value: bool) -> Self {
        Value::Bool(value)
    }
}

impl From<String> for Value {
    fn from(value: String) -> Self {
        Value::Text(value)
    }
}

impl From<&str> for Value {
    fn from(value: &str) -> Self {
        Value::Text(value.to_string())
    }
}