gauges 0.1.0

A tool to visualize real time gauges
Documentation
use std::collections::HashMap;
use std::time::Duration;

use tokio::time::sleep;

use gauges::core::{NamedRecord, Record, SignalId, Value};
use gauges::net::Publisher;

struct RecordsGenerator {
    x: f64,
    step: f64,
    min: f64,
    max: f64,
}

impl RecordsGenerator {
    fn next(&mut self) -> Record {
        if self.x > self.max || self.x < self.min {
            self.step = -self.step;
        }

        self.x += self.step;

        Record {
            value: Value::Float(self.x),
        }
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut generators: HashMap<u32, RecordsGenerator> = HashMap::new();
    generators.insert(
        0,
        RecordsGenerator {
            x: 0.0,
            step: 1.0,
            min: -20.0,
            max: 40.0,
        },
    );
    generators.insert(
        1,
        RecordsGenerator {
            x: 9.0,
            step: 5.0,
            min: 0.0,
            max: 100.0,
        },
    );
    generators.insert(
        2,
        RecordsGenerator {
            x: -90.0,
            step: 5.0,
            min: -90.0,
            max: 360.0,
        },
    );

    let mut err = false;

    let mut publisher = Publisher::new("127.0.0.1:9999").await?;

    while !err {
        for (&id, generator) in &mut generators {
            let record = generator.next();
            let record = NamedRecord {
                id: SignalId::Num(id),
                record,
            };

            if publisher.publish(record).await.is_err() {
                err = true;
                break;
            }
        }
        sleep(Duration::from_millis(100)).await;
    }

    Ok(())
}