use eyros::{DB,Row};
use rand::random;
use failure::Error;
use random_access_disk::RandomAccessDisk;
use std::path::PathBuf;
type P = ((f32,f32),(f32,f32),f32);
type V = u32;
fn main() -> Result<(),Error> {
let mut db: DB<_,_,((f32,f32),(f32,f32),f32),u32> = DB::open(storage)?;
let polygons: Vec<Row<P,V>> = (0..800).map(|_| {
let xmin: f32 = random::<f32>()*2.0-1.0;
let xmax: f32 = xmin + random::<f32>().powf(64.0)*(1.0-xmin);
let ymin: f32 = random::<f32>()*2.0-1.0;
let ymax: f32 = ymin + random::<f32>().powf(64.0)*(1.0-ymin);
let time: f32 = random::<f32>()*1000.0;
let value: u32 = random();
let point = ((xmin,xmax),(ymin,ymax),time);
Row::Insert(point, value)
}).collect();
db.batch(&polygons)?;
let bbox = ((-0.5,-0.8,0.0),(0.3,-0.5,100.0));
for result in db.query(&bbox)? {
println!("{:?}", result?);
}
Ok(())
}
fn storage(name:&str) -> Result<RandomAccessDisk,Error> {
let mut p = PathBuf::from("/tmp/eyros-polygons-db/");
p.push(name);
Ok(RandomAccessDisk::builder(p)
.auto_sync(false)
.build()?)
}