rrd 0.3.0

Bindings to librrd to create and interact with round robin databases created with Tobias Oetiker's rrdtool (https://www.rrdtool.org/).
Documentation
use rrd::{
    ops::{create, update},
    ConsolidationFn,
};
use std::{
    path::Path,
    time::{Duration, SystemTime},
};

fn main() {
    let filename = Path::new("db.rrd");

    create::create(
        filename,
        SystemTime::now(),
        Duration::from_secs(1),
        false,
        None,
        &[],
        &[
            create::DataSource::gauge(
                &create::DataSourceName::new("volt").unwrap(),
                300,
                Some(0.0),
                Some(24000.0),
            ),
            create::DataSource::gauge(
                &create::DataSourceName::new("amps").unwrap(),
                300,
                Some(0.0),
                Some(24000.0),
            ),
            create::DataSource::compute(
                &create::DataSourceName::new("watts").unwrap(),
                "volt,amps,*",
            ),
        ],
        &[create::Archive::new(ConsolidationFn::Avg, 0.5, 1, 86400).unwrap()],
    )
    .expect("Failed to create db");

    let rc = update::update_all(
        filename,
        update::Options::default(),
        &[(update::BatchTime::Now, &[235.into(), 12.3.into()])],
    );
    match rc {
        Ok(_) => println!("Ok"),
        Err(err) => println!("Not ok: {err}"),
    }
}