diff options
author | Lyle Mantooth <lyle@menteeth.us> | 2022-12-03T05·18-0500 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2022-12-03T13·26+0000 |
commit | f4e17caae88a1180444d8120ba35565e9853199d (patch) | |
tree | d16b895a642f35bb4544541eceb71cfe9a1d9014 /tvix/eval/src/builtins/impure.rs | |
parent | 9fed61297a9766be4e5bd4c0a4461cfb176115c9 (diff) |
feat(tvix/eval): Continue removing leakage of BTreeMap. r/5379
Fixes b/212. Based on feedback in https://cl.tvl.fyi/c/depot/+/7492, all uses of `NixAttrs::from_map` have been removed. Only `from_iter` and `from_kv` remain. Change-Id: I52e25f73018c2aa1843197427516b7a852503e2c Reviewed-on: https://cl.tvl.fyi/c/depot/+/7500 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Autosubmit: IslandUsurper <lyle@menteeth.us>
Diffstat (limited to 'tvix/eval/src/builtins/impure.rs')
-rw-r--r-- | tvix/eval/src/builtins/impure.rs | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/tvix/eval/src/builtins/impure.rs b/tvix/eval/src/builtins/impure.rs index dc62e93ada40..ee6cb2afdee4 100644 --- a/tvix/eval/src/builtins/impure.rs +++ b/tvix/eval/src/builtins/impure.rs @@ -40,31 +40,29 @@ mod impure_builtins { error: Rc::new(err), }; - let mut res = BTreeMap::new(); - for entry in path.read_dir().map_err(mk_err)? { - let entry = entry.map_err(mk_err)?; - let file_type = entry - .metadata() - .map_err(|err| ErrorKind::IO { - path: Some(entry.path()), - error: Rc::new(err), - })? - .file_type(); - let val = if file_type.is_dir() { - "directory" - } else if file_type.is_file() { - "regular" - } else if file_type.is_symlink() { - "symlink" - } else { - "unknown" - }; - res.insert( - entry.file_name().to_string_lossy().as_ref().into(), - val.into(), - ); - } - Ok(Value::attrs(NixAttrs::from_map(res))) + let res = path.read_dir().map_err(mk_err)?.into_iter().flat_map( + |entry| -> Result<(String, &str), ErrorKind> { + let entry = entry.map_err(mk_err)?; + let file_type = entry + .metadata() + .map_err(|err| ErrorKind::IO { + path: Some(entry.path()), + error: Rc::new(err), + })? + .file_type(); + let val = if file_type.is_dir() { + "directory" + } else if file_type.is_file() { + "regular" + } else if file_type.is_symlink() { + "symlink" + } else { + "unknown" + }; + Ok((entry.file_name().to_string_lossy().to_string(), val)) + }, + ); + Ok(Value::attrs(NixAttrs::from_iter(res))) } #[builtin("readFile")] |