Skip to main content

rl_lang/interpreter/stdlib/fs/
list_dir.rs

1use crate::{
2    ast::statements::TypeAnnotation,
3    interpreter::{evaluator::Evaluator, values::Value},
4    utils::{errors::Error, span::Span},
5};
6
7pub fn std_list_dir(eval: &mut Evaluator, path: String, span: Span) -> Result<Value, Error> {
8    let data = std::fs::read_dir(&path)
9        .map_err(|e| {
10            eval.err(
11                format!("list_dir(): failed to read \"{}\": {}", path, e),
12                span,
13            )
14        })?
15        .filter_map(|i| i.ok())
16        .map(|i| i.path().to_string_lossy().to_string())
17        .map(Value::String)
18        .collect::<Vec<Value>>();
19
20    Ok(Value::Values {
21        items_type: TypeAnnotation::String,
22        items: data,
23    })
24}