rl_lang/interpreter/stdlib/fs/
file_modified.rs1use crate::{
2 interpreter::{evaluator::Evaluator, values::Value},
3 utils::{errors::Error, span::Span},
4};
5
6pub fn std_file_modified(eval: &mut Evaluator, path: String, span: Span) -> Result<Value, Error> {
7 let metadata = std::fs::metadata(&path).map_err(|e| {
8 eval.err(
9 format!("file_modified(): failed to read \"{}\": {}", path, e),
10 span,
11 )
12 })?;
13
14 let modified = metadata.modified().map_err(|e| {
15 eval.err(
16 format!(
17 "file_modified(): could not get modification time for \"{}\": {}",
18 path, e
19 ),
20 span,
21 )
22 })?;
23
24 let secs = modified
25 .duration_since(std::time::UNIX_EPOCH)
26 .map_err(|e| {
27 eval.err(
28 format!(
29 "file_modified(): modification time before epoch for \"{}\": {}",
30 path, e
31 ),
32 span,
33 )
34 })?
35 .as_secs();
36
37 Ok(Value::Integer(secs as i64))
38}