fix(tvix/eval): fix last uses of Vec<Value> -> NixList in builtins

Change-Id: I0d71b82eb7ddc1e457b0996b0668006f55f56751
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7790
Autosubmit: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
Vincent Ambo 2023-01-07 14:37:50 +03:00 committed by tazjin
parent e3c1981619
commit 1d59d3ba8f
2 changed files with 21 additions and 22 deletions

View file

@ -577,12 +577,13 @@ mod pure_builtins {
let re = regex.to_str()?;
let re: Regex = Regex::new(&format!("^{}$", re.as_str())).unwrap();
match re.captures(&s) {
Some(caps) => Ok(caps
.iter()
.skip(1)
.map(|grp| grp.map(|g| Value::from(g.as_str())).unwrap_or(Value::Null))
.collect::<Vec<Value>>()
.into()),
Some(caps) => Ok(Value::List(
caps.iter()
.skip(1)
.map(|grp| grp.map(|g| Value::from(g.as_str())).unwrap_or(Value::Null))
.collect::<imbl::Vector<Value>>()
.into(),
)),
None => Ok(Value::Null),
}
}
@ -618,21 +619,24 @@ mod pure_builtins {
}
#[builtin("partition")]
fn builtin_partition(vm: &mut VM, pred: Value, list: Value) -> Result<Value, ErrorKind> {
let mut right: Vec<Value> = vec![];
let mut wrong: Vec<Value> = vec![];
let mut right: imbl::Vector<Value> = Default::default();
let mut wrong: imbl::Vector<Value> = Default::default();
let list: NixList = list.to_list()?;
for elem in list {
let result = vm.call_with(&pred, [elem.clone()])?;
if result.force(vm)?.as_bool()? {
right.push(elem);
right.push_back(elem);
} else {
wrong.push(elem);
wrong.push_back(elem);
};
}
let res = [("right", right), ("wrong", wrong)];
let res = [
("right", Value::List(NixList::from(right))),
("wrong", Value::List(NixList::from(wrong))),
];
Ok(Value::attrs(NixAttrs::from_iter(res.into_iter())))
}

View file

@ -542,12 +542,6 @@ impl From<PathBuf> for Value {
}
}
impl From<Vec<Value>> for Value {
fn from(val: Vec<Value>) -> Self {
Self::List(NixList::from_vec(val))
}
}
impl TryFrom<serde_json::Value> for Value {
type Error = ErrorKind;
@ -568,11 +562,12 @@ impl TryFrom<serde_json::Value> for Value {
}
}
serde_json::Value::String(s) => Ok(s.into()),
serde_json::Value::Array(a) => Ok(a
.into_iter()
.map(Value::try_from)
.collect::<Result<Vec<_>, _>>()?
.into()),
serde_json::Value::Array(a) => Ok(Value::List(
a.into_iter()
.map(Value::try_from)
.collect::<Result<imbl::Vector<_>, _>>()?
.into(),
)),
serde_json::Value::Object(obj) => {
match (obj.len(), obj.get("name"), obj.get("value")) {
(2, Some(name), Some(value)) => Ok(Self::attrs(NixAttrs::from_kv(