Skip to main content

rl_lang/interpreter/stdlib/string/
slice.rs

1use crate::{
2    interpreter::evaluator::Evaluator,
3    utils::{errors::Error, span::Span},
4};
5
6pub fn std_slice(
7    eval: &mut Evaluator,
8    string: String,
9    start: i64,
10    end: i64,
11    span: Span,
12) -> Result<String, Error> {
13    let chars = string.chars();
14    let chars_count = chars.clone().count();
15    if start as usize >= chars_count || end as usize > chars_count {
16        return Err(eval.err(
17            format!(
18                "index out of bounds string legth: {}, found start: {} and end: {}",
19                chars_count, start, end
20            ),
21            span,
22        ));
23    }
24
25    Ok(chars
26        .skip(start as usize)
27        .take(end as usize - start as usize)
28        .collect::<String>())
29}