sarek 0.1.0

A work-in-progress, experimental neural network library utilizing TensorFlow Keras
pub use {
    std::{
        ops::{
            Range,
            RangeFrom,
            RangeFull,
            RangeInclusive,
            RangeTo,
            RangeToInclusive
        },
        usize
    }
};

pub trait IntoRange {
    fn into_range( self, container_length: usize ) -> Range< usize >;
}

impl IntoRange for usize {
    #[allow(clippy::range_plus_one)]
    fn into_range( self, _: usize ) -> Range< usize > {
        assert_ne!( self, usize::MAX );
        self..self + 1
    }
}

impl IntoRange for Range< usize > {
    fn into_range( self, _: usize ) -> Range< usize > {
        self
    }
}

impl IntoRange for RangeFrom< usize > {
    fn into_range( self, container_length: usize ) -> Range< usize > {
        assert!( self.start <= container_length );
        self.start..container_length
    }
}

impl IntoRange for RangeFull {
    fn into_range( self, container_length: usize ) -> Range< usize > {
        0..container_length
    }
}

impl IntoRange for RangeInclusive< usize > {
    #[allow(clippy::range_plus_one)]
    fn into_range( self, _: usize ) -> Range< usize > {
        assert_ne!( *self.end(), usize::MAX );
        *self.start()..*self.end() + 1
    }
}

impl IntoRange for RangeTo< usize > {
    fn into_range( self, _: usize ) -> Range< usize > {
        0..self.end
    }
}

impl IntoRange for RangeToInclusive< usize > {
    #[allow(clippy::range_plus_one)]
    fn into_range( self, _: usize ) -> Range< usize > {
        assert_ne!( self.end, usize::MAX );
        0..self.end + 1
    }
}