rl_lang/interpreter/stdlib/string/
slice.rs1use 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}