diff options
author | Griffin Smith <root@gws.fyi> | 2022-10-10T04·47-0400 |
---|---|---|
committer | grfn <grfn@gws.fyi> | 2022-10-10T23·38+0000 |
commit | 9669fa8ff1abd64bdc4fc481e0dc976919c1dc56 (patch) | |
tree | 20bc26bc00226cc9316cce6c93a866a4c910b388 /tvix/eval/src | |
parent | 1f84d9081130eb55b911a2542ac4781ee1438fc4 (diff) |
feat(tvix/eval): Implement builtins.readFile r/5095
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>
Diffstat (limited to 'tvix/eval/src')
-rw-r--r-- | tvix/eval/src/builtins/impure.rs | 8 | ||||
-rw-r--r-- | tvix/eval/src/tests/tvix_tests/eval-okay-readfile.exp | 1 | ||||
-rw-r--r-- | tvix/eval/src/tests/tvix_tests/eval-okay-readfile.nix | 1 | ||||
-rw-r--r-- | tvix/eval/src/value/string.rs | 7 |
4 files changed, 16 insertions, 1 deletions
diff --git a/tvix/eval/src/builtins/impure.rs b/tvix/eval/src/builtins/impure.rs index 5cf3ca4287d8..c8423b6ac316 100644 --- a/tvix/eval/src/builtins/impure.rs +++ b/tvix/eval/src/builtins/impure.rs @@ -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()) + }), ] } diff --git a/tvix/eval/src/tests/tvix_tests/eval-okay-readfile.exp b/tvix/eval/src/tests/tvix_tests/eval-okay-readfile.exp new file mode 100644 index 000000000000..a2c87d0c439f --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/eval-okay-readfile.exp @@ -0,0 +1 @@ +"builtins.readFile ./eval-okay-readfile.nix\n" diff --git a/tvix/eval/src/tests/tvix_tests/eval-okay-readfile.nix b/tvix/eval/src/tests/tvix_tests/eval-okay-readfile.nix new file mode 100644 index 000000000000..82f7cb17435a --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/eval-okay-readfile.nix @@ -0,0 +1 @@ +builtins.readFile ./eval-okay-readfile.nix diff --git a/tvix/eval/src/value/string.rs b/tvix/eval/src/value/string.rs index 876b1abe6b40..d146ee4cec95 100644 --- a/tvix/eval/src/value/string.rs +++ b/tvix/eval/src/value/string.rs @@ -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() |