scanny 0.1.0

A advanced text scanning library for Rust.
Documentation
use std::ops::{Range, RangeInclusive};

#[derive(Debug, PartialEq)]
pub struct WithPos<T> {
    pub value: T,
    byte_pos: Range<usize>,
    line_pos: RangeInclusive<usize>,
}

impl<T> From<(T, Range<usize>, RangeInclusive<usize>)> for WithPos<T> {
    fn from(value: (T, Range<usize>, RangeInclusive<usize>)) -> Self {
        Self {
            value: value.0,
            byte_pos: value.1,
            line_pos: value.2,
        }
    }
}

impl<T> From<(T, RangeInclusive<usize>, Range<usize>)> for WithPos<T> {
    fn from(value: (T, RangeInclusive<usize>, Range<usize>)) -> Self {
        Self {
            value: value.0,
            byte_pos: value.2,
            line_pos: value.1,
        }
    }
}

impl<T> WithPos<T> {
    pub fn new(value: T) -> Self {
        Self {
            value,
            byte_pos: 0..0,
            line_pos: 0..=0,
        }
    }
    pub fn set_byte_pos(mut self, pos: Range<usize>) -> Self {
        self.byte_pos = pos;
        self
    }
    pub fn get_byte_pos(&self) -> Range<usize> {
        self.byte_pos.clone()
    }
    pub fn set_line_pos(mut self, pos: RangeInclusive<usize>) -> Self {
        self.line_pos = pos;
        self
    }
    pub fn get_line_pos(&self) -> RangeInclusive<usize> {
        self.line_pos.clone()
    }
}