rl_lang/interpreter/stdlib/fs/
rename_file.rs1use 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}