bitr 0.1.1

Minimal BitScript interpreter.
Documentation
use crate::parse_n;

pub fn get_range_mut<'a>(
    name: &str,
    begin: &str,
    end: &str,
    arr: &'a mut Vec<bool>,
) -> Result<Vec<&'a mut bool>, String> {
    let begin: usize = if begin.is_empty() { 0 } else { parse_n(begin)? };
    let end: usize = if end.is_empty() {
        arr.len()
    } else {
        parse_n(end)?
    };

    if begin > end {
        return Err(format!(
            "beginning index `{begin}` cannot be larger than ending index `{end}`"
        ));
    }

    if end > arr.len() {
        return Err(format!(
            "index out of bounds, `{}` is only `{}` long, but the ending index is {end}",
            name,
            arr.len()
        ));
    };

    Ok(arr
        .iter_mut()
        .skip(begin)
        .take(end - begin)
        .collect::<Vec<_>>())
}

pub fn get_range<'a>(
    name: &str,
    begin: &str,
    end: &str,
    arr: &'a Vec<bool>,
) -> Result<Vec<&'a bool>, String> {
    let begin: usize = if begin.is_empty() { 0 } else { parse_n(begin)? };
    let end: usize = if end.is_empty() {
        arr.len()
    } else {
        parse_n(end)?
    };

    if begin > end {
        return Err(format!(
            "beginning index `{begin}` cannot be larger than ending index `{end}`"
        ));
    }

    if end > arr.len() {
        return Err(format!(
            "index out of bounds, `{}` is only `{}` long, but the ending index is {end}",
            name,
            arr.len()
        ));
    };

    Ok(arr.iter().skip(begin).take(end - begin).collect::<Vec<_>>())
}