feat(tvix/eval): Implement builtins.readFile

Change-Id: If3fd0b087009a2bfbad8bb7aca0aa20de906eb12
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6921
Tested-by: BuildkiteCI
Reviewed-by: Adam Joseph <adam@westernsemico.com>
Reviewed-by: kanepyork <rikingcoding@gmail.com>
Autosubmit: grfn <grfn@gws.fyi>
Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
Griffin Smith 2022-10-10 00:47:25 -04:00 committed by grfn
parent 1f84d90811
commit 9669fa8ff1
4 changed files with 16 additions and 1 deletions

View file

@ -1,7 +1,8 @@
use std::{
cell::RefCell,
collections::{BTreeMap, HashMap},
io,
fs::File,
io::{self, Read},
rc::Rc,
time::{SystemTime, UNIX_EPOCH},
};
@ -52,6 +53,11 @@ fn impure_builtins() -> Vec<Builtin> {
}
Ok(Value::attrs(NixAttrs::from_map(res)))
}),
Builtin::new("readFile", &[true], |args: Vec<Value>, vm: &mut VM| {
let mut buf = String::new();
File::open(&super::coerce_value_to_path(&args[0], vm)?)?.read_to_string(&mut buf)?;
Ok(buf.into())
}),
]
}

View file

@ -0,0 +1 @@
"builtins.readFile ./eval-okay-readfile.nix\n"

View file

@ -0,0 +1 @@
builtins.readFile ./eval-okay-readfile.nix

View file

@ -1,6 +1,7 @@
//! This module implements Nix language strings and their different
//! backing implementations.
use smol_str::SmolStr;
use std::ffi::OsStr;
use std::hash::Hash;
use std::ops::Deref;
use std::path::Path;
@ -186,6 +187,12 @@ impl AsRef<str> for NixString {
}
}
impl AsRef<OsStr> for NixString {
fn as_ref(&self) -> &OsStr {
self.as_str().as_ref()
}
}
impl AsRef<Path> for NixString {
fn as_ref(&self) -> &Path {
self.as_str().as_ref()