use crate::At; use std::ops::Range; mod sealer { #[doc(hidden)] pub trait Sealed {} } use sealer::Sealed; /// Trait for that which can be used to index a image. pub trait Span: Sealed { #[doc(hidden)] fn range(self, i: (u32, u32)) -> Range; } impl Sealed for Range {} impl Span for Range { #[inline(always)] fn range(self, _: (u32, u32)) -> Range { self } } impl Sealed for Range<(u32, u32)> {} impl Span for Range<(u32, u32)> { #[inline(always)] fn range(self, i: (u32, u32)) -> Range { let Self { start: (sx, sy), end: (ex, ey), } = self; i.at::(sx, sy)..i.at::(ex, ey) } } impl Sealed for (u32, u32) {} impl Span for (u32, u32) { #[inline(always)] fn range(self, i: (u32, u32)) -> Range { i.at::(self.0, self.1)..i.at::(self.0, self.1) + C } }