rl_lang/interpreter/stdlib/io/
read_lines.rs1use crate::{
2 ast::statements::TypeAnnotation,
3 interpreter::{evaluator::Evaluator, values::Value},
4 utils::{errors::Error, span::Span},
5};
6
7pub fn std_read_lines(eval: &mut Evaluator, file: String, span: Span) -> Result<Value, Error> {
8 let data = std::fs::read_to_string(&file)
9 .map_err(|e| {
10 eval.err(
11 format!("read_lines(): failed to read \"{}\": {}", file, e),
12 span,
13 )
14 })?
15 .lines()
16 .map(String::from)
17 .map(Value::String)
18 .collect::<Vec<Value>>();
19
20 Ok(Value::Values {
21 items_type: TypeAnnotation::String,
22 items: data,
23 })
24}