Skip to main content

rl_lang/interpreter/stdlib/io/
append_file.rs

1use crate::{
2    interpreter::{evaluator::Evaluator, values::Value},
3    utils::{errors::Error, span::Span},
4};
5use std::{fs::OpenOptions, io::Write};
6
7pub fn std_append_file(
8    eval: &mut Evaluator,
9    file: String,
10    content: String,
11    span: Span,
12) -> Result<Value, Error> {
13    let mut file_data = OpenOptions::new()
14        .append(true)
15        .create(true)
16        .open(&file)
17        .map_err(|e| {
18            eval.err(
19                format!("append_file(): failed to open \"{}\": {}", file, e),
20                span,
21            )
22        })?;
23
24    file_data.write_all(content.as_bytes()).map_err(|e| {
25        eval.err(
26            format!("append_file(): failed to append \"{}\": {}", file, e),
27            span,
28        )
29    })?;
30
31    Ok(Value::Null)
32}