Skip to main content

rl_lang/interpreter/stdlib/fs/
file_modified.rs

1use 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}