feat(tvix/eval): Implement builtins.fromJSON
Using `serde_json` for parsing JSON here, plus an `impl FromJSON for Value`. The latter is primarily to stay "dependency light" for now - likely going with an actual serde `Deserialize` impl in the future is going to be way better as it allows saving significantly on intermediary allocations. Change-Id: I152a0448ff7c87cf7ebaac927c38912b99de1c18 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6920 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
277c69cbe5
commit
5eb89be682
12 changed files with 123 additions and 13 deletions
|
|
@ -274,6 +274,12 @@ impl NixAttrs {
|
|||
NixAttrs(AttrsRep::Map(map))
|
||||
}
|
||||
|
||||
/// Construct an optimized "KV"-style attribute set given the value for the
|
||||
/// `"name"` key, and the value for the `"value"` key
|
||||
pub(crate) fn from_kv(name: Value, value: Value) -> Self {
|
||||
NixAttrs(AttrsRep::KV { name, value })
|
||||
}
|
||||
|
||||
/// Compare `self` against `other` for equality using Nix equality semantics
|
||||
pub fn nix_eq(&self, other: &Self, vm: &mut VM) -> Result<bool, ErrorKind> {
|
||||
match (&self.0, &other.0) {
|
||||
|
|
@ -376,10 +382,10 @@ fn attempt_optimise_kv(slice: &mut [Value]) -> Option<NixAttrs> {
|
|||
}
|
||||
};
|
||||
|
||||
Some(NixAttrs(AttrsRep::KV {
|
||||
name: slice[name_idx].clone(),
|
||||
value: slice[value_idx].clone(),
|
||||
}))
|
||||
Some(NixAttrs::from_kv(
|
||||
slice[name_idx].clone(),
|
||||
slice[value_idx].clone(),
|
||||
))
|
||||
}
|
||||
|
||||
/// Set an attribute on an in-construction attribute set, while
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue