prism 0.1.0

An experimental chart library for iced.
Documentation
mod line;
pub mod point;

pub use line::LineSeries;
pub use point::PointSeries;

use super::{cartesian::Plane, items};

use iced::widget::canvas::{self};

use std::ops::RangeInclusive;

pub trait Series<SeriesId, ItemId = usize> {
    fn draw(&self, frame: &mut canvas::Frame, plane: &Plane);
    fn id(&self) -> Option<SeriesId> {
        None
    }
    fn collision_box(&self) -> Option<iced::Rectangle> {
        None
    }
    fn items(&self) -> Option<(SeriesId, Vec<items::Entry<ItemId>>)> {
        None
    }
    fn x_range(&self) -> RangeInclusive<f32>;
    fn y_range(&self) -> RangeInclusive<f32>;
}

pub fn line_series<Data>(data: Data) -> LineSeries<Data> {
    LineSeries::new(data)
}

pub fn point_series<'a, Id, Item, Data>(data: Data) -> PointSeries<'a, Id, Item, Data>
where
    Id: Clone,
    Data: IntoIterator<Item = Item>,
{
    PointSeries::new(data)
}