feat(tvix/serde): initial Nix->serde::Deserialize impl

This will make it possible fairly easily use Nix to represent
arbitrary data structures, e.g. for using Nix as a config language.

Only pure Nix (i.e. no `import` etc.) is supported for now.

Not all types, specifically no struct traversal, are implemented in
this commit.

Change-Id: I9ac91a229a0d12bf818e6e3249f3e5a691599a2c
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7712
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
Vincent Ambo 2022-12-31 18:13:59 +03:00 committed by tazjin
parent 49ee3e3b14
commit 90c32eec7a
8 changed files with 485 additions and 0 deletions

View file

@ -93,6 +93,16 @@ rec {
# File a bug if you depend on any for non-debug work!
debug = internal.debugCrate { inherit packageId; };
};
"tvix-serde" = rec {
packageId = "tvix-serde";
build = internal.buildRustCrateWithFeatures {
packageId = "tvix-serde";
};
# Debug support which might change between releases.
# File a bug if you depend on any for non-debug work!
debug = internal.debugCrate { inherit packageId; };
};
"tvix-store" = rec {
packageId = "tvix-store";
build = internal.buildRustCrateWithFeatures {
@ -6608,6 +6618,28 @@ rec {
then lib.cleanSourceWith { filter = sourceFilter; src = ./nar; }
else ./nar;
};
"tvix-serde" = rec {
crateName = "tvix-serde";
version = "0.1.0";
edition = "2021";
# We can't filter paths with references in Nix 2.4
# See https://github.com/NixOS/nix/issues/5410
src =
if (lib.versionOlder builtins.nixVersion "2.4pre20211007")
then lib.cleanSourceWith { filter = sourceFilter; src = ./serde; }
else ./serde;
dependencies = [
{
name = "serde";
packageId = "serde";
}
{
name = "tvix-eval";
packageId = "tvix-eval";
}
];
};
"tvix-store" = rec {
crateName = "tvix-store";