use bonbon::prelude::*;
use chrono::{Duration, Utc};
use std::fs::File;
use std::io::BufWriter;
use std::time::Instant;
use image::codecs::png::{CompressionType, FilterType, PngEncoder};
use image::{ExtendedColorType, ImageEncoder};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let now = Utc::now();
let entries = vec![
GraphEntry {
sgv: 110.0,
date: now - Duration::minutes(30),
},
GraphEntry {
sgv: 185.0,
date: now,
},
];
let builder = GlucoseGraphBuilder::new()
.with_layout(LayoutConfig {
width: 1920,
height: 1080,
..Default::default()
})
.with_entries(entries)
.build()?;
let t_save_start = Instant::now();
let filename = "advanced_output.png";
let file = File::create(filename)?;
let mut writer = BufWriter::new(file);
let encoder =
PngEncoder::new_with_quality(&mut writer, CompressionType::Level(9), FilterType::NoFilter);
encoder.write_image(
builder.as_raw(),
builder.width(),
builder.height(),
ExtendedColorType::Rgba8,
)?;
println!(
"Encoded high-resolution chart in {:?}",
t_save_start.elapsed()
);
Ok(())
}