Skip to main content

rl_lang/interpreter/stdlib/fs/
rename_file.rs

1use crate::{
2    interpreter::{evaluator::Evaluator, values::Value},
3    utils::{errors::Error, span::Span},
4};
5
6pub fn std_rename_file(
7    eval: &mut Evaluator,
8    path: String,
9    new_name: String,
10    span: Span,
11) -> Result<Value, Error> {
12    let old_path = std::path::Path::new(&path);
13    let new_path = match old_path.parent() {
14        Some(parent) => parent.join(&new_name),
15        None => std::path::PathBuf::from(&new_name),
16    };
17
18    std::fs::rename(old_path, &new_path).map_err(|e| {
19        eval.err(
20            format!(
21                "rename_file(): failed to rename \"{}\" to \"{}\": {}",
22                path,
23                new_path.to_string_lossy(),
24                e
25            ),
26            span,
27        )
28    })?;
29
30    Ok(Value::String(new_path.to_string_lossy().to_string()))
31}