tvl-depot/tvix/Cargo.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

11304 lines
383 KiB
Nix
Raw Normal View History

# This file was @generated by crate2nix 0.10.0 with the command:
# "generate"
# See https://github.com/kolloch/crate2nix for more info.
{ nixpkgs ? <nixpkgs>
, pkgs ? import nixpkgs { config = { }; }
, lib ? pkgs.lib
, stdenv ? pkgs.stdenv
, buildRustCrateForPkgs ? pkgs: pkgs.buildRustCrate
# This is used as the `crateOverrides` argument for `buildRustCrate`.
, defaultCrateOverrides ? pkgs.defaultCrateOverrides
# The features to enable for the root_crate or the workspace_members.
, rootFeatures ? [ "default" ]
# If true, throw errors instead of issueing deprecation warnings.
, strictDeprecation ? false
# Used for conditional compilation based on CPU feature detection.
, targetFeatures ? [ ]
# Whether to perform release builds: longer compile times, faster binaries.
, release ? true
# Additional crate2nix configuration if it exists.
, crateConfig ? if builtins.pathExists ./crate-config.nix
then pkgs.callPackage ./crate-config.nix { }
else { }
}:
rec {
#
# "public" attributes that we attempt to keep stable with new versions of crate2nix.
#
# Refer your crate build derivation by name here.
# You can override the features with
# workspaceMembers."${crateName}".build.override { features = [ "default" "feature1" ... ]; }.
workspaceMembers = {
"nix-cli" = rec {
packageId = "nix-cli";
build = internal.buildRustCrateWithFeatures {
packageId = "nix-cli";
};
# Debug support which might change between releases.
# File a bug if you depend on any for non-debug work!
debug = internal.debugCrate { inherit packageId; };
};
"nix-compat" = rec {
packageId = "nix-compat";
build = internal.buildRustCrateWithFeatures {
packageId = "nix-compat";
};
# 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-castore" = rec {
packageId = "tvix-castore";
build = internal.buildRustCrateWithFeatures {
packageId = "tvix-castore";
};
# 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-cli" = rec {
packageId = "tvix-cli";
build = internal.buildRustCrateWithFeatures {
packageId = "tvix-cli";
};
# 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-eval" = rec {
packageId = "tvix-eval";
build = internal.buildRustCrateWithFeatures {
packageId = "tvix-eval";
};
# 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-eval-builtin-macros" = rec {
packageId = "tvix-eval-builtin-macros";
build = internal.buildRustCrateWithFeatures {
packageId = "tvix-eval-builtin-macros";
};
# 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-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 {
packageId = "tvix-store";
};
# Debug support which might change between releases.
# File a bug if you depend on any for non-debug work!
debug = internal.debugCrate { inherit packageId; };
};
};
# A derivation that joins the outputs of all workspace members together.
allWorkspaceMembers = pkgs.symlinkJoin {
name = "all-workspace-members";
paths =
let members = builtins.attrValues workspaceMembers;
in builtins.map (m: m.build) members;
};
#
# "internal" ("private") attributes that may change in every new version of crate2nix.
#
internal = rec {
# Build and dependency information for crates.
# Many of the fields are passed one-to-one to buildRustCrate.
#
# Noteworthy:
# * `dependencies`/`buildDependencies`: similar to the corresponding fields for buildRustCrate.
# but with additional information which is used during dependency/feature resolution.
# * `resolvedDependencies`: the selected default features reported by cargo - only included for debugging.
# * `devDependencies` as of now not used by `buildRustCrate` but used to
# inject test dependencies into the build
crates = {
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
"addr2line" = rec {
crateName = "addr2line";
version = "0.21.0";
edition = "2018";
sha256 = "1jx0k3iwyqr8klqbzk6kjvr496yd94aspis10vwsj5wy7gib4c4a";
dependencies = [
{
name = "gimli";
packageId = "gimli";
usesDefaultFeatures = false;
features = [ "read" ];
}
];
features = {
"alloc" = [ "dep:alloc" ];
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"cpp_demangle" = [ "dep:cpp_demangle" ];
"default" = [ "rustc-demangle" "cpp_demangle" "std-object" "fallible-iterator" "smallvec" "memmap2" ];
"fallible-iterator" = [ "dep:fallible-iterator" ];
"memmap2" = [ "dep:memmap2" ];
"object" = [ "dep:object" ];
"rustc-demangle" = [ "dep:rustc-demangle" ];
"rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins" "gimli/rustc-dep-of-std" ];
"smallvec" = [ "dep:smallvec" ];
"std" = [ "gimli/std" ];
"std-object" = [ "std" "object" "object/std" "object/compression" "gimli/endian-reader" ];
};
};
"adler" = rec {
crateName = "adler";
version = "1.0.2";
edition = "2015";
sha256 = "1zim79cvzd5yrkzl3nyfx0avijwgk9fqv3yrscdy1cc79ih02qpj";
authors = [
"Jonas Schievink <jonasschievink@gmail.com>"
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"default" = [ "std" ];
"rustc-dep-of-std" = [ "core" "compiler_builtins" ];
};
};
"aho-corasick" = rec {
crateName = "aho-corasick";
version = "1.0.1";
edition = "2021";
sha256 = "014ddyrlbwg18m74fa52wrfik8y3pzhwqg811yvsyc8cjb70iz37";
libName = "aho_corasick";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
];
dependencies = [
{
name = "memchr";
packageId = "memchr";
optional = true;
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "std" "perf-literal" ];
"logging" = [ "dep:log" ];
"perf-literal" = [ "dep:memchr" ];
"std" = [ "memchr?/std" ];
};
resolvedDefaultFeatures = [ "default" "perf-literal" "std" ];
};
"anes" = rec {
crateName = "anes";
version = "0.1.6";
edition = "2018";
sha256 = "16bj1ww1xkwzbckk32j2pnbn5vk6wgsl3q4p3j9551xbcarwnijb";
authors = [
"Robert Vojta <rvojta@me.com>"
];
features = {
"bitflags" = [ "dep:bitflags" ];
"parser" = [ "bitflags" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"anstream" = rec {
crateName = "anstream";
version = "0.3.2";
edition = "2021";
sha256 = "0qzinx9c8zfq3xqpxzmlv6nrm3ymccr4n8gffkdmj31p50v4za0c";
dependencies = [
{
name = "anstyle";
packageId = "anstyle";
}
{
name = "anstyle-parse";
packageId = "anstyle-parse";
}
{
name = "anstyle-query";
packageId = "anstyle-query";
optional = true;
}
{
name = "anstyle-wincon";
packageId = "anstyle-wincon";
optional = true;
target = { target, features }: (target."windows" or false);
}
{
name = "colorchoice";
packageId = "colorchoice";
optional = true;
}
{
name = "is-terminal";
packageId = "is-terminal";
optional = true;
}
{
name = "utf8parse";
packageId = "utf8parse";
}
];
features = {
"auto" = [ "dep:anstyle-query" "dep:colorchoice" "dep:is-terminal" ];
"default" = [ "auto" "wincon" ];
"wincon" = [ "dep:anstyle-wincon" ];
};
resolvedDefaultFeatures = [ "auto" "default" "wincon" ];
};
"anstyle" = rec {
crateName = "anstyle";
version = "1.0.0";
edition = "2021";
sha256 = "0zbazbfqs4mfw93573f61iy8c78vbbv824m3w206bbljpy39mva1";
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"anstyle-parse" = rec {
crateName = "anstyle-parse";
version = "0.2.0";
edition = "2021";
sha256 = "1vjprf080adyxxpls9iwwny3g7irawfns9s2cj9ngq28dqhzsrg7";
dependencies = [
{
name = "utf8parse";
packageId = "utf8parse";
optional = true;
}
];
features = {
"core" = [ "dep:arrayvec" ];
"default" = [ "utf8" ];
"utf8" = [ "dep:utf8parse" ];
};
resolvedDefaultFeatures = [ "default" "utf8" ];
};
"anstyle-query" = rec {
crateName = "anstyle-query";
version = "1.0.0";
edition = "2021";
sha256 = "0js9bgpqz21g0p2nm350cba1d0zfyixsma9lhyycic5sw55iv8aw";
dependencies = [
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_System_Console" "Win32_Foundation" ];
}
];
};
"anstyle-wincon" = rec {
crateName = "anstyle-wincon";
version = "1.0.1";
edition = "2021";
sha256 = "12714vwjf4c1wm3qf49m5vmd93qvq2nav6zpjc0bxbh3ayjby2hq";
dependencies = [
{
name = "anstyle";
packageId = "anstyle";
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_System_Console" "Win32_Foundation" ];
}
];
};
"anyhow" = rec {
crateName = "anyhow";
version = "1.0.71";
edition = "2018";
sha256 = "1f6rm4c9nlp0wazm80wlw45zpmb48nv24x2227zyidz0y0c0czcw";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
features = {
"backtrace" = [ "dep:backtrace" ];
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"arc-swap" = rec {
crateName = "arc-swap";
version = "1.6.0";
edition = "2018";
sha256 = "19n9j146bpxs9phyh48gmlh9jjsdijr9p9br04qms0g9ypfsvp5x";
authors = [
"Michal 'vorner' Vaner <vorner@vorner.cz>"
];
features = {
"serde" = [ "dep:serde" ];
};
};
"arrayref" = rec {
crateName = "arrayref";
version = "0.3.7";
edition = "2015";
sha256 = "0ia5ndyxqkzdymqr4ls53jdmajf09adjimg5kvw65kkprg930jbb";
authors = [
"David Roundy <roundyd@physics.oregonstate.edu>"
];
};
"arrayvec" = rec {
crateName = "arrayvec";
version = "0.7.2";
edition = "2018";
sha256 = "1mjl8jjqxpl0x7sm9cij61cppi7yi38cdrd1l8zjw7h7qxk2v9cd";
authors = [
"bluss"
];
features = {
"default" = [ "std" ];
"serde" = [ "dep:serde" ];
};
};
"async-stream" = rec {
crateName = "async-stream";
version = "0.3.5";
edition = "2018";
sha256 = "0l8sjq1rylkb1ak0pdyjn83b3k6x36j22myngl4sqqgg7whdsmnd";
authors = [
"Carl Lerche <me@carllerche.com>"
];
dependencies = [
{
name = "async-stream-impl";
packageId = "async-stream-impl";
}
{
name = "futures-core";
packageId = "futures-core";
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
];
};
"async-stream-impl" = rec {
crateName = "async-stream-impl";
version = "0.3.5";
edition = "2018";
sha256 = "14q179j4y8p2z1d0ic6aqgy9fhwz8p9cai1ia8kpw4bw7q12mrhn";
procMacro = true;
authors = [
"Carl Lerche <me@carllerche.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 2.0.15";
features = [ "full" "visit-mut" ];
}
];
};
"async-trait" = rec {
crateName = "async-trait";
version = "0.1.68";
edition = "2018";
sha256 = "0hp8ysdjr8c43avm7bkj73cd22ra3dpzag82bjyyj6qn5a7xvk5r";
procMacro = true;
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 2.0.15";
features = [ "full" "visit-mut" ];
}
];
};
"atty" = rec {
crateName = "atty";
version = "0.2.14";
edition = "2015";
sha256 = "1s7yslcs6a28c5vz7jwj63lkfgyx8mx99fdirlhi9lbhhzhrpcyr";
authors = [
"softprops <d.tangren@gmail.com>"
];
dependencies = [
{
name = "hermit-abi";
packageId = "hermit-abi 0.1.19";
target = { target, features }: ("hermit" == target."os");
}
{
name = "libc";
packageId = "libc";
usesDefaultFeatures = false;
target = { target, features }: (target."unix" or false);
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "consoleapi" "processenv" "minwinbase" "minwindef" "winbase" ];
}
];
};
"autocfg" = rec {
crateName = "autocfg";
version = "1.1.0";
edition = "2015";
sha256 = "1ylp3cb47ylzabimazvbz9ms6ap784zhb6syaz6c1jqpmcmq0s6l";
authors = [
"Josh Stone <cuviper@gmail.com>"
];
};
"axum" = rec {
crateName = "axum";
version = "0.6.18";
edition = "2021";
sha256 = "0ffzv20n4f68qa7d9cp4am0l7np0wxp5ixkv3lf3694i4mwmj5zq";
dependencies = [
{
name = "async-trait";
packageId = "async-trait";
}
{
name = "axum-core";
packageId = "axum-core";
}
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "bytes";
packageId = "bytes";
}
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
features = [ "alloc" ];
}
{
name = "http";
packageId = "http";
}
{
name = "http-body";
packageId = "http-body";
}
{
name = "hyper";
packageId = "hyper";
features = [ "stream" ];
}
{
name = "itoa";
packageId = "itoa";
}
{
name = "matchit";
packageId = "matchit";
}
{
name = "memchr";
packageId = "memchr";
}
{
name = "mime";
packageId = "mime";
}
{
name = "percent-encoding";
packageId = "percent-encoding";
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "serde";
packageId = "serde";
}
{
name = "sync_wrapper";
packageId = "sync_wrapper";
}
{
name = "tower";
packageId = "tower";
usesDefaultFeatures = false;
features = [ "util" ];
}
{
name = "tower-layer";
packageId = "tower-layer";
}
{
name = "tower-service";
packageId = "tower-service";
}
];
buildDependencies = [
{
name = "rustversion";
packageId = "rustversion";
}
];
devDependencies = [
{
name = "rustversion";
packageId = "rustversion";
}
{
name = "serde";
packageId = "serde";
features = [ "derive" ];
}
{
name = "tower";
packageId = "tower";
rename = "tower";
features = [ "util" "timeout" "limit" "load-shed" "steer" "filter" ];
}
];
features = {
"__private_docs" = [ "tower/full" "dep:tower-http" ];
"default" = [ "form" "http1" "json" "matched-path" "original-uri" "query" "tokio" "tower-log" ];
"form" = [ "dep:serde_urlencoded" ];
"headers" = [ "dep:headers" ];
"http1" = [ "hyper/http1" ];
"http2" = [ "hyper/http2" ];
"json" = [ "dep:serde_json" "dep:serde_path_to_error" ];
"macros" = [ "dep:axum-macros" ];
"multipart" = [ "dep:multer" ];
"query" = [ "dep:serde_urlencoded" ];
"tokio" = [ "dep:tokio" "hyper/server" "hyper/tcp" "hyper/runtime" "tower/make" ];
"tower-log" = [ "tower/log" ];
"tracing" = [ "dep:tracing" "axum-core/tracing" ];
"ws" = [ "tokio" "dep:tokio-tungstenite" "dep:sha1" "dep:base64" ];
};
};
"axum-core" = rec {
crateName = "axum-core";
version = "0.3.4";
edition = "2021";
sha256 = "0b1d9nkqb8znaba4qqzxzc968qwj4ybn4vgpyz9lz4a7l9vsb7vm";
dependencies = [
{
name = "async-trait";
packageId = "async-trait";
}
{
name = "bytes";
packageId = "bytes";
}
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
features = [ "alloc" ];
}
{
name = "http";
packageId = "http";
}
{
name = "http-body";
packageId = "http-body";
}
{
name = "mime";
packageId = "mime";
}
{
name = "tower-layer";
packageId = "tower-layer";
}
{
name = "tower-service";
packageId = "tower-service";
}
];
buildDependencies = [
{
name = "rustversion";
packageId = "rustversion";
}
];
devDependencies = [
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
features = [ "alloc" ];
}
];
features = {
"__private_docs" = [ "dep:tower-http" ];
"tracing" = [ "dep:tracing" ];
};
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
"backtrace" = rec {
crateName = "backtrace";
version = "0.3.69";
edition = "2018";
sha256 = "0dsq23dhw4pfndkx2nsa1ml2g31idm7ss7ljxp8d57avygivg290";
authors = [
"The Rust Project Developers"
];
dependencies = [
{
name = "addr2line";
packageId = "addr2line";
usesDefaultFeatures = false;
target = { target, features }: (!((target."windows" or false) && ("msvc" == target."env") && (!("uwp" == target."vendor"))));
}
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "libc";
packageId = "libc";
usesDefaultFeatures = false;
target = { target, features }: (!((target."windows" or false) && ("msvc" == target."env") && (!("uwp" == target."vendor"))));
}
{
name = "miniz_oxide";
packageId = "miniz_oxide";
usesDefaultFeatures = false;
target = { target, features }: (!((target."windows" or false) && ("msvc" == target."env") && (!("uwp" == target."vendor"))));
}
{
name = "object";
packageId = "object";
usesDefaultFeatures = false;
target = { target, features }: (!((target."windows" or false) && ("msvc" == target."env") && (!("uwp" == target."vendor"))));
features = [ "read_core" "elf" "macho" "pe" "unaligned" "archive" ];
}
{
name = "rustc-demangle";
packageId = "rustc-demangle";
}
];
buildDependencies = [
{
name = "cc";
packageId = "cc";
}
];
features = {
"cpp_demangle" = [ "dep:cpp_demangle" ];
"default" = [ "std" ];
"rustc-serialize" = [ "dep:rustc-serialize" ];
"serde" = [ "dep:serde" ];
"serialize-rustc" = [ "rustc-serialize" ];
"serialize-serde" = [ "serde" ];
"verify-winapi" = [ "winapi/dbghelp" "winapi/handleapi" "winapi/libloaderapi" "winapi/memoryapi" "winapi/minwindef" "winapi/processthreadsapi" "winapi/synchapi" "winapi/tlhelp32" "winapi/winbase" "winapi/winnt" ];
"winapi" = [ "dep:winapi" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"base64" = rec {
crateName = "base64";
version = "0.13.1";
edition = "2018";
sha256 = "1s494mqmzjb766fy1kqlccgfg2sdcjb6hzbvzqv2jw65fdi5h6wy";
authors = [
"Alice Maz <alice@alicemaz.com>"
"Marshall Pierce <marshall@mpierce.org>"
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"bit-set" = rec {
crateName = "bit-set";
version = "0.5.3";
edition = "2015";
sha256 = "1wcm9vxi00ma4rcxkl3pzzjli6ihrpn9cfdi0c5b4cvga2mxs007";
authors = [
"Alexis Beingessner <a.beingessner@gmail.com>"
];
dependencies = [
{
name = "bit-vec";
packageId = "bit-vec";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "std" ];
"std" = [ "bit-vec/std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"bit-vec" = rec {
crateName = "bit-vec";
version = "0.6.3";
edition = "2015";
sha256 = "1ywqjnv60cdh1slhz67psnp422md6jdliji6alq0gmly2xm9p7rl";
authors = [
"Alexis Beingessner <a.beingessner@gmail.com>"
];
features = {
"default" = [ "std" ];
"serde" = [ "dep:serde" ];
"serde_no_std" = [ "serde/alloc" ];
"serde_std" = [ "std" "serde/std" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"bitflags" = rec {
crateName = "bitflags";
version = "1.3.2";
edition = "2018";
sha256 = "12ki6w8gn1ldq7yz9y680llwk5gmrhrzszaa17g1sbrw2r2qvwxy";
authors = [
"The Rust Project Developers"
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"rustc-dep-of-std" = [ "core" "compiler_builtins" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"bitmaps" = rec {
crateName = "bitmaps";
version = "3.2.0";
edition = "2021";
sha256 = "00ql08pm4l9hizkldyy54v0pk96g7zg8x6i72c2vkcq0iawl4dkh";
authors = [
"Bodil Stokke <bodil@bodil.org>"
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"blake3" = rec {
crateName = "blake3";
version = "1.3.3";
edition = "2018";
sha256 = "1vyckzpfq46dkxyvy12gkx4nddr5g93alh38i1ka8i4mm1l29bj2";
authors = [
"Jack O'Connor <oconnor663@gmail.com>"
"Samuel Neves"
];
dependencies = [
{
name = "arrayref";
packageId = "arrayref";
}
{
name = "arrayvec";
packageId = "arrayvec";
usesDefaultFeatures = false;
}
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "constant_time_eq";
packageId = "constant_time_eq";
}
{
name = "digest";
packageId = "digest";
optional = true;
features = [ "mac" ];
}
{
name = "rayon";
packageId = "rayon";
optional = true;
}
];
buildDependencies = [
{
name = "cc";
packageId = "cc";
}
];
features = {
"default" = [ "std" ];
"digest" = [ "dep:digest" ];
"rayon" = [ "dep:rayon" ];
"std" = [ "digest/std" ];
"traits-preview" = [ "digest" ];
};
resolvedDefaultFeatures = [ "default" "digest" "rayon" "std" ];
};
"block-buffer" = rec {
crateName = "block-buffer";
version = "0.10.4";
edition = "2018";
sha256 = "0w9sa2ypmrsqqvc20nhwr75wbb5cjr4kkyhpjm1z1lv2kdicfy1h";
authors = [
"RustCrypto Developers"
];
dependencies = [
{
name = "generic-array";
packageId = "generic-array";
}
];
};
"bstr" = rec {
crateName = "bstr";
version = "1.6.0";
edition = "2021";
sha256 = "01bvsr3x9n75klbwxym0zf939vzim0plsmy786p0zzzvrj6i9637";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
];
dependencies = [
{
name = "memchr";
packageId = "memchr";
usesDefaultFeatures = false;
}
{
name = "regex-automata";
packageId = "regex-automata";
optional = true;
usesDefaultFeatures = false;
features = [ "dfa-search" ];
}
{
name = "serde";
packageId = "serde";
optional = true;
usesDefaultFeatures = false;
}
];
features = {
"alloc" = [ "serde?/alloc" ];
"default" = [ "std" "unicode" ];
"serde" = [ "dep:serde" ];
"std" = [ "alloc" "memchr/std" "serde?/std" ];
"unicode" = [ "dep:regex-automata" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "serde" "std" "unicode" ];
};
"bumpalo" = rec {
crateName = "bumpalo";
version = "3.12.1";
edition = "2021";
sha256 = "1j7hjszs00lgl1ddwg4369f4jh87cbpf1m3xzczz751n0scy274v";
authors = [
"Nick Fitzgerald <fitzgen@gmail.com>"
];
features = { };
resolvedDefaultFeatures = [ "default" ];
};
"byteorder" = rec {
crateName = "byteorder";
version = "1.4.3";
edition = "2018";
sha256 = "0456lv9xi1a5bcm32arknf33ikv76p3fr9yzki4lb2897p2qkh8l";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"bytes" = rec {
crateName = "bytes";
version = "1.4.0";
edition = "2018";
sha256 = "1gkh3fk4fm9xv5znlib723h5md5sxsvbd5113sbxff6g1lmgvcl9";
authors = [
"Carl Lerche <me@carllerche.com>"
"Sean McArthur <sean@seanmonstar.com>"
];
features = {
"default" = [ "std" ];
"serde" = [ "dep:serde" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"caps" = rec {
crateName = "caps";
version = "0.5.5";
edition = "2018";
sha256 = "02vk0w48rncgvfmj2mz2kpzvdgc14z225451w7lvvkwvaansl2qr";
authors = [
"Luca Bruno <lucab@lucabruno.net>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
}
{
name = "thiserror";
packageId = "thiserror";
}
];
features = {
"serde" = [ "dep:serde" ];
"serde_support" = [ "serde" ];
};
};
"cast" = rec {
crateName = "cast";
version = "0.3.0";
edition = "2018";
sha256 = "1dbyngbyz2qkk0jn2sxil8vrz3rnpcj142y184p9l4nbl9radcip";
authors = [
"Jorge Aparicio <jorge@japaric.io>"
];
features = { };
};
"cc" = rec {
crateName = "cc";
version = "1.0.79";
edition = "2018";
crateBin = [ ];
sha256 = "07x93b8zbf3xc2dggdd460xlk1wg8lxm6yflwddxj8b15030klsh";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
dependencies = [
{
name = "jobserver";
packageId = "jobserver";
optional = true;
}
];
features = {
"jobserver" = [ "dep:jobserver" ];
"parallel" = [ "jobserver" ];
};
resolvedDefaultFeatures = [ "jobserver" "parallel" ];
};
"cfg-if" = rec {
crateName = "cfg-if";
version = "1.0.0";
edition = "2018";
sha256 = "1za0vb97n4brpzpv8lsbnzmq5r8f2b0cpqqr0sy8h5bn751xxwds";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"rustc-dep-of-std" = [ "core" "compiler_builtins" ];
};
};
"ciborium" = rec {
crateName = "ciborium";
version = "0.2.0";
edition = "2021";
sha256 = "13vqkm88kaq8nvxhaj6qsl0gsc16rqsin014fx5902y6iib3ghdh";
authors = [
"Nathaniel McCallum <npmccallum@profian.com>"
];
dependencies = [
{
name = "ciborium-io";
packageId = "ciborium-io";
features = [ "alloc" ];
}
{
name = "ciborium-ll";
packageId = "ciborium-ll";
}
{
name = "serde";
packageId = "serde";
usesDefaultFeatures = false;
features = [ "alloc" "derive" ];
}
];
features = {
"default" = [ "std" ];
"std" = [ "ciborium-io/std" "serde/std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"ciborium-io" = rec {
crateName = "ciborium-io";
version = "0.2.0";
edition = "2021";
sha256 = "0sdkk7l7pqi2nsbm9c6g8im1gb1qdd83l25ja9xwhg07mx9yfv9l";
authors = [
"Nathaniel McCallum <npmccallum@profian.com>"
];
features = {
"std" = [ "alloc" ];
};
resolvedDefaultFeatures = [ "alloc" "std" ];
};
"ciborium-ll" = rec {
crateName = "ciborium-ll";
version = "0.2.0";
edition = "2021";
sha256 = "06ygqh33k3hp9r9mma43gf189b6cyq62clk65f4w1q54nni30c11";
authors = [
"Nathaniel McCallum <npmccallum@profian.com>"
];
dependencies = [
{
name = "ciborium-io";
packageId = "ciborium-io";
}
{
name = "half";
packageId = "half";
}
];
features = {
"std" = [ "alloc" ];
};
};
"clap 3.2.25" = rec {
crateName = "clap";
version = "3.2.25";
edition = "2021";
crateBin = [ ];
sha256 = "08vi402vfqmfj9f07c4gl6082qxgf4c9x98pbndcnwbgaszq38af";
dependencies = [
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "clap_lex";
packageId = "clap_lex 0.2.4";
}
{
name = "indexmap";
packageId = "indexmap";
}
{
name = "textwrap";
packageId = "textwrap";
usesDefaultFeatures = false;
}
];
features = {
"atty" = [ "dep:atty" ];
"backtrace" = [ "dep:backtrace" ];
"cargo" = [ "once_cell" ];
"clap_derive" = [ "dep:clap_derive" ];
"color" = [ "atty" "termcolor" ];
"debug" = [ "clap_derive/debug" "backtrace" ];
"default" = [ "std" "color" "suggestions" ];
"deprecated" = [ "clap_derive/deprecated" ];
"derive" = [ "clap_derive" "once_cell" ];
"once_cell" = [ "dep:once_cell" ];
"regex" = [ "dep:regex" ];
"std" = [ "indexmap/std" ];
"strsim" = [ "dep:strsim" ];
"suggestions" = [ "strsim" ];
"termcolor" = [ "dep:termcolor" ];
"terminal_size" = [ "dep:terminal_size" ];
"unicase" = [ "dep:unicase" ];
"unicode" = [ "textwrap/unicode-width" "unicase" ];
"unstable-doc" = [ "derive" "cargo" "wrap_help" "yaml" "env" "unicode" "regex" "unstable-replace" "unstable-grouped" ];
"unstable-v4" = [ "clap_derive/unstable-v4" "deprecated" ];
"wrap_help" = [ "terminal_size" "textwrap/terminal_size" ];
"yaml" = [ "yaml-rust" ];
"yaml-rust" = [ "dep:yaml-rust" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"clap 4.2.7" = rec {
crateName = "clap";
version = "4.2.7";
edition = "2021";
crateBin = [ ];
sha256 = "0f69iwzh30wbf01ka1k4fa1mxzh22b4iwqs3i6bd49dly6dizlil";
dependencies = [
{
name = "clap_builder";
packageId = "clap_builder";
usesDefaultFeatures = false;
}
{
name = "clap_derive";
packageId = "clap_derive";
optional = true;
}
{
name = "once_cell";
packageId = "once_cell";
optional = true;
}
];
features = {
"cargo" = [ "clap_builder/cargo" ];
"color" = [ "clap_builder/color" ];
"debug" = [ "clap_builder/debug" "clap_derive?/debug" ];
"default" = [ "std" "color" "help" "usage" "error-context" "suggestions" ];
"deprecated" = [ "clap_builder/deprecated" "clap_derive?/deprecated" ];
"derive" = [ "dep:clap_derive" "dep:once_cell" ];
"env" = [ "clap_builder/env" ];
"error-context" = [ "clap_builder/error-context" ];
"help" = [ "clap_builder/help" ];
"std" = [ "clap_builder/std" ];
"string" = [ "clap_builder/string" ];
"suggestions" = [ "clap_builder/suggestions" ];
"unicode" = [ "clap_builder/unicode" ];
"unstable-doc" = [ "clap_builder/unstable-doc" "derive" ];
"unstable-styles" = [ "clap_builder/unstable-styles" ];
"unstable-v5" = [ "clap_builder/unstable-v5" "clap_derive?/unstable-v5" "deprecated" ];
"usage" = [ "clap_builder/usage" ];
"wrap_help" = [ "clap_builder/wrap_help" ];
};
resolvedDefaultFeatures = [ "color" "default" "derive" "env" "error-context" "help" "std" "suggestions" "usage" ];
};
"clap_builder" = rec {
crateName = "clap_builder";
version = "4.2.7";
edition = "2021";
sha256 = "1gbhk6r14gr0yxc8qs4flbvn5j1302ikk522ys7263snzdwqqk4i";
dependencies = [
{
name = "anstream";
packageId = "anstream";
optional = true;
}
{
name = "anstyle";
packageId = "anstyle";
}
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "clap_lex";
packageId = "clap_lex 0.4.1";
}
{
name = "strsim";
packageId = "strsim";
optional = true;
}
];
features = {
"cargo" = [ "dep:once_cell" ];
"color" = [ "dep:anstream" ];
"debug" = [ "dep:backtrace" ];
"default" = [ "std" "color" "help" "usage" "error-context" "suggestions" ];
"std" = [ "anstyle/std" ];
"suggestions" = [ "dep:strsim" "error-context" ];
"unicode" = [ "dep:unicode-width" "dep:unicase" ];
"unstable-doc" = [ "cargo" "wrap_help" "env" "unicode" "string" "unstable-styles" ];
"unstable-styles" = [ "color" ];
"unstable-v5" = [ "deprecated" ];
"wrap_help" = [ "help" "dep:terminal_size" ];
};
resolvedDefaultFeatures = [ "color" "env" "error-context" "help" "std" "suggestions" "usage" ];
};
"clap_derive" = rec {
crateName = "clap_derive";
version = "4.2.0";
edition = "2021";
sha256 = "1i65yn9n1hydvwrimqp9civ67h1iwd9v1y4yi6z7vf6nav6l95iz";
procMacro = true;
dependencies = [
{
name = "heck";
packageId = "heck";
}
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 2.0.15";
features = [ "full" ];
}
];
features = {
"raw-deprecated" = [ "deprecated" ];
"unstable-v5" = [ "deprecated" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"clap_lex 0.2.4" = rec {
crateName = "clap_lex";
version = "0.2.4";
edition = "2021";
sha256 = "1ib1a9v55ybnaws11l63az0jgz5xiy24jkdgsmyl7grcm3sz4l18";
dependencies = [
{
name = "os_str_bytes";
packageId = "os_str_bytes";
usesDefaultFeatures = false;
features = [ "raw_os_str" ];
}
];
};
"clap_lex 0.4.1" = rec {
crateName = "clap_lex";
version = "0.4.1";
edition = "2021";
sha256 = "18dyxyc0g5xrazj8k6mdjd8v3fvka8z3b9k8yl13avlczskdabca";
};
"clipboard-win" = rec {
crateName = "clipboard-win";
version = "4.5.0";
edition = "2018";
sha256 = "0qh3rypkf1lazniq4nr04hxsck0d55rigb5sjvpvgnap4dyc54bi";
authors = [
"Douman <douman@gmx.se>"
];
dependencies = [
{
name = "error-code";
packageId = "error-code";
target = { target, features }: (target."windows" or false);
}
{
name = "str-buf";
packageId = "str-buf";
target = { target, features }: (target."windows" or false);
}
{
name = "winapi";
packageId = "winapi";
usesDefaultFeatures = false;
target = { target, features }: (target."windows" or false);
features = [ "basetsd" "shellapi" "winbase" "winuser" "winerror" "stringapiset" "errhandlingapi" "synchapi" ];
}
];
features = {
"std" = [ "error-code/std" ];
};
};
"codemap" = rec {
crateName = "codemap";
version = "0.1.3";
edition = "2015";
sha256 = "091azkslwkcijj3lp9ymb084y9a0wm4fkil7m613ja68r2snkrxr";
authors = [
"Kevin Mehall <km@kevinmehall.net>"
];
};
"codemap-diagnostic" = rec {
crateName = "codemap-diagnostic";
version = "0.1.1";
edition = "2015";
sha256 = "0a2hpb57f97816fjz89qrsz1b5r4j2s2a1p9z58ffx17iszfd82b";
authors = [
"Kevin Mehall <km@kevinmehall.net>"
"The Rust Project Developers"
];
dependencies = [
{
name = "atty";
packageId = "atty";
}
{
name = "codemap";
packageId = "codemap";
}
{
name = "termcolor";
packageId = "termcolor";
}
];
};
"colorchoice" = rec {
crateName = "colorchoice";
version = "1.0.0";
edition = "2021";
sha256 = "1ix7w85kwvyybwi2jdkl3yva2r2bvdcc3ka2grjfzfgrapqimgxc";
};
"constant_time_eq" = rec {
crateName = "constant_time_eq";
version = "0.2.5";
edition = "2021";
sha256 = "0sy7bs12dfa2d5hw7759b0mvjqcs85giajg4qyg39xq8a1s8wh8k";
authors = [
"Cesar Eduardo Barros <cesarb@cesarb.eti.br>"
];
};
"core-foundation-sys" = rec {
crateName = "core-foundation-sys";
version = "0.8.4";
edition = "2015";
sha256 = "1yhf471qj6snnm2mcswai47vsbc9w30y4abmdp4crb4av87sb5p4";
authors = [
"The Servo Project Developers"
];
features = { };
};
"count-write" = rec {
crateName = "count-write";
version = "0.1.0";
edition = "2018";
sha256 = "11bswmgr81s3jagdci1pr6qh9vnz9zsbbf2dqpi260daa2mhgmff";
authors = [
"SOFe <sofe2038@gmail.com>"
];
features = {
"futures" = [ "futures-io-preview" ];
"futures-io-preview" = [ "dep:futures-io-preview" ];
"tokio" = [ "tokio-io" ];
"tokio-io" = [ "dep:tokio-io" ];
};
};
"countme" = rec {
crateName = "countme";
version = "3.0.1";
edition = "2018";
sha256 = "0dn62hhvgmwyxslh14r4nlbvz8h50cp5mnn1qhqsw63vs7yva13p";
authors = [
"Aleksey Kladov <aleksey.kladov@gmail.com>"
];
features = {
"dashmap" = [ "dep:dashmap" ];
"enable" = [ "dashmap" "once_cell" "rustc-hash" ];
"once_cell" = [ "dep:once_cell" ];
"print_at_exit" = [ "enable" ];
"rustc-hash" = [ "dep:rustc-hash" ];
};
};
"cpufeatures" = rec {
crateName = "cpufeatures";
version = "0.2.7";
edition = "2018";
sha256 = "0n7y7ls0g1svrjr6ymjv338q8ajc91sv2amdpgn7pi0j42m1wk1y";
authors = [
"RustCrypto Developers"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-linux-android");
}
{
name = "libc";
packageId = "libc";
target = { target, features }: (("aarch64" == target."arch") && ("linux" == target."os"));
}
{
name = "libc";
packageId = "libc";
target = { target, features }: (("aarch64" == target."arch") && ("apple" == target."vendor"));
}
];
};
"crc32fast" = rec {
crateName = "crc32fast";
version = "1.3.2";
edition = "2015";
sha256 = "03c8f29yx293yf43xar946xbls1g60c207m9drf8ilqhr25vsh5m";
authors = [
"Sam Rijs <srijs@airpost.net>"
"Alex Crichton <alex@alexcrichton.com>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"criterion" = rec {
crateName = "criterion";
version = "0.4.0";
edition = "2018";
sha256 = "1jsl4r0yc3fpkyjbi8aa1jrm69apqq9rxwnjnd9brqmaq44nxiz7";
authors = [
"Jorge Aparicio <japaricious@gmail.com>"
"Brook Heisler <brookheisler@gmail.com>"
];
dependencies = [
{
name = "anes";
packageId = "anes";
}
{
name = "atty";
packageId = "atty";
}
{
name = "cast";
packageId = "cast";
}
{
name = "ciborium";
packageId = "ciborium";
}
{
name = "clap";
packageId = "clap 3.2.25";
usesDefaultFeatures = false;
features = [ "std" ];
}
{
name = "criterion-plot";
packageId = "criterion-plot";
}
{
name = "itertools";
packageId = "itertools";
}
{
name = "lazy_static";
packageId = "lazy_static";
}
{
name = "num-traits";
packageId = "num-traits";
usesDefaultFeatures = false;
features = [ "std" ];
}
{
name = "oorandom";
packageId = "oorandom";
}
{
name = "plotters";
packageId = "plotters";
optional = true;
usesDefaultFeatures = false;
features = [ "svg_backend" "area_series" "line_series" ];
}
{
name = "rayon";
packageId = "rayon";
optional = true;
}
{
name = "regex";
packageId = "regex";
usesDefaultFeatures = false;
features = [ "std" ];
}
{
name = "serde";
packageId = "serde";
}
{
name = "serde_derive";
packageId = "serde_derive";
}
{
name = "serde_json";
packageId = "serde_json";
}
{
name = "tinytemplate";
packageId = "tinytemplate";
}
{
name = "walkdir";
packageId = "walkdir";
}
];
features = {
"async" = [ "futures" ];
"async-std" = [ "dep:async-std" ];
"async_futures" = [ "futures/executor" "async" ];
"async_smol" = [ "smol" "async" ];
"async_std" = [ "async-std" "async" ];
"async_tokio" = [ "tokio" "async" ];
"csv" = [ "dep:csv" ];
"csv_output" = [ "csv" ];
"default" = [ "rayon" "plotters" "cargo_bench_support" ];
"futures" = [ "dep:futures" ];
"plotters" = [ "dep:plotters" ];
"rayon" = [ "dep:rayon" ];
"smol" = [ "dep:smol" ];
"stable" = [ "csv_output" "html_reports" "async_futures" "async_smol" "async_tokio" "async_std" ];
"tokio" = [ "dep:tokio" ];
};
resolvedDefaultFeatures = [ "cargo_bench_support" "default" "plotters" "rayon" ];
};
"criterion-plot" = rec {
crateName = "criterion-plot";
version = "0.5.0";
edition = "2018";
sha256 = "1c866xkjqqhzg4cjvg01f8w6xc1j3j7s58rdksl52skq89iq4l3b";
authors = [
"Jorge Aparicio <japaricious@gmail.com>"
"Brook Heisler <brookheisler@gmail.com>"
];
dependencies = [
{
name = "cast";
packageId = "cast";
}
{
name = "itertools";
packageId = "itertools";
}
];
};
"crossbeam-channel" = rec {
crateName = "crossbeam-channel";
version = "0.5.8";
edition = "2018";
sha256 = "004jz4wxp9k26z657i7rsh9s7586dklx2c5aqf1n3w1dgzvjng53";
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "crossbeam-utils";
packageId = "crossbeam-utils";
optional = true;
usesDefaultFeatures = false;
}
];
features = {
"crossbeam-utils" = [ "dep:crossbeam-utils" ];
"default" = [ "std" ];
"std" = [ "crossbeam-utils/std" ];
};
resolvedDefaultFeatures = [ "crossbeam-utils" "default" "std" ];
};
"crossbeam-deque" = rec {
crateName = "crossbeam-deque";
version = "0.8.3";
edition = "2018";
sha256 = "1vqczbcild7nczh5z116w8w46z991kpjyw7qxkf24c14apwdcvyf";
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "crossbeam-epoch";
packageId = "crossbeam-epoch";
optional = true;
usesDefaultFeatures = false;
}
{
name = "crossbeam-utils";
packageId = "crossbeam-utils";
optional = true;
usesDefaultFeatures = false;
}
];
features = {
"crossbeam-epoch" = [ "dep:crossbeam-epoch" ];
"crossbeam-utils" = [ "dep:crossbeam-utils" ];
"default" = [ "std" ];
"std" = [ "crossbeam-epoch/std" "crossbeam-utils/std" ];
};
resolvedDefaultFeatures = [ "crossbeam-epoch" "crossbeam-utils" "default" "std" ];
};
"crossbeam-epoch" = rec {
crateName = "crossbeam-epoch";
version = "0.9.14";
edition = "2018";
sha256 = "15anryfq33mhxnlw95ajixnzznxays3gpvaas6lraci7hlzmzga6";
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "crossbeam-utils";
packageId = "crossbeam-utils";
usesDefaultFeatures = false;
}
{
name = "memoffset";
packageId = "memoffset 0.8.0";
}
{
name = "scopeguard";
packageId = "scopeguard";
usesDefaultFeatures = false;
}
];
buildDependencies = [
{
name = "autocfg";
packageId = "autocfg";
}
];
features = {
"default" = [ "std" ];
"loom" = [ "loom-crate" "crossbeam-utils/loom" ];
"loom-crate" = [ "dep:loom-crate" ];
"nightly" = [ "crossbeam-utils/nightly" ];
"std" = [ "alloc" "crossbeam-utils/std" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
};
"crossbeam-utils" = rec {
crateName = "crossbeam-utils";
version = "0.8.15";
edition = "2018";
sha256 = "0jwq8srmjcwvq9q883k9zyb26qqznaj4jjqdxmvw7xcmrkc3q1iw";
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
];
features = {
"default" = [ "std" ];
"loom" = [ "dep:loom" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"crypto-common" = rec {
crateName = "crypto-common";
version = "0.1.6";
edition = "2018";
sha256 = "1cvby95a6xg7kxdz5ln3rl9xh66nz66w46mm3g56ri1z5x815yqv";
authors = [
"RustCrypto Developers"
];
dependencies = [
{
name = "generic-array";
packageId = "generic-array";
features = [ "more_lengths" ];
}
{
name = "typenum";
packageId = "typenum";
}
];
features = {
"getrandom" = [ "rand_core/getrandom" ];
"rand_core" = [ "dep:rand_core" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"ctor" = rec {
crateName = "ctor";
version = "0.1.26";
edition = "2018";
sha256 = "15m0wqhv12p25xkxz5dxvg23r7a6bkh7p8zi1cdhgswjhdl028vd";
procMacro = true;
authors = [
"Matt Mastracci <matthew@mastracci.com>"
];
dependencies = [
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
usesDefaultFeatures = false;
features = [ "full" "parsing" "printing" "proc-macro" ];
}
];
};
"data-encoding" = rec {
crateName = "data-encoding";
version = "2.3.3";
edition = "2018";
sha256 = "1yq8jnivxsjzl3mjbjdjg5kfvd17wawbmg1jvsfw6cqmn1n6dn13";
authors = [
"Julien Cretin <git@ia0.eu>"
];
features = {
"default" = [ "std" ];
"std" = [ "alloc" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
};
"diff" = rec {
crateName = "diff";
version = "0.1.13";
edition = "2015";
sha256 = "1j0nzjxci2zqx63hdcihkp0a4dkdmzxd7my4m7zk6cjyfy34j9an";
authors = [
"Utkarsh Kukreti <utkarshkukreti@gmail.com>"
];
};
"digest" = rec {
crateName = "digest";
version = "0.10.6";
edition = "2018";
sha256 = "0vz74785s96g727vg37iwkjvbkcfzp093j49ihhyf8sh9s7kfs41";
authors = [
"RustCrypto Developers"
];
dependencies = [
{
name = "block-buffer";
packageId = "block-buffer";
optional = true;
}
{
name = "crypto-common";
packageId = "crypto-common";
}
{
name = "subtle";
packageId = "subtle";
optional = true;
usesDefaultFeatures = false;
}
];
features = {
"blobby" = [ "dep:blobby" ];
"block-buffer" = [ "dep:block-buffer" ];
"const-oid" = [ "dep:const-oid" ];
"core-api" = [ "block-buffer" ];
"default" = [ "core-api" ];
"dev" = [ "blobby" ];
"mac" = [ "subtle" ];
"oid" = [ "const-oid" ];
"rand_core" = [ "crypto-common/rand_core" ];
"std" = [ "alloc" "crypto-common/std" ];
"subtle" = [ "dep:subtle" ];
};
resolvedDefaultFeatures = [ "alloc" "block-buffer" "core-api" "default" "mac" "std" "subtle" ];
};
"dirs" = rec {
crateName = "dirs";
version = "4.0.0";
edition = "2015";
sha256 = "0n8020zl4f0frfnzvgb9agvk4a14i1kjz4daqnxkgslndwmaffna";
authors = [
"Simon Ochsenreither <simon@ochsenreither.de>"
];
dependencies = [
{
name = "dirs-sys";
packageId = "dirs-sys";
}
];
};
"dirs-next" = rec {
crateName = "dirs-next";
version = "2.0.0";
edition = "2018";
sha256 = "1q9kr151h9681wwp6is18750ssghz6j9j7qm7qi1ngcwy7mzi35r";
authors = [
"The @xdg-rs members"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "dirs-sys-next";
packageId = "dirs-sys-next";
}
];
};
"dirs-sys" = rec {
crateName = "dirs-sys";
version = "0.3.7";
edition = "2015";
sha256 = "19md1cnkazham8a6kh22v12d8hh3raqahfk6yb043vrjr68is78v";
authors = [
"Simon Ochsenreither <simon@ochsenreither.de>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "redox_users";
packageId = "redox_users";
usesDefaultFeatures = false;
target = { target, features }: ("redox" == target."os");
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "knownfolders" "objbase" "shlobj" "winbase" "winerror" ];
}
];
};
"dirs-sys-next" = rec {
crateName = "dirs-sys-next";
version = "0.1.2";
edition = "2018";
sha256 = "0kavhavdxv4phzj4l0psvh55hszwnr0rcz8sxbvx20pyqi2a3gaf";
authors = [
"The @xdg-rs members"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "redox_users";
packageId = "redox_users";
usesDefaultFeatures = false;
target = { target, features }: ("redox" == target."os");
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "knownfolders" "objbase" "shlobj" "winbase" "winerror" ];
}
];
};
"either" = rec {
crateName = "either";
version = "1.8.1";
edition = "2018";
sha256 = "14bdy4qsxlfnm4626z4shwaiffi8l5krzkn7ykki1jgqzsrapjkz";
authors = [
"bluss"
];
features = {
"default" = [ "use_std" ];
"serde" = [ "dep:serde" ];
};
resolvedDefaultFeatures = [ "default" "use_std" ];
};
"endian-type" = rec {
crateName = "endian-type";
version = "0.1.2";
edition = "2015";
sha256 = "0bbh88zaig1jfqrm7w3gx0pz81kw2jakk3055vbgapw3dmk08ky3";
authors = [
"Lolirofle <lolipopple@hotmail.com>"
];
};
"errno" = rec {
crateName = "errno";
version = "0.3.1";
edition = "2018";
sha256 = "0fp7qy6fwagrnmi45msqnl01vksqwdb2qbbv60n9cz7rf0xfrksb";
authors = [
"Chris Wong <lambda.fairy@gmail.com>"
];
dependencies = [
{
name = "errno-dragonfly";
packageId = "errno-dragonfly";
target = { target, features }: ("dragonfly" == target."os");
}
{
name = "libc";
packageId = "libc";
target = { target, features }: ("hermit" == target."os");
}
{
name = "libc";
packageId = "libc";
target = { target, features }: ("wasi" == target."os");
}
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_Foundation" "Win32_System_Diagnostics_Debug" ];
}
];
features = {
"default" = [ "std" ];
};
};
"errno-dragonfly" = rec {
crateName = "errno-dragonfly";
version = "0.1.2";
edition = "2018";
sha256 = "1grrmcm6q8512hkq5yzch3yv8wafflc2apbmsaabiyk44yqz2s5a";
authors = [
"Michael Neumann <mneumann@ntecs.de>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
usesDefaultFeatures = false;
}
];
buildDependencies = [
{
name = "cc";
packageId = "cc";
}
];
};
"error-code" = rec {
crateName = "error-code";
version = "2.3.1";
edition = "2018";
sha256 = "08baxlf8qz01lgjsdbfhs193r9y1nlc566s5xvzyf4dzwy8qkwb4";
authors = [
"Douman <douman@gmx.se>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
usesDefaultFeatures = false;
}
{
name = "str-buf";
packageId = "str-buf";
}
];
features = { };
};
"fastrand" = rec {
crateName = "fastrand";
version = "1.9.0";
edition = "2018";
sha256 = "1gh12m56265ihdbzh46bhh0jf74i197wm51jg1cw75q7ggi96475";
authors = [
"Stjepan Glavina <stjepang@gmail.com>"
];
dependencies = [
{
name = "instant";
packageId = "instant";
target = { target, features }: (("wasm32" == target."arch") && (!("wasi" == target."os")));
}
];
devDependencies = [
{
name = "instant";
packageId = "instant";
target = { target, features }: (("wasm32" == target."arch") && (!("wasi" == target."os")));
features = [ "wasm-bindgen" ];
}
];
};
"fd-lock" = rec {
crateName = "fd-lock";
version = "3.0.12";
edition = "2018";
sha256 = "0hlnn1302p37qlc9xl2k5y0vw8q8id5kg59an6riy89hjlynpbir";
authors = [
"Yoshua Wuyts <yoshuawuyts@gmail.com>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "rustix";
packageId = "rustix";
target = { target, features }: (target."unix" or false);
features = [ "fs" ];
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_Foundation" "Win32_Storage_FileSystem" "Win32_System_IO" ];
}
];
};
"fixedbitset" = rec {
crateName = "fixedbitset";
version = "0.4.2";
edition = "2015";
sha256 = "101v41amgv5n9h4hcghvrbfk5vrncx1jwm35rn5szv4rk55i7rqc";
authors = [
"bluss"
];
features = {
"default" = [ "std" ];
"serde" = [ "dep:serde" ];
};
};
"fnv" = rec {
crateName = "fnv";
version = "1.0.7";
edition = "2015";
sha256 = "1hc2mcqha06aibcaza94vbi81j6pr9a1bbxrxjfhc91zin8yr7iz";
libPath = "lib.rs";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"form_urlencoded" = rec {
crateName = "form_urlencoded";
version = "1.2.0";
edition = "2018";
sha256 = "0ljn0kz23nr9yf3432k656k178nh4jqryfji9b0jw343dz7w2ax6";
authors = [
"The rust-url developers"
];
dependencies = [
{
name = "percent-encoding";
packageId = "percent-encoding";
usesDefaultFeatures = false;
}
];
features = {
"alloc" = [ "percent-encoding/alloc" ];
"default" = [ "std" ];
"std" = [ "alloc" "percent-encoding/std" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
};
"fs2" = rec {
crateName = "fs2";
version = "0.4.3";
edition = "2015";
sha256 = "04v2hwk7035c088f19mfl5b1lz84gnvv2hv6m935n0hmirszqr4m";
authors = [
"Dan Burkert <dan@danburkert.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "handleapi" "processthreadsapi" "winerror" "fileapi" "winbase" "std" ];
}
];
};
"fuchsia-cprng" = rec {
crateName = "fuchsia-cprng";
version = "0.1.1";
edition = "2018";
sha256 = "1fnkqrbz7ixxzsb04bsz9p0zzazanma8znfdqjvh39n14vapfvx0";
authors = [
"Erick Tryzelaar <etryzelaar@google.com>"
];
};
"fuse-backend-rs" = rec {
crateName = "fuse-backend-rs";
version = "0.10.5";
edition = "2018";
workspace_member = null;
src = pkgs.fetchgit {
url = "https://github.com/cbrewster/fuse-backend-rs.git";
rev = "b553ce526a7267578ae5af4f4cbba717932518ac";
sha256 = "0165g94bcwyg03yi4kbr6yw75p42kiz2vd1d7s8f3fj4injy49vx";
};
authors = [
"Liu Bo <bo.liu@linux.alibaba.com>"
"Liu Jiang <gerry@linux.alibaba.com>"
"Peng Tao <bergwolf@hyper.sh>"
];
dependencies = [
{
name = "arc-swap";
packageId = "arc-swap";
}
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "caps";
packageId = "caps";
optional = true;
target = { target, features }: ("linux" == target."os");
}
{
name = "core-foundation-sys";
packageId = "core-foundation-sys";
optional = true;
target = { target, features }: ("macos" == target."os");
}
{
name = "lazy_static";
packageId = "lazy_static";
}
{
name = "libc";
packageId = "libc";
}
{
name = "log";
packageId = "log";
}
{
name = "mio";
packageId = "mio";
features = [ "os-poll" "os-ext" ];
}
{
name = "nix";
packageId = "nix 0.24.3";
}
{
name = "vm-memory";
packageId = "vm-memory";
features = [ "backend-mmap" ];
}
{
name = "vmm-sys-util";
packageId = "vmm-sys-util";
optional = true;
}
];
devDependencies = [
{
name = "vm-memory";
packageId = "vm-memory";
features = [ "backend-mmap" "backend-bitmap" ];
}
{
name = "vmm-sys-util";
packageId = "vmm-sys-util";
}
];
features = {
"async-io" = [ "async-trait" "tokio-uring" "tokio/fs" "tokio/net" "tokio/sync" "tokio/rt" "tokio/macros" "io-uring" ];
"async-trait" = [ "dep:async-trait" ];
"caps" = [ "dep:caps" ];
"core-foundation-sys" = [ "dep:core-foundation-sys" ];
"default" = [ "fusedev" ];
"fusedev" = [ "vmm-sys-util" "caps" "core-foundation-sys" ];
"io-uring" = [ "dep:io-uring" ];
"tokio" = [ "dep:tokio" ];
"tokio-uring" = [ "dep:tokio-uring" ];
"vhost" = [ "dep:vhost" ];
"vhost-user-fs" = [ "virtiofs" "vhost" "caps" ];
"virtio-queue" = [ "dep:virtio-queue" ];
"virtiofs" = [ "virtio-queue" "caps" "vmm-sys-util" ];
"vmm-sys-util" = [ "dep:vmm-sys-util" ];
};
resolvedDefaultFeatures = [ "caps" "core-foundation-sys" "default" "fusedev" "vmm-sys-util" ];
};
"futures" = rec {
crateName = "futures";
version = "0.3.28";
edition = "2018";
sha256 = "0h7c1xvxk751c7xlnph6fh3rb77z4lig4qif7f8q79db2az2ld13";
dependencies = [
{
name = "futures-channel";
packageId = "futures-channel";
usesDefaultFeatures = false;
features = [ "sink" ];
}
{
name = "futures-core";
packageId = "futures-core";
usesDefaultFeatures = false;
}
{
name = "futures-executor";
packageId = "futures-executor";
optional = true;
usesDefaultFeatures = false;
}
{
name = "futures-io";
packageId = "futures-io";
usesDefaultFeatures = false;
}
{
name = "futures-sink";
packageId = "futures-sink";
usesDefaultFeatures = false;
}
{
name = "futures-task";
packageId = "futures-task";
usesDefaultFeatures = false;
}
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
features = [ "sink" ];
}
];
features = {
"alloc" = [ "futures-core/alloc" "futures-task/alloc" "futures-sink/alloc" "futures-channel/alloc" "futures-util/alloc" ];
"async-await" = [ "futures-util/async-await" "futures-util/async-await-macro" ];
"bilock" = [ "futures-util/bilock" ];
"compat" = [ "std" "futures-util/compat" ];
"default" = [ "std" "async-await" "executor" ];
"executor" = [ "std" "futures-executor/std" ];
"futures-executor" = [ "dep:futures-executor" ];
"io-compat" = [ "compat" "futures-util/io-compat" ];
"std" = [ "alloc" "futures-core/std" "futures-task/std" "futures-io/std" "futures-sink/std" "futures-util/std" "futures-util/io" "futures-util/channel" ];
"thread-pool" = [ "executor" "futures-executor/thread-pool" ];
"unstable" = [ "futures-core/unstable" "futures-task/unstable" "futures-channel/unstable" "futures-io/unstable" "futures-util/unstable" ];
"write-all-vectored" = [ "futures-util/write-all-vectored" ];
};
resolvedDefaultFeatures = [ "alloc" "async-await" "default" "executor" "futures-executor" "std" ];
};
"futures-channel" = rec {
crateName = "futures-channel";
version = "0.3.28";
edition = "2018";
sha256 = "1wmm9wm5zjigxz61qkscmxp7c30zp08dy63spjz5pch9gva1hmcm";
dependencies = [
{
name = "futures-core";
packageId = "futures-core";
usesDefaultFeatures = false;
}
{
name = "futures-sink";
packageId = "futures-sink";
optional = true;
usesDefaultFeatures = false;
}
];
features = {
"alloc" = [ "futures-core/alloc" ];
"default" = [ "std" ];
"futures-sink" = [ "dep:futures-sink" ];
"sink" = [ "futures-sink" ];
"std" = [ "alloc" "futures-core/std" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "futures-sink" "sink" "std" ];
};
"futures-core" = rec {
crateName = "futures-core";
version = "0.3.28";
edition = "2018";
sha256 = "137fdxy5amg9zkpa1kqnj7bnha6b94fmddz59w973x96gqxmijjb";
features = {
"default" = [ "std" ];
"portable-atomic" = [ "dep:portable-atomic" ];
"std" = [ "alloc" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
};
"futures-executor" = rec {
crateName = "futures-executor";
version = "0.3.28";
edition = "2018";
sha256 = "1q468di96knnla72xdvswic1ir2qkrf5czsdigc5n4l86a1fxv6c";
dependencies = [
{
name = "futures-core";
packageId = "futures-core";
usesDefaultFeatures = false;
}
{
name = "futures-task";
packageId = "futures-task";
usesDefaultFeatures = false;
}
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "std" ];
"num_cpus" = [ "dep:num_cpus" ];
"std" = [ "futures-core/std" "futures-task/std" "futures-util/std" ];
"thread-pool" = [ "std" "num_cpus" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"futures-io" = rec {
crateName = "futures-io";
version = "0.3.28";
edition = "2018";
sha256 = "0r4rhkdhq1my4fahlhz59barqa511bylq813w3w4gvbidq4p9zsg";
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"futures-macro" = rec {
crateName = "futures-macro";
version = "0.3.28";
edition = "2018";
sha256 = "0wpfsqxwqk5k569xl0jzz4zxy85x695mndf7y9jn66q6jid59jl9";
procMacro = true;
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 2.0.15";
features = [ "full" ];
}
];
};
"futures-sink" = rec {
crateName = "futures-sink";
version = "0.3.28";
edition = "2018";
sha256 = "0vkv4frf4c6gm1ag9imjz8d0xvpnn22lkylsls0rffx147zf8fzl";
features = {
"default" = [ "std" ];
"std" = [ "alloc" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
};
"futures-task" = rec {
crateName = "futures-task";
version = "0.3.28";
edition = "2018";
sha256 = "0ravgihyarbplj32zp60asirfnaalw2wfsa0afhnl3kcpqrd3lvn";
features = {
"default" = [ "std" ];
"std" = [ "alloc" ];
};
resolvedDefaultFeatures = [ "alloc" "std" ];
};
"futures-util" = rec {
crateName = "futures-util";
version = "0.3.28";
edition = "2018";
sha256 = "0cwmls9369w6q6hwlbm10q0plr6hmg8w28fpqvv4rmbjnx01xc16";
dependencies = [
{
name = "futures-channel";
packageId = "futures-channel";
optional = true;
usesDefaultFeatures = false;
features = [ "std" ];
}
{
name = "futures-core";
packageId = "futures-core";
usesDefaultFeatures = false;
}
{
name = "futures-io";
packageId = "futures-io";
optional = true;
usesDefaultFeatures = false;
features = [ "std" ];
}
{
name = "futures-macro";
packageId = "futures-macro";
optional = true;
usesDefaultFeatures = false;
}
{
name = "futures-sink";
packageId = "futures-sink";
optional = true;
usesDefaultFeatures = false;
}
{
name = "futures-task";
packageId = "futures-task";
usesDefaultFeatures = false;
}
{
name = "memchr";
packageId = "memchr";
optional = true;
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "pin-utils";
packageId = "pin-utils";
}
{
name = "slab";
packageId = "slab";
optional = true;
}
];
features = {
"alloc" = [ "futures-core/alloc" "futures-task/alloc" ];
"async-await-macro" = [ "async-await" "futures-macro" ];
"channel" = [ "std" "futures-channel" ];
"compat" = [ "std" "futures_01" ];
"default" = [ "std" "async-await" "async-await-macro" ];
"futures-channel" = [ "dep:futures-channel" ];
"futures-io" = [ "dep:futures-io" ];
"futures-macro" = [ "dep:futures-macro" ];
"futures-sink" = [ "dep:futures-sink" ];
"futures_01" = [ "dep:futures_01" ];
"io" = [ "std" "futures-io" "memchr" ];
"io-compat" = [ "io" "compat" "tokio-io" ];
"memchr" = [ "dep:memchr" ];
"portable-atomic" = [ "futures-core/portable-atomic" ];
"sink" = [ "futures-sink" ];
"slab" = [ "dep:slab" ];
"std" = [ "alloc" "futures-core/std" "futures-task/std" "slab" ];
"tokio-io" = [ "dep:tokio-io" ];
"unstable" = [ "futures-core/unstable" "futures-task/unstable" ];
"write-all-vectored" = [ "io" ];
};
resolvedDefaultFeatures = [ "alloc" "async-await" "async-await-macro" "channel" "futures-channel" "futures-io" "futures-macro" "futures-sink" "io" "memchr" "sink" "slab" "std" ];
};
"fxhash" = rec {
crateName = "fxhash";
version = "0.2.1";
edition = "2015";
sha256 = "037mb9ichariqi45xm6mz0b11pa92gj38ba0409z3iz239sns6y3";
libPath = "lib.rs";
authors = [
"cbreeden <github@u.breeden.cc>"
];
dependencies = [
{
name = "byteorder";
packageId = "byteorder";
}
];
};
"genawaiter" = rec {
crateName = "genawaiter";
version = "0.99.1";
edition = "2018";
sha256 = "1861a6vy9lc9a8lbw496m9j9jcjcn9nf7rkm6jqkkpnb3cvd0sy8";
authors = [
"John Simon <john@whatisaph.one>"
];
dependencies = [
{
name = "genawaiter-macro";
packageId = "genawaiter-macro";
}
];
features = {
"default" = [ "proc_macro" ];
"futures-core" = [ "dep:futures-core" ];
"futures03" = [ "futures-core" ];
"genawaiter-proc-macro" = [ "dep:genawaiter-proc-macro" ];
"proc-macro-hack" = [ "dep:proc-macro-hack" ];
"proc_macro" = [ "genawaiter-proc-macro" "proc-macro-hack" "genawaiter-macro/proc_macro" ];
};
};
"genawaiter-macro" = rec {
crateName = "genawaiter-macro";
version = "0.99.1";
edition = "2018";
sha256 = "1g6zmr88fk48f1ksz9ik1i2mwjsiam9s4p9aybhvs2zwzphxychb";
authors = [
"Devin R <devin.ragotzy@gmail.com>"
];
features = { };
};
"generic-array" = rec {
crateName = "generic-array";
version = "0.14.7";
edition = "2015";
sha256 = "16lyyrzrljfq424c3n8kfwkqihlimmsg5nhshbbp48np3yjrqr45";
libName = "generic_array";
authors = [
"Bartłomiej Kamiński <fizyk20@gmail.com>"
"Aaron Trent <novacrazy@gmail.com>"
];
dependencies = [
{
name = "typenum";
packageId = "typenum";
}
];
buildDependencies = [
{
name = "version_check";
packageId = "version_check";
}
];
features = {
"serde" = [ "dep:serde" ];
"zeroize" = [ "dep:zeroize" ];
};
resolvedDefaultFeatures = [ "more_lengths" ];
};
"getrandom" = rec {
crateName = "getrandom";
version = "0.2.9";
edition = "2018";
sha256 = "1r6p47dd9f9cgiwlxmksammbfwnhsv5hjkhd0kjsgnzanad1spn8";
authors = [
"The Rand Project Developers"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "libc";
packageId = "libc";
usesDefaultFeatures = false;
target = { target, features }: (target."unix" or false);
}
{
name = "wasi";
packageId = "wasi";
usesDefaultFeatures = false;
target = { target, features }: ("wasi" == target."os");
}
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"js" = [ "wasm-bindgen" "js-sys" ];
"js-sys" = [ "dep:js-sys" ];
"rustc-dep-of-std" = [ "compiler_builtins" "core" "libc/rustc-dep-of-std" "wasi/rustc-dep-of-std" ];
"wasm-bindgen" = [ "dep:wasm-bindgen" ];
};
resolvedDefaultFeatures = [ "std" ];
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
"gimli" = rec {
crateName = "gimli";
version = "0.28.0";
edition = "2018";
sha256 = "1h7hcl3chfvd2gfrrxjymnwj7anqxjslvz20kcargkvsya2dgf3g";
features = {
"default" = [ "read-all" "write" ];
"endian-reader" = [ "read" "dep:stable_deref_trait" ];
"fallible-iterator" = [ "dep:fallible-iterator" ];
"read" = [ "read-core" ];
"read-all" = [ "read" "std" "fallible-iterator" "endian-reader" ];
"rustc-dep-of-std" = [ "dep:core" "dep:alloc" "dep:compiler_builtins" ];
"std" = [ "fallible-iterator?/std" "stable_deref_trait?/std" ];
"write" = [ "dep:indexmap" ];
};
resolvedDefaultFeatures = [ "read" "read-core" ];
};
"glob" = rec {
crateName = "glob";
version = "0.3.1";
edition = "2015";
sha256 = "16zca52nglanv23q5qrwd5jinw3d3as5ylya6y1pbx47vkxvrynj";
authors = [
"The Rust Project Developers"
];
};
"h2" = rec {
crateName = "h2";
version = "0.3.18";
edition = "2018";
sha256 = "08ffidcaswjn30c63whc17s93nr1afh8l4xmd21nhywqq8aaky0p";
authors = [
"Carl Lerche <me@carllerche.com>"
"Sean McArthur <sean@seanmonstar.com>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "fnv";
packageId = "fnv";
}
{
name = "futures-core";
packageId = "futures-core";
usesDefaultFeatures = false;
}
{
name = "futures-sink";
packageId = "futures-sink";
usesDefaultFeatures = false;
}
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
}
{
name = "http";
packageId = "http";
}
{
name = "indexmap";
packageId = "indexmap";
features = [ "std" ];
}
{
name = "slab";
packageId = "slab";
}
{
name = "tokio";
packageId = "tokio";
features = [ "io-util" ];
}
{
name = "tokio-util";
packageId = "tokio-util";
features = [ "codec" ];
}
{
name = "tracing";
packageId = "tracing";
usesDefaultFeatures = false;
features = [ "std" ];
}
];
devDependencies = [
{
name = "tokio";
packageId = "tokio";
features = [ "rt-multi-thread" "macros" "sync" "net" ];
}
];
features = { };
};
"half" = rec {
crateName = "half";
version = "1.8.2";
edition = "2018";
sha256 = "1mqbmx2m9qd4lslkb42fzgldsklhv9c4bxsc8j82r80d8m24mfza";
authors = [
"Kathryn Long <squeeself@gmail.com>"
];
features = {
"bytemuck" = [ "dep:bytemuck" ];
"num-traits" = [ "dep:num-traits" ];
"serde" = [ "dep:serde" ];
"serialize" = [ "serde" ];
"std" = [ "alloc" ];
"zerocopy" = [ "dep:zerocopy" ];
};
};
"hashbrown" = rec {
crateName = "hashbrown";
version = "0.12.3";
edition = "2021";
sha256 = "1268ka4750pyg2pbgsr43f0289l5zah4arir2k4igx5a8c6fg7la";
authors = [
"Amanieu d'Antras <amanieu@gmail.com>"
];
features = {
"ahash" = [ "dep:ahash" ];
"ahash-compile-time-rng" = [ "ahash/compile-time-rng" ];
"alloc" = [ "dep:alloc" ];
"bumpalo" = [ "dep:bumpalo" ];
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"default" = [ "ahash" "inline-more" ];
"rayon" = [ "dep:rayon" ];
"rustc-dep-of-std" = [ "nightly" "core" "compiler_builtins" "alloc" "rustc-internal-api" ];
"serde" = [ "dep:serde" ];
};
resolvedDefaultFeatures = [ "inline-more" "raw" ];
};
"heck" = rec {
crateName = "heck";
version = "0.4.1";
edition = "2018";
sha256 = "1a7mqsnycv5z4z5vnv1k34548jzmc0ajic7c1j8jsaspnhw5ql4m";
authors = [
"Without Boats <woboats@gmail.com>"
];
features = {
"unicode" = [ "unicode-segmentation" ];
"unicode-segmentation" = [ "dep:unicode-segmentation" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"hermit-abi 0.1.19" = rec {
crateName = "hermit-abi";
version = "0.1.19";
edition = "2018";
sha256 = "0cxcm8093nf5fyn114w8vxbrbcyvv91d4015rdnlgfll7cs6gd32";
authors = [
"Stefan Lankes"
];
dependencies = [
{
name = "libc";
packageId = "libc";
usesDefaultFeatures = false;
}
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"rustc-dep-of-std" = [ "core" "compiler_builtins/rustc-dep-of-std" "libc/rustc-dep-of-std" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"hermit-abi 0.2.6" = rec {
crateName = "hermit-abi";
version = "0.2.6";
edition = "2021";
sha256 = "1iz439yz9qzk3rh9pqx2rz5c4107v3qbd7bppfsbzb1mzr02clgf";
authors = [
"Stefan Lankes"
];
dependencies = [
{
name = "libc";
packageId = "libc";
usesDefaultFeatures = false;
}
];
features = {
"alloc" = [ "dep:alloc" ];
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins/rustc-dep-of-std" "libc/rustc-dep-of-std" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"hermit-abi 0.3.1" = rec {
crateName = "hermit-abi";
version = "0.3.1";
edition = "2021";
sha256 = "11j2v3q58kmi5mhjvh6hfrb7il2yzg7gmdf5lpwnwwv6qj04im7y";
authors = [
"Stefan Lankes"
];
features = {
"alloc" = [ "dep:alloc" ];
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins/rustc-dep-of-std" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"http" = rec {
crateName = "http";
version = "0.2.9";
edition = "2018";
sha256 = "10j4jjpngaymxjvi92hllr2y6acr09pq61cvzxd44qzvkb4zyvmx";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
"Carl Lerche <me@carllerche.com>"
"Sean McArthur <sean@seanmonstar.com>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "fnv";
packageId = "fnv";
}
{
name = "itoa";
packageId = "itoa";
}
];
};
"http-body" = rec {
crateName = "http-body";
version = "0.4.5";
edition = "2018";
sha256 = "1l967qwwlvhp198xdrnc0p5d7jwfcp6q2lm510j6zqw4s4b8zwym";
authors = [
"Carl Lerche <me@carllerche.com>"
"Lucio Franco <luciofranco14@gmail.com>"
"Sean McArthur <sean@seanmonstar.com>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "http";
packageId = "http";
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
];
};
"httparse" = rec {
crateName = "httparse";
version = "1.8.0";
edition = "2018";
sha256 = "010rrfahm1jss3p022fqf3j3jmm72vhn4iqhykahb9ynpaag75yq";
authors = [
"Sean McArthur <sean@seanmonstar.com>"
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"httpdate" = rec {
crateName = "httpdate";
version = "1.0.2";
edition = "2018";
sha256 = "08bln7b1ibdw26gl8h4dr6rlybvlkyhlha309xbh9ghxh9nf78f4";
authors = [
"Pyfisch <pyfisch@posteo.org>"
];
};
"hyper" = rec {
crateName = "hyper";
version = "0.14.26";
edition = "2018";
sha256 = "1m27s4p6kv5rbzqkw2lzfs60fwz7wym97zri0j8kn6pilrr2sc5b";
authors = [
"Sean McArthur <sean@seanmonstar.com>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "futures-channel";
packageId = "futures-channel";
}
{
name = "futures-core";
packageId = "futures-core";
usesDefaultFeatures = false;
}
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
}
{
name = "h2";
packageId = "h2";
optional = true;
}
{
name = "http";
packageId = "http";
}
{
name = "http-body";
packageId = "http-body";
}
{
name = "httparse";
packageId = "httparse";
}
{
name = "httpdate";
packageId = "httpdate";
}
{
name = "itoa";
packageId = "itoa";
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "socket2";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
packageId = "socket2 0.4.9";
optional = true;
features = [ "all" ];
}
{
name = "tokio";
packageId = "tokio";
features = [ "sync" ];
}
{
name = "tower-service";
packageId = "tower-service";
}
{
name = "tracing";
packageId = "tracing";
usesDefaultFeatures = false;
features = [ "std" ];
}
{
name = "want";
packageId = "want";
}
];
devDependencies = [
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
features = [ "alloc" ];
}
{
name = "tokio";
packageId = "tokio";
features = [ "fs" "macros" "io-std" "io-util" "rt" "rt-multi-thread" "sync" "time" "test-util" ];
}
];
features = {
"ffi" = [ "libc" ];
"full" = [ "client" "http1" "http2" "server" "stream" "runtime" ];
"h2" = [ "dep:h2" ];
"http2" = [ "h2" ];
"libc" = [ "dep:libc" ];
"runtime" = [ "tcp" "tokio/rt" "tokio/time" ];
"socket2" = [ "dep:socket2" ];
"tcp" = [ "socket2" "tokio/net" "tokio/rt" "tokio/time" ];
};
resolvedDefaultFeatures = [ "client" "default" "full" "h2" "http1" "http2" "runtime" "server" "socket2" "stream" "tcp" ];
};
"hyper-timeout" = rec {
crateName = "hyper-timeout";
version = "0.4.1";
edition = "2018";
sha256 = "1c8k3g8k2yh1gxvsx9p7amkimgxhl9kafwpj7jyf8ywc5r45ifdv";
authors = [
"Herman J. Radtke III <herman@hermanradtke.com>"
];
dependencies = [
{
name = "hyper";
packageId = "hyper";
features = [ "client" ];
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "tokio";
packageId = "tokio";
}
{
name = "tokio-io-timeout";
packageId = "tokio-io-timeout";
}
];
devDependencies = [
{
name = "hyper";
packageId = "hyper";
features = [ "client" "http1" "tcp" ];
}
{
name = "tokio";
packageId = "tokio";
features = [ "io-std" "io-util" "macros" ];
}
];
};
"idna" = rec {
crateName = "idna";
version = "0.4.0";
edition = "2018";
sha256 = "0z4i1dhqk83bbv230pp1c31dqdlnscvqxvc85n40ihgvgfqdc83x";
authors = [
"The rust-url developers"
];
dependencies = [
{
name = "unicode-bidi";
packageId = "unicode-bidi";
usesDefaultFeatures = false;
features = [ "hardcoded-data" ];
}
{
name = "unicode-normalization";
packageId = "unicode-normalization";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "std" ];
"std" = [ "alloc" "unicode-bidi/std" "unicode-normalization/std" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
};
"imbl" = rec {
crateName = "imbl";
version = "2.0.0";
edition = "2018";
sha256 = "03fvbk1g1pqs6j77g76vq5klqi6bx9jl9di782268ilzrmlnp062";
authors = [
"Bodil Stokke <bodil@bodil.org>"
"Joe Neeman <joeneeman@gmail.com>"
];
dependencies = [
{
name = "bitmaps";
packageId = "bitmaps";
}
{
name = "imbl-sized-chunks";
packageId = "imbl-sized-chunks";
}
{
name = "proptest";
packageId = "proptest";
optional = true;
}
{
name = "rand_core";
packageId = "rand_core 0.6.4";
}
{
name = "rand_xoshiro";
packageId = "rand_xoshiro";
}
{
name = "serde";
packageId = "serde";
optional = true;
}
];
buildDependencies = [
{
name = "version_check";
packageId = "version_check";
}
];
devDependencies = [
{
name = "proptest";
packageId = "proptest";
}
{
name = "serde";
packageId = "serde";
}
];
features = {
"arbitrary" = [ "dep:arbitrary" ];
"proptest" = [ "dep:proptest" ];
"quickcheck" = [ "dep:quickcheck" ];
"rayon" = [ "dep:rayon" ];
"refpool" = [ "dep:refpool" ];
"serde" = [ "dep:serde" ];
};
resolvedDefaultFeatures = [ "proptest" "serde" ];
};
"imbl-sized-chunks" = rec {
crateName = "imbl-sized-chunks";
version = "0.1.1";
edition = "2021";
sha256 = "0xhhmb7aldl92hxkmsx10n59zxsa0hw4bvykc6jmq72lnah7x5g6";
authors = [
"Bodil Stokke <bodil@bodil.org>"
"Joe Neeman <joeneeman@gmail.com>"
];
dependencies = [
{
name = "bitmaps";
packageId = "bitmaps";
usesDefaultFeatures = false;
}
];
features = {
"arbitrary" = [ "dep:arbitrary" ];
"array-ops" = [ "dep:array-ops" ];
"default" = [ "std" ];
"refpool" = [ "dep:refpool" ];
"ringbuffer" = [ "array-ops" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"indexmap" = rec {
crateName = "indexmap";
version = "1.9.3";
edition = "2021";
sha256 = "16dxmy7yvk51wvnih3a3im6fp5lmx0wx76i03n06wyak6cwhw1xx";
dependencies = [
{
name = "hashbrown";
packageId = "hashbrown";
usesDefaultFeatures = false;
features = [ "raw" ];
}
];
buildDependencies = [
{
name = "autocfg";
packageId = "autocfg";
}
];
features = {
"arbitrary" = [ "dep:arbitrary" ];
"quickcheck" = [ "dep:quickcheck" ];
"rayon" = [ "dep:rayon" ];
"rustc-rayon" = [ "dep:rustc-rayon" ];
"serde" = [ "dep:serde" ];
"serde-1" = [ "serde" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"instant" = rec {
crateName = "instant";
version = "0.1.12";
edition = "2018";
sha256 = "0b2bx5qdlwayriidhrag8vhy10kdfimfhmb3jnjmsz2h9j1bwnvs";
authors = [
"sebcrozet <developer@crozet.re>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
];
features = {
"js-sys" = [ "dep:js-sys" ];
"stdweb" = [ "dep:stdweb" ];
"wasm-bindgen" = [ "js-sys" "wasm-bindgen_rs" "web-sys" ];
"wasm-bindgen_rs" = [ "dep:wasm-bindgen_rs" ];
"web-sys" = [ "dep:web-sys" ];
};
};
"io-lifetimes" = rec {
crateName = "io-lifetimes";
version = "1.0.10";
edition = "2018";
sha256 = "08625nsz0lgbd7c9lly6b6l45viqpsnj9jbsixd9mrz7596wfrlw";
authors = [
"Dan Gohman <dev@sunfishcode.online>"
];
dependencies = [
{
name = "hermit-abi";
packageId = "hermit-abi 0.3.1";
optional = true;
target = { target, features }: ("hermit" == target."os");
}
{
name = "libc";
packageId = "libc";
optional = true;
target = { target, features }: (!(target."windows" or false));
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
optional = true;
target = { target, features }: (target."windows" or false);
features = [ "Win32_Foundation" "Win32_Storage_FileSystem" "Win32_Networking_WinSock" "Win32_Security" "Win32_System_IO" "Win32_System_Threading" ];
}
];
features = {
"async-std" = [ "dep:async-std" ];
"close" = [ "libc" "hermit-abi" "windows-sys" ];
"default" = [ "close" ];
"fs-err" = [ "dep:fs-err" ];
"hermit-abi" = [ "dep:hermit-abi" ];
"libc" = [ "dep:libc" ];
"mio" = [ "dep:mio" ];
"os_pipe" = [ "dep:os_pipe" ];
"socket2" = [ "dep:socket2" ];
"tokio" = [ "dep:tokio" ];
"windows-sys" = [ "dep:windows-sys" ];
};
resolvedDefaultFeatures = [ "close" "default" "hermit-abi" "libc" "windows-sys" ];
};
"is-terminal" = rec {
crateName = "is-terminal";
version = "0.4.7";
edition = "2018";
sha256 = "07xyfla3f2jjb666s72la5jvl9zq7mixbqkjvyfi5j018rhr7kxd";
authors = [
"softprops <d.tangren@gmail.com>"
"Dan Gohman <dev@sunfishcode.online>"
];
dependencies = [
{
name = "hermit-abi";
packageId = "hermit-abi 0.3.1";
target = { target, features }: ("hermit" == target."os");
}
{
name = "io-lifetimes";
packageId = "io-lifetimes";
}
{
name = "rustix";
packageId = "rustix";
target = { target, features }: (!((target."windows" or false) || ("hermit" == target."os") || ("unknown" == target."os")));
features = [ "termios" ];
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_Foundation" "Win32_Storage_FileSystem" "Win32_System_Console" ];
}
];
};
"itertools" = rec {
crateName = "itertools";
version = "0.10.5";
edition = "2018";
sha256 = "0ww45h7nxx5kj6z2y6chlskxd1igvs4j507anr6dzg99x1h25zdh";
authors = [
"bluss"
];
dependencies = [
{
name = "either";
packageId = "either";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "use_std" ];
"use_std" = [ "use_alloc" "either/use_std" ];
};
resolvedDefaultFeatures = [ "default" "use_alloc" "use_std" ];
};
"itoa" = rec {
crateName = "itoa";
version = "1.0.6";
edition = "2018";
sha256 = "19jc2sa3wvdc29zhgbwf3bayikq4rq18n20dbyg9ahd4hbsxjfj5";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
features = {
"no-panic" = [ "dep:no-panic" ];
};
};
"jobserver" = rec {
crateName = "jobserver";
version = "0.1.26";
edition = "2018";
sha256 = "1hkprvh1zp5s3qwjjwwhw7rcpivczcbf6q60rcxr0m8158hzsv4k";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
];
};
"js-sys" = rec {
crateName = "js-sys";
version = "0.3.61";
edition = "2018";
sha256 = "0c075apyc5fxp2sbgr87qcvq53pcjxmp05l47lzlhpn5a0hxwpa4";
authors = [
"The wasm-bindgen Developers"
];
dependencies = [
{
name = "wasm-bindgen";
packageId = "wasm-bindgen";
}
];
};
"lazy_static" = rec {
crateName = "lazy_static";
version = "1.4.0";
edition = "2015";
sha256 = "0in6ikhw8mgl33wjv6q6xfrb5b9jr16q8ygjy803fay4zcisvaz2";
authors = [
"Marvin Löbel <loebel.marvin@gmail.com>"
];
features = {
"spin" = [ "dep:spin" ];
"spin_no_std" = [ "spin" ];
};
};
feat(tvix/eval): use lexical-core to format float Apparently our naive implementation of float formatting, which simply used {:.5}, and trimmed trailing "0" strings not sufficient. It wrongly trimmed numbers with zeroes but no decimal point, like `10000` got trimmed to `1`. Nix uses `std::to_string` on the double, which according to https://en.cppreference.com/w/cpp/string/basic_string/to_string is equivalent to `std::sprintf(buf, "%f", value)`. https://en.cppreference.com/w/cpp/io/c/fprintf mentions this is treated like this: > Precision specifies the exact number of digits to appear after > the decimal point character. The default precision is 6. In the > alternative implementation decimal point character is written even if > no digits follow it. For infinity and not-a-number conversion style > see notes. This doesn't seem to be the case though, and Nix uses scientific notation in some cases. There's a whole bunch of strategies to determine which is a more compact notation, and which notation should be used for a given number. https://github.com/rust-lang/rust/issues/24556 provides some pointers into various rabbit holes for those interested. This gist seems to be that currently a different formatting is not exposed in rust directly, at least not for public consumption. There is the [lexical-core](https://github.com/Alexhuszagh/rust-lexical) crate though, which provides a way to format floats with various strategies and formats. Change our implementation of `TotalDisplay` for the `Value::Float` case to use that. We still need to do some post-processing, because Nix always adds the sign in scientific notation (and there's no way to configure lexical-core to do that), and lexical-core in some cases keeps the trailing zeros. Even with all that in place, there as a difference in `eval-okay- fromjson.nix` (from tvix-tests), which I couldn't get to work. I updated the fixture to a less problematic number. With this, the testsuite passes again, and does for the upcoming CL introducing builtins.fromTOML, and enabling the nix testsuite bits for it, too. Change-Id: Ie6fba5619e1d9fd7ce669a51594658b029057acc Reviewed-on: https://cl.tvl.fyi/c/depot/+/7922 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-01-24 19:27:20 +01:00
"lexical-core" = rec {
crateName = "lexical-core";
version = "0.8.5";
edition = "2018";
sha256 = "0ihf0x3vrk25fq3bv9q35m0xax0wmvwkh0j0pjm2yk4ddvh5vpic";
authors = [
"Alex Huszagh <ahuszagh@gmail.com>"
];
dependencies = [
{
name = "lexical-parse-float";
packageId = "lexical-parse-float";
optional = true;
usesDefaultFeatures = false;
}
{
name = "lexical-parse-integer";
packageId = "lexical-parse-integer";
optional = true;
usesDefaultFeatures = false;
}
{
name = "lexical-util";
packageId = "lexical-util";
usesDefaultFeatures = false;
}
{
name = "lexical-write-float";
packageId = "lexical-write-float";
optional = true;
usesDefaultFeatures = false;
}
{
name = "lexical-write-integer";
packageId = "lexical-write-integer";
optional = true;
usesDefaultFeatures = false;
}
];
features = {
"compact" = [ "lexical-write-integer/compact" "lexical-write-float/compact" "lexical-parse-integer/compact" "lexical-parse-float/compact" ];
"default" = [ "std" "write-integers" "write-floats" "parse-integers" "parse-floats" ];
"f128" = [ "lexical-util/f128" "lexical-parse-float/f128" "lexical-write-float/f128" ];
"f16" = [ "lexical-util/f16" "lexical-parse-float/f16" "lexical-write-float/f16" ];
"format" = [ "lexical-util/format" "lexical-parse-integer/format" "lexical-parse-float/format" "lexical-write-integer/format" "lexical-write-float/format" ];
"lexical-parse-float" = [ "dep:lexical-parse-float" ];
"lexical-parse-integer" = [ "dep:lexical-parse-integer" ];
"lexical-write-float" = [ "dep:lexical-write-float" ];
"lexical-write-integer" = [ "dep:lexical-write-integer" ];
"lint" = [ "lexical-util/lint" "lexical-write-integer/lint" "lexical-write-float/lint" "lexical-parse-integer/lint" "lexical-parse-float/lint" ];
"nightly" = [ "lexical-write-integer/nightly" "lexical-write-float/nightly" "lexical-parse-integer/nightly" "lexical-parse-float/nightly" ];
"parse-floats" = [ "lexical-parse-float" "parse" "floats" ];
"parse-integers" = [ "lexical-parse-integer" "parse" "integers" ];
"power-of-two" = [ "lexical-util/power-of-two" "lexical-write-integer/power-of-two" "lexical-write-float/power-of-two" "lexical-parse-integer/power-of-two" "lexical-parse-float/power-of-two" ];
"radix" = [ "lexical-util/radix" "lexical-write-integer/radix" "lexical-write-float/radix" "lexical-parse-integer/radix" "lexical-parse-float/radix" ];
"safe" = [ "lexical-write-integer/safe" "lexical-write-float/safe" "lexical-parse-integer/safe" "lexical-parse-float/safe" ];
"std" = [ "lexical-util/std" "lexical-write-integer/std" "lexical-write-float/std" "lexical-parse-integer/std" "lexical-parse-float/std" ];
"write-floats" = [ "lexical-write-float" "write" "floats" ];
"write-integers" = [ "lexical-write-integer" "write" "integers" ];
};
resolvedDefaultFeatures = [ "default" "floats" "format" "integers" "lexical-parse-float" "lexical-parse-integer" "lexical-write-float" "lexical-write-integer" "parse" "parse-floats" "parse-integers" "std" "write" "write-floats" "write-integers" ];
};
"lexical-parse-float" = rec {
crateName = "lexical-parse-float";
version = "0.8.5";
edition = "2018";
sha256 = "0py0gp8hlzcrlvjqmqlpl2v1as65iiqxq2xsabxvhc01pmg3lfv8";
authors = [
"Alex Huszagh <ahuszagh@gmail.com>"
];
dependencies = [
{
name = "lexical-parse-integer";
packageId = "lexical-parse-integer";
usesDefaultFeatures = false;
}
{
name = "lexical-util";
packageId = "lexical-util";
usesDefaultFeatures = false;
features = [ "parse-floats" ];
}
{
name = "static_assertions";
packageId = "static_assertions";
}
];
features = {
"compact" = [ "lexical-util/compact" "lexical-parse-integer/compact" ];
"default" = [ "std" ];
"f128" = [ "lexical-util/f128" ];
"f16" = [ "lexical-util/f16" ];
"format" = [ "lexical-util/format" "lexical-parse-integer/format" ];
"lint" = [ "lexical-util/lint" "lexical-parse-integer/lint" ];
"nightly" = [ "lexical-parse-integer/nightly" ];
"power-of-two" = [ "lexical-util/power-of-two" "lexical-parse-integer/power-of-two" ];
"radix" = [ "lexical-util/radix" "lexical-parse-integer/radix" "power-of-two" ];
"safe" = [ "lexical-parse-integer/safe" ];
"std" = [ "lexical-util/std" "lexical-parse-integer/std" ];
};
resolvedDefaultFeatures = [ "format" "std" ];
};
"lexical-parse-integer" = rec {
crateName = "lexical-parse-integer";
version = "0.8.6";
edition = "2018";
sha256 = "1sayji3mpvb2xsjq56qcq3whfz8px9a6fxk5v7v15hyhbr4982bd";
authors = [
"Alex Huszagh <ahuszagh@gmail.com>"
];
dependencies = [
{
name = "lexical-util";
packageId = "lexical-util";
usesDefaultFeatures = false;
features = [ "parse-integers" ];
}
{
name = "static_assertions";
packageId = "static_assertions";
}
];
features = {
"compact" = [ "lexical-util/compact" ];
"default" = [ "std" ];
"format" = [ "lexical-util/format" ];
"lint" = [ "lexical-util/lint" ];
"power-of-two" = [ "lexical-util/power-of-two" ];
"radix" = [ "lexical-util/radix" "power-of-two" ];
"std" = [ "lexical-util/std" ];
};
resolvedDefaultFeatures = [ "format" "std" ];
};
"lexical-util" = rec {
crateName = "lexical-util";
version = "0.8.5";
edition = "2018";
sha256 = "1z73qkv7yxhsbc4aiginn1dqmsj8jarkrdlyxc88g2gz2vzvjmaj";
authors = [
"Alex Huszagh <ahuszagh@gmail.com>"
];
dependencies = [
{
name = "static_assertions";
packageId = "static_assertions";
}
];
features = {
"default" = [ "std" ];
"f128" = [ "floats" ];
"f16" = [ "floats" ];
"parse-floats" = [ "parse" "floats" ];
"parse-integers" = [ "parse" "integers" ];
"radix" = [ "power-of-two" ];
"write-floats" = [ "write" "floats" ];
"write-integers" = [ "write" "integers" ];
};
resolvedDefaultFeatures = [ "floats" "format" "integers" "parse" "parse-floats" "parse-integers" "std" "write" "write-floats" "write-integers" ];
};
"lexical-write-float" = rec {
crateName = "lexical-write-float";
version = "0.8.5";
edition = "2018";
sha256 = "0qk825l0csvnksh9sywb51996cjc2bylq6rxjaiha7sqqjhvmjmc";
authors = [
"Alex Huszagh <ahuszagh@gmail.com>"
];
dependencies = [
{
name = "lexical-util";
packageId = "lexical-util";
usesDefaultFeatures = false;
features = [ "write-floats" ];
}
{
name = "lexical-write-integer";
packageId = "lexical-write-integer";
usesDefaultFeatures = false;
}
{
name = "static_assertions";
packageId = "static_assertions";
}
];
features = {
"compact" = [ "lexical-util/compact" "lexical-write-integer/compact" ];
"default" = [ "std" ];
"f128" = [ "lexical-util/f128" ];
"f16" = [ "lexical-util/f16" ];
"format" = [ "lexical-util/format" ];
"lint" = [ "lexical-util/lint" "lexical-write-integer/lint" ];
"nightly" = [ "lexical-write-integer/nightly" ];
"power-of-two" = [ "lexical-util/power-of-two" "lexical-write-integer/power-of-two" ];
"radix" = [ "lexical-util/radix" "lexical-write-integer/radix" "power-of-two" ];
"safe" = [ "lexical-write-integer/safe" ];
"std" = [ "lexical-util/std" "lexical-write-integer/std" ];
};
resolvedDefaultFeatures = [ "format" "std" ];
};
"lexical-write-integer" = rec {
crateName = "lexical-write-integer";
version = "0.8.5";
edition = "2018";
sha256 = "0ii4hmvqrg6pd4j9y1pkhkp0nw2wpivjzmljh6v6ca22yk8z7dp1";
authors = [
"Alex Huszagh <ahuszagh@gmail.com>"
];
dependencies = [
{
name = "lexical-util";
packageId = "lexical-util";
usesDefaultFeatures = false;
features = [ "write-integers" ];
}
{
name = "static_assertions";
packageId = "static_assertions";
}
];
features = {
"compact" = [ "lexical-util/compact" ];
"default" = [ "std" ];
"format" = [ "lexical-util/format" ];
"lint" = [ "lexical-util/lint" ];
"power-of-two" = [ "lexical-util/power-of-two" ];
"radix" = [ "lexical-util/radix" "power-of-two" ];
"std" = [ "lexical-util/std" ];
};
resolvedDefaultFeatures = [ "format" "std" ];
};
"libc" = rec {
crateName = "libc";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
version = "0.2.148";
edition = "2015";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
sha256 = "16rn9l8s5sj9n2jb2pw13ghqwa5nvjggkh9q3lp6vs1jfghp3p4w";
authors = [
"The Rust Project Developers"
];
features = {
"default" = [ "std" ];
"rustc-dep-of-std" = [ "align" "rustc-std-workspace-core" ];
"rustc-std-workspace-core" = [ "dep:rustc-std-workspace-core" ];
"use_std" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "extra_traits" "std" ];
};
"libm" = rec {
crateName = "libm";
version = "0.2.6";
edition = "2018";
sha256 = "1ywg7jfcgfv4jypxi3f6rpf7n9509ky695bfzy1fqhms7ymhi09l";
authors = [
"Jorge Aparicio <jorge@japaric.io>"
];
features = {
"musl-reference-tests" = [ "rand" ];
"rand" = [ "dep:rand" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"linux-raw-sys" = rec {
crateName = "linux-raw-sys";
version = "0.3.7";
edition = "2018";
sha256 = "17s7qr5h82blrxy29014zzhr30jcxcjc8r16v2p31rzcfal7xsgc";
authors = [
"Dan Gohman <dev@sunfishcode.online>"
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"default" = [ "std" "general" "errno" ];
"rustc-dep-of-std" = [ "core" "compiler_builtins" "no_std" ];
};
resolvedDefaultFeatures = [ "errno" "general" "ioctl" "no_std" ];
};
"lock_api" = rec {
crateName = "lock_api";
version = "0.4.9";
edition = "2018";
sha256 = "1py41vk243hwk345nhkn5nw0bd4m03gzjmprdjqq6rg5dwv12l23";
authors = [
"Amanieu d'Antras <amanieu@gmail.com>"
];
dependencies = [
{
name = "scopeguard";
packageId = "scopeguard";
usesDefaultFeatures = false;
}
];
buildDependencies = [
{
name = "autocfg";
packageId = "autocfg";
}
];
features = {
"owning_ref" = [ "dep:owning_ref" ];
"serde" = [ "dep:serde" ];
};
};
"log" = rec {
crateName = "log";
version = "0.4.17";
edition = "2015";
sha256 = "0biqlaaw1lsr8bpnmbcc0fvgjj34yy79ghqzyi0ali7vgil2xcdb";
authors = [
"The Rust Project Developers"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
];
features = {
"kv_unstable" = [ "value-bag" ];
"kv_unstable_serde" = [ "kv_unstable_std" "value-bag/serde" "serde" ];
"kv_unstable_std" = [ "std" "kv_unstable" "value-bag/error" ];
"kv_unstable_sval" = [ "kv_unstable" "value-bag/sval" "sval" ];
"serde" = [ "dep:serde" ];
"sval" = [ "dep:sval" ];
"value-bag" = [ "dep:value-bag" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"matchit" = rec {
crateName = "matchit";
version = "0.7.0";
edition = "2021";
sha256 = "0h7a1a57wamz0305dipj20shv2b5dw47jjp6dsgfaxmpmznlhwmq";
authors = [
"Ibraheem Ahmed <ibraheem@ibraheem.ca>"
];
features = { };
resolvedDefaultFeatures = [ "default" ];
};
"memchr" = rec {
crateName = "memchr";
version = "2.5.0";
edition = "2018";
sha256 = "0vanfk5mzs1g1syqnj03q8n0syggnhn55dq535h2wxr7rwpfbzrd";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
"bluss"
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"default" = [ "std" ];
"libc" = [ "dep:libc" ];
"rustc-dep-of-std" = [ "core" "compiler_builtins" ];
"use_std" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"memoffset 0.6.5" = rec {
crateName = "memoffset";
version = "0.6.5";
edition = "2015";
sha256 = "1kkrzll58a3ayn5zdyy9i1f1v3mx0xgl29x0chq614zazba638ss";
authors = [
"Gilad Naaman <gilad.naaman@gmail.com>"
];
buildDependencies = [
{
name = "autocfg";
packageId = "autocfg";
}
];
features = { };
resolvedDefaultFeatures = [ "default" ];
};
"memoffset 0.8.0" = rec {
crateName = "memoffset";
version = "0.8.0";
edition = "2015";
sha256 = "1qcdic88dhgw76pafgndpz04pig8il4advq978mxdxdwrydp276n";
authors = [
"Gilad Naaman <gilad.naaman@gmail.com>"
];
buildDependencies = [
{
name = "autocfg";
packageId = "autocfg";
}
];
features = { };
resolvedDefaultFeatures = [ "default" ];
};
"mime" = rec {
crateName = "mime";
version = "0.3.17";
edition = "2015";
sha256 = "16hkibgvb9klh0w0jk5crr5xv90l3wlf77ggymzjmvl1818vnxv8";
authors = [
"Sean McArthur <sean@seanmonstar.com>"
];
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
"miniz_oxide" = rec {
crateName = "miniz_oxide";
version = "0.7.1";
edition = "2018";
sha256 = "1ivl3rbbdm53bzscrd01g60l46lz5krl270487d8lhjvwl5hx0g7";
authors = [
"Frommi <daniil.liferenko@gmail.com>"
"oyvindln <oyvindln@users.noreply.github.com>"
];
dependencies = [
{
name = "adler";
packageId = "adler";
usesDefaultFeatures = false;
}
];
features = {
"alloc" = [ "dep:alloc" ];
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"default" = [ "with-alloc" ];
"rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins" "adler/rustc-dep-of-std" ];
"simd" = [ "simd-adler32" ];
"simd-adler32" = [ "dep:simd-adler32" ];
};
};
"mio" = rec {
crateName = "mio";
version = "0.8.6";
edition = "2018";
sha256 = "1ygx5chq81k3vk2bx722xwcwf2qydmm337jsnijgzd7mxx39m7av";
authors = [
"Carl Lerche <me@carllerche.com>"
"Thomas de Zeeuw <thomasdezeeuw@gmail.com>"
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: ("wasi" == target."os");
}
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "log";
packageId = "log";
}
{
name = "wasi";
packageId = "wasi";
target = { target, features }: ("wasi" == target."os");
}
{
name = "windows-sys";
packageId = "windows-sys 0.45.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_Foundation" "Win32_Networking_WinSock" "Win32_Storage_FileSystem" "Win32_System_IO" "Win32_System_WindowsProgramming" ];
}
];
features = {
"os-ext" = [ "os-poll" "windows-sys/Win32_System_Pipes" "windows-sys/Win32_Security" ];
};
resolvedDefaultFeatures = [ "default" "net" "os-ext" "os-poll" ];
};
"multimap" = rec {
crateName = "multimap";
version = "0.8.3";
edition = "2015";
sha256 = "0sicyz4n500vdhgcxn4g8jz97cp1ijir1rnbgph3pmx9ckz4dkp5";
authors = [
"Håvar Nøvik <havar.novik@gmail.com>"
];
features = {
"default" = [ "serde_impl" ];
"serde" = [ "dep:serde" ];
"serde_impl" = [ "serde" ];
};
};
"nibble_vec" = rec {
crateName = "nibble_vec";
version = "0.1.0";
edition = "2018";
sha256 = "0hsdp3s724s30hkqz74ky6sqnadhp2xwcj1n1hzy4vzkz4yxi9bp";
authors = [
"Michael Sproul <micsproul@gmail.com>"
];
dependencies = [
{
name = "smallvec";
packageId = "smallvec";
}
];
};
"nix 0.24.3" = rec {
crateName = "nix";
version = "0.24.3";
edition = "2018";
sha256 = "0sc0yzdl51b49bqd9l9cmimp1sw1hxb8iyv4d35ww6d7m5rfjlps";
authors = [
"The nix-rust Project Developers"
];
dependencies = [
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "libc";
packageId = "libc";
features = [ "extra_traits" ];
}
{
name = "memoffset";
packageId = "memoffset 0.6.5";
optional = true;
target = { target, features }: (!("redox" == target."os"));
}
];
features = {
"default" = [ "acct" "aio" "dir" "env" "event" "feature" "fs" "hostname" "inotify" "ioctl" "kmod" "mman" "mount" "mqueue" "net" "personality" "poll" "process" "pthread" "ptrace" "quota" "reboot" "resource" "sched" "signal" "socket" "term" "time" "ucontext" "uio" "user" "zerocopy" ];
"dir" = [ "fs" ];
"memoffset" = [ "dep:memoffset" ];
"mount" = [ "uio" ];
"mqueue" = [ "fs" ];
"net" = [ "socket" ];
"ptrace" = [ "process" ];
"sched" = [ "process" ];
"signal" = [ "process" ];
"socket" = [ "memoffset" ];
"ucontext" = [ "signal" ];
"user" = [ "feature" ];
"zerocopy" = [ "fs" "uio" ];
};
resolvedDefaultFeatures = [ "acct" "aio" "default" "dir" "env" "event" "feature" "fs" "hostname" "inotify" "ioctl" "kmod" "memoffset" "mman" "mount" "mqueue" "net" "personality" "poll" "process" "pthread" "ptrace" "quota" "reboot" "resource" "sched" "signal" "socket" "term" "time" "ucontext" "uio" "user" "zerocopy" ];
};
"nix 0.25.1" = rec {
crateName = "nix";
version = "0.25.1";
edition = "2018";
sha256 = "1r4vyp5g1lxzpig31bkrhxdf2bggb4nvk405x5gngzfvwxqgyipk";
authors = [
"The nix-rust Project Developers"
];
dependencies = [
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "libc";
packageId = "libc";
features = [ "extra_traits" ];
}
];
buildDependencies = [
{
name = "autocfg";
packageId = "autocfg";
}
];
features = {
"aio" = [ "pin-utils" ];
"default" = [ "acct" "aio" "dir" "env" "event" "feature" "fs" "hostname" "inotify" "ioctl" "kmod" "mman" "mount" "mqueue" "net" "personality" "poll" "process" "pthread" "ptrace" "quota" "reboot" "resource" "sched" "signal" "socket" "term" "time" "ucontext" "uio" "user" "zerocopy" ];
"dir" = [ "fs" ];
"memoffset" = [ "dep:memoffset" ];
"mount" = [ "uio" ];
"mqueue" = [ "fs" ];
"net" = [ "socket" ];
"pin-utils" = [ "dep:pin-utils" ];
"ptrace" = [ "process" ];
"sched" = [ "process" ];
"signal" = [ "process" ];
"socket" = [ "memoffset" ];
"ucontext" = [ "signal" ];
"user" = [ "feature" ];
"zerocopy" = [ "fs" "uio" ];
};
resolvedDefaultFeatures = [ "fs" "ioctl" "poll" "process" "signal" "term" ];
};
"nix-cli" = rec {
crateName = "nix-cli";
version = "0.1.0";
edition = "2021";
crateBin = [
{
name = "nix-cli";
path = "src/main.rs";
requiredFeatures = [ ];
}
{
name = "nix-store";
path = "src/bin/nix-store.rs";
requiredFeatures = [ ];
}
];
# 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 = ./nix_cli; }
else ./nix_cli;
dependencies = [
{
name = "clap";
packageId = "clap 4.2.7";
}
{
name = "tempfile";
packageId = "tempfile";
}
];
features = { };
resolvedDefaultFeatures = [ "integration_tests" ];
};
"nix-compat" = rec {
crateName = "nix-compat";
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 = ./nix-compat; }
else ./nix-compat;
dependencies = [
{
name = "bstr";
packageId = "bstr";
features = [ "alloc" "unicode" "serde" ];
}
{
name = "data-encoding";
packageId = "data-encoding";
}
{
name = "serde";
packageId = "serde";
features = [ "derive" ];
}
{
name = "serde_json";
packageId = "serde_json";
}
{
name = "sha2";
packageId = "sha2";
}
{
name = "thiserror";
packageId = "thiserror";
}
];
devDependencies = [
{
name = "serde_json";
packageId = "serde_json";
}
{
name = "test-case";
packageId = "test-case";
}
{
name = "test-generator";
packageId = "test-generator";
}
];
};
"nom8" = rec {
crateName = "nom8";
version = "0.2.0";
edition = "2018";
sha256 = "1y6jzabxyrl05vxnh63r66ac2fh0symg5fnynxm4ii3zkif580df";
dependencies = [
{
name = "memchr";
packageId = "memchr";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "std" ];
"std" = [ "alloc" "memchr/std" ];
"unstable-doc" = [ "alloc" "std" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
};
"nu-ansi-term" = rec {
crateName = "nu-ansi-term";
version = "0.46.0";
edition = "2018";
sha256 = "115sywxh53p190lyw97alm14nc004qj5jm5lvdj608z84rbida3p";
authors = [
"ogham@bsago.me"
"Ryan Scheel (Havvy) <ryan.havvy@gmail.com>"
"Josh Triplett <josh@joshtriplett.org>"
"The Nushell Project Developers"
];
dependencies = [
{
name = "overload";
packageId = "overload";
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: ("windows" == target."os");
features = [ "consoleapi" "errhandlingapi" "fileapi" "handleapi" "processenv" ];
}
];
features = {
"derive_serde_style" = [ "serde" ];
"serde" = [ "dep:serde" ];
};
};
"num-traits" = rec {
crateName = "num-traits";
version = "0.2.15";
edition = "2015";
sha256 = "1kfdqqw2ndz0wx2j75v9nbjx7d3mh3150zs4p5595y02rwsdx3jp";
authors = [
"The Rust Project Developers"
];
dependencies = [
{
name = "libm";
packageId = "libm";
optional = true;
}
];
buildDependencies = [
{
name = "autocfg";
packageId = "autocfg";
}
];
features = {
"default" = [ "std" ];
"libm" = [ "dep:libm" ];
};
resolvedDefaultFeatures = [ "default" "libm" "std" ];
};
"num_cpus" = rec {
crateName = "num_cpus";
version = "1.15.0";
edition = "2015";
sha256 = "0fsrjy3arnbcl41vz0gppya8d7d24cpkjgfflr3v8pivl4nrxb0g";
authors = [
"Sean McArthur <sean@seanmonstar.com>"
];
dependencies = [
{
name = "hermit-abi";
packageId = "hermit-abi 0.2.6";
target = { target, features }: ((("x86_64" == target."arch") || ("aarch64" == target."arch")) && ("hermit" == target."os"));
}
{
name = "libc";
packageId = "libc";
target = { target, features }: (!(target."windows" or false));
}
];
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
"object" = rec {
crateName = "object";
version = "0.32.1";
edition = "2018";
sha256 = "1c02x4kvqpnl3wn7gz9idm4jrbirbycyqjgiw6lm1g9k77fzkxcw";
dependencies = [
{
name = "memchr";
packageId = "memchr";
usesDefaultFeatures = false;
}
];
features = {
"all" = [ "read" "write" "std" "compression" "wasm" ];
"alloc" = [ "dep:alloc" ];
"compiler_builtins" = [ "dep:compiler_builtins" ];
"compression" = [ "dep:flate2" "dep:ruzstd" "std" ];
"core" = [ "dep:core" ];
"default" = [ "read" "compression" ];
"doc" = [ "read_core" "write_std" "std" "compression" "archive" "coff" "elf" "macho" "pe" "wasm" "xcoff" ];
"pe" = [ "coff" ];
"read" = [ "read_core" "archive" "coff" "elf" "macho" "pe" "xcoff" "unaligned" ];
"rustc-dep-of-std" = [ "core" "compiler_builtins" "alloc" "memchr/rustc-dep-of-std" ];
"std" = [ "memchr/std" ];
"unstable-all" = [ "all" "unstable" ];
"wasm" = [ "dep:wasmparser" ];
"write" = [ "write_std" "coff" "elf" "macho" "pe" "xcoff" ];
"write_core" = [ "dep:crc32fast" "dep:indexmap" "dep:hashbrown" ];
"write_std" = [ "write_core" "std" "indexmap?/std" "crc32fast?/std" ];
};
resolvedDefaultFeatures = [ "archive" "coff" "elf" "macho" "pe" "read_core" "unaligned" ];
};
"once_cell" = rec {
crateName = "once_cell";
version = "1.17.1";
edition = "2021";
sha256 = "1lrsy9c5ikf2iwxr4iwgd3rlq9mg8alh0np1g8abnvp1k4151rdp";
authors = [
"Aleksey Kladov <aleksey.kladov@gmail.com>"
];
features = {
"alloc" = [ "race" ];
"atomic-polyfill" = [ "critical-section" ];
"atomic_polyfill" = [ "dep:atomic_polyfill" ];
"critical-section" = [ "critical_section" "atomic_polyfill" ];
"critical_section" = [ "dep:critical_section" ];
"default" = [ "std" ];
"parking_lot" = [ "parking_lot_core" ];
"parking_lot_core" = [ "dep:parking_lot_core" ];
"std" = [ "alloc" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "race" "std" ];
};
"oorandom" = rec {
crateName = "oorandom";
version = "11.1.3";
edition = "2018";
sha256 = "0xdm4vd89aiwnrk1xjwzklnchjqvib4klcihlc2bsd4x50mbrc8a";
authors = [
"Simon Heath <icefox@dreamquest.io>"
];
};
"os_str_bytes" = rec {
crateName = "os_str_bytes";
version = "6.5.0";
edition = "2021";
sha256 = "0rz2711gl575ng6vm9a97q42wqnf4wk1165wn221jb8gn17z9vff";
authors = [
"dylni"
];
features = {
"default" = [ "memchr" "raw_os_str" ];
"memchr" = [ "dep:memchr" ];
"print_bytes" = [ "dep:print_bytes" ];
"uniquote" = [ "dep:uniquote" ];
};
resolvedDefaultFeatures = [ "raw_os_str" ];
};
"output_vt100" = rec {
crateName = "output_vt100";
version = "0.1.3";
edition = "2018";
sha256 = "0rpvpiq7gkyvvwyp9sk0zxhbk99ldlrv5q3ycr03wkmbxgx270k2";
authors = [
"Phuntsok Drak-pa <phundrak@phundrak.fr>"
];
dependencies = [
{
name = "winapi";
packageId = "winapi";
features = [ "winuser" "winbase" "consoleapi" "processenv" ];
}
];
};
"overload" = rec {
crateName = "overload";
version = "0.1.1";
edition = "2018";
sha256 = "0fdgbaqwknillagy1xq7xfgv60qdbk010diwl7s1p0qx7hb16n5i";
authors = [
"Daniel Salvadori <danaugrs@gmail.com>"
];
};
"parking_lot 0.11.2" = rec {
crateName = "parking_lot";
version = "0.11.2";
edition = "2018";
sha256 = "16gzf41bxmm10x82bla8d6wfppy9ym3fxsmdjyvn61m66s0bf5vx";
authors = [
"Amanieu d'Antras <amanieu@gmail.com>"
];
dependencies = [
{
name = "instant";
packageId = "instant";
}
{
name = "lock_api";
packageId = "lock_api";
}
{
name = "parking_lot_core";
packageId = "parking_lot_core 0.8.6";
}
];
features = {
"arc_lock" = [ "lock_api/arc_lock" ];
"deadlock_detection" = [ "parking_lot_core/deadlock_detection" ];
"nightly" = [ "parking_lot_core/nightly" "lock_api/nightly" ];
"owning_ref" = [ "lock_api/owning_ref" ];
"serde" = [ "lock_api/serde" ];
"stdweb" = [ "instant/stdweb" ];
"wasm-bindgen" = [ "instant/wasm-bindgen" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"parking_lot 0.12.1" = rec {
crateName = "parking_lot";
version = "0.12.1";
edition = "2018";
sha256 = "13r2xk7mnxfc5g0g6dkdxqdqad99j7s7z8zhzz4npw5r0g0v4hip";
authors = [
"Amanieu d'Antras <amanieu@gmail.com>"
];
dependencies = [
{
name = "lock_api";
packageId = "lock_api";
}
{
name = "parking_lot_core";
packageId = "parking_lot_core 0.9.8";
}
];
features = {
"arc_lock" = [ "lock_api/arc_lock" ];
"deadlock_detection" = [ "parking_lot_core/deadlock_detection" ];
"nightly" = [ "parking_lot_core/nightly" "lock_api/nightly" ];
"owning_ref" = [ "lock_api/owning_ref" ];
"serde" = [ "lock_api/serde" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"parking_lot_core 0.8.6" = rec {
crateName = "parking_lot_core";
version = "0.8.6";
edition = "2018";
sha256 = "1p2nfcbr0b9lm9rglgm28k6mwyjwgm4knipsmqbgqaxdy3kcz8k0";
authors = [
"Amanieu d'Antras <amanieu@gmail.com>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "instant";
packageId = "instant";
}
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "redox_syscall";
packageId = "redox_syscall 0.2.16";
target = { target, features }: ("redox" == target."os");
}
{
name = "smallvec";
packageId = "smallvec";
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "winnt" "ntstatus" "minwindef" "winerror" "winbase" "errhandlingapi" "handleapi" ];
}
];
features = {
"backtrace" = [ "dep:backtrace" ];
"deadlock_detection" = [ "petgraph" "thread-id" "backtrace" ];
"petgraph" = [ "dep:petgraph" ];
"thread-id" = [ "dep:thread-id" ];
};
};
"parking_lot_core 0.9.8" = rec {
crateName = "parking_lot_core";
version = "0.9.8";
edition = "2018";
sha256 = "0ixlak319bpzldq20yvyfqk0y1vi736zxbw101jvzjp7by30rw4k";
authors = [
"Amanieu d'Antras <amanieu@gmail.com>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "redox_syscall";
packageId = "redox_syscall 0.3.5";
target = { target, features }: ("redox" == target."os");
}
{
name = "smallvec";
packageId = "smallvec";
}
{
name = "windows-targets";
packageId = "windows-targets 0.48.0";
target = { target, features }: (target."windows" or false);
}
];
features = {
"backtrace" = [ "dep:backtrace" ];
"deadlock_detection" = [ "petgraph" "thread-id" "backtrace" ];
"petgraph" = [ "dep:petgraph" ];
"thread-id" = [ "dep:thread-id" ];
};
};
"path-clean" = rec {
crateName = "path-clean";
version = "0.1.0";
edition = "2015";
sha256 = "1pcgqxw0mgg3ha5hi5xkjhyjf488bw5rw1g3qlr9awbq4szh3fpc";
authors = [
"Dan Reeves <hey@danreev.es>"
];
};
"percent-encoding" = rec {
crateName = "percent-encoding";
version = "2.3.0";
edition = "2018";
sha256 = "152slflmparkh27hprw62sph8rv77wckzhwl2dhqk6bf563lfalv";
authors = [
"The rust-url developers"
];
features = {
"default" = [ "std" ];
"std" = [ "alloc" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
};
"petgraph" = rec {
crateName = "petgraph";
version = "0.6.3";
edition = "2018";
sha256 = "1912xw827flj8mzqm62jcbg0cv54qfhzm48c13ilzr9px67d5msd";
authors = [
"bluss"
"mitchmindtree"
];
dependencies = [
{
name = "fixedbitset";
packageId = "fixedbitset";
usesDefaultFeatures = false;
}
{
name = "indexmap";
packageId = "indexmap";
features = [ "std" ];
}
];
features = {
"all" = [ "unstable" "quickcheck" "matrix_graph" "stable_graph" "graphmap" ];
"default" = [ "graphmap" "stable_graph" "matrix_graph" ];
"quickcheck" = [ "dep:quickcheck" ];
"serde" = [ "dep:serde" ];
"serde-1" = [ "serde" "serde_derive" ];
"serde_derive" = [ "dep:serde_derive" ];
"unstable" = [ "generate" ];
};
};
"pin-project" = rec {
crateName = "pin-project";
version = "1.0.12";
edition = "2018";
sha256 = "1k3f9jkia3idxl2pqxamszwnl89dk52fa4jqj3p7zmmwnq4scadd";
dependencies = [
{
name = "pin-project-internal";
packageId = "pin-project-internal";
}
];
};
"pin-project-internal" = rec {
crateName = "pin-project-internal";
version = "1.0.12";
edition = "2018";
sha256 = "0maa6icn7rdfy4xvgfaq7m7bwpw9f19wg76f1ncsiixd0lgdp6q6";
procMacro = true;
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "full" "visit-mut" ];
}
];
};
"pin-project-lite" = rec {
crateName = "pin-project-lite";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
version = "0.2.13";
edition = "2018";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
sha256 = "0n0bwr5qxlf0mhn2xkl36sy55118s9qmvx2yl5f3ixkb007lbywa";
};
"pin-utils" = rec {
crateName = "pin-utils";
version = "0.1.0";
edition = "2018";
sha256 = "117ir7vslsl2z1a7qzhws4pd01cg2d3338c47swjyvqv2n60v1wb";
authors = [
"Josef Brandl <mail@josefbrandl.de>"
];
};
"plotters" = rec {
crateName = "plotters";
version = "0.3.4";
edition = "2018";
sha256 = "15xzbxnjcfsaf8lac846lgi4xmn9k18m9k8gqm35aaa2wqwvcf15";
authors = [
"Hao Hou <haohou302@gmail.com>"
];
dependencies = [
{
name = "num-traits";
packageId = "num-traits";
}
{
name = "plotters-backend";
packageId = "plotters-backend";
}
{
name = "plotters-svg";
packageId = "plotters-svg";
optional = true;
}
{
name = "wasm-bindgen";
packageId = "wasm-bindgen";
target = { target, features }: (("wasm32" == target."arch") && (!("wasi" == target."os")));
}
{
name = "web-sys";
packageId = "web-sys";
target = { target, features }: (("wasm32" == target."arch") && (!("wasi" == target."os")));
features = [ "Document" "DomRect" "Element" "HtmlElement" "Node" "Window" "HtmlCanvasElement" "CanvasRenderingContext2d" ];
}
];
features = {
"all_elements" = [ "errorbar" "candlestick" "boxplot" "histogram" ];
"all_series" = [ "area_series" "line_series" "point_series" "surface_series" ];
"bitmap_backend" = [ "plotters-bitmap" "ttf" ];
"bitmap_encoder" = [ "plotters-bitmap/image_encoder" ];
"bitmap_gif" = [ "plotters-bitmap/gif_backend" ];
"chrono" = [ "dep:chrono" ];
"datetime" = [ "chrono" ];
"default" = [ "bitmap_backend" "bitmap_encoder" "bitmap_gif" "svg_backend" "chrono" "ttf" "image" "deprecated_items" "all_series" "all_elements" "full_palette" ];
"evcxr" = [ "svg_backend" ];
"evcxr_bitmap" = [ "evcxr" "bitmap_backend" "plotters-svg/bitmap_encoder" ];
"font-kit" = [ "dep:font-kit" ];
"fontconfig-dlopen" = [ "font-kit/source-fontconfig-dlopen" ];
"image" = [ "dep:image" ];
"lazy_static" = [ "dep:lazy_static" ];
"pathfinder_geometry" = [ "dep:pathfinder_geometry" ];
"plotters-bitmap" = [ "dep:plotters-bitmap" ];
"plotters-svg" = [ "dep:plotters-svg" ];
"svg_backend" = [ "plotters-svg" ];
"ttf" = [ "font-kit" "ttf-parser" "lazy_static" "pathfinder_geometry" ];
"ttf-parser" = [ "dep:ttf-parser" ];
};
resolvedDefaultFeatures = [ "area_series" "line_series" "plotters-svg" "svg_backend" ];
};
"plotters-backend" = rec {
crateName = "plotters-backend";
version = "0.3.4";
edition = "2018";
sha256 = "0hl1x8dqrzsjw1vabyw48gzp7g6z8rlyjqjc4b0wvzl1cdhjhchr";
authors = [
"Hao Hou <haohou302@gmail.com>"
];
};
"plotters-svg" = rec {
crateName = "plotters-svg";
version = "0.3.3";
edition = "2018";
sha256 = "0vx5wmm5mxip3fm4l67l3wcvv3jwph4c70zpd3kdmqdab4kiva7r";
authors = [
"Hao Hou <haohou302@gmail.com>"
];
dependencies = [
{
name = "plotters-backend";
packageId = "plotters-backend";
}
];
features = {
"bitmap_encoder" = [ "image" ];
"image" = [ "dep:image" ];
};
};
"ppv-lite86" = rec {
crateName = "ppv-lite86";
version = "0.2.17";
edition = "2018";
sha256 = "1pp6g52aw970adv3x2310n7glqnji96z0a9wiamzw89ibf0ayh2v";
authors = [
"The CryptoCorrosion Contributors"
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "simd" "std" ];
};
"pretty_assertions" = rec {
crateName = "pretty_assertions";
version = "1.3.0";
edition = "2018";
sha256 = "0mgp1ajl3fdc55h989ph48znnk86m41j9dqnpg80yy5a435rnpm2";
authors = [
"Colin Kiegel <kiegel@gmx.de>"
"Florent Fayolle <florent.fayolle69@gmail.com>"
"Tom Milligan <code@tommilligan.net>"
];
dependencies = [
{
name = "ctor";
packageId = "ctor";
target = { target, features }: (target."windows" or false);
}
{
name = "diff";
packageId = "diff";
}
{
name = "output_vt100";
packageId = "output_vt100";
target = { target, features }: (target."windows" or false);
}
{
name = "yansi";
packageId = "yansi";
}
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"prettyplease" = rec {
crateName = "prettyplease";
version = "0.1.25";
edition = "2021";
sha256 = "11lskniv8pf8y8bn4dc3nmjapfhnibxbm5gamp2ad9qna3lld1kc";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
usesDefaultFeatures = false;
}
{
name = "syn";
packageId = "syn 1.0.109";
usesDefaultFeatures = false;
features = [ "full" ];
}
];
devDependencies = [
{
name = "syn";
packageId = "syn 1.0.109";
usesDefaultFeatures = false;
features = [ "parsing" ];
}
];
features = {
"verbatim" = [ "syn/parsing" ];
};
};
"proc-macro-error" = rec {
crateName = "proc-macro-error";
version = "1.0.4";
edition = "2018";
sha256 = "1373bhxaf0pagd8zkyd03kkx6bchzf6g0dkwrwzsnal9z47lj9fs";
authors = [
"CreepySkeleton <creepy-skeleton@yandex.ru>"
];
dependencies = [
{
name = "proc-macro-error-attr";
packageId = "proc-macro-error-attr";
}
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
optional = true;
usesDefaultFeatures = false;
}
];
buildDependencies = [
{
name = "version_check";
packageId = "version_check";
}
];
features = {
"default" = [ "syn-error" ];
"syn" = [ "dep:syn" ];
"syn-error" = [ "syn" ];
};
resolvedDefaultFeatures = [ "default" "syn" "syn-error" ];
};
"proc-macro-error-attr" = rec {
crateName = "proc-macro-error-attr";
version = "1.0.4";
edition = "2018";
sha256 = "0sgq6m5jfmasmwwy8x4mjygx5l7kp8s4j60bv25ckv2j1qc41gm1";
procMacro = true;
authors = [
"CreepySkeleton <creepy-skeleton@yandex.ru>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
];
buildDependencies = [
{
name = "version_check";
packageId = "version_check";
}
];
};
"proc-macro2 0.4.30" = rec {
crateName = "proc-macro2";
version = "0.4.30";
edition = "2015";
sha256 = "0nd71fl24sys066jrha6j7i34nfkjv44yzw8yww9742wmc8j0gfg";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
dependencies = [
{
name = "unicode-xid";
packageId = "unicode-xid";
}
];
features = {
"default" = [ "proc-macro" ];
};
resolvedDefaultFeatures = [ "default" "proc-macro" ];
};
"proc-macro2 1.0.56" = rec {
crateName = "proc-macro2";
version = "1.0.56";
edition = "2018";
sha256 = "0ddlk2c7s9c0fhmf8cd0wikayicv9xrm9ck9vzgg9w86rnqbsqrb";
authors = [
"David Tolnay <dtolnay@gmail.com>"
"Alex Crichton <alex@alexcrichton.com>"
];
dependencies = [
{
name = "unicode-ident";
packageId = "unicode-ident";
}
];
features = {
"default" = [ "proc-macro" ];
};
resolvedDefaultFeatures = [ "default" "proc-macro" ];
};
"proptest" = rec {
crateName = "proptest";
version = "1.1.0";
edition = "2018";
sha256 = "0w5s3wwchd3i6m15lsbsk3r3y25d1gwn13m6a185ks8w06cbiw99";
authors = [
"Jason Lingle"
];
dependencies = [
{
name = "bit-set";
packageId = "bit-set";
optional = true;
}
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "byteorder";
packageId = "byteorder";
usesDefaultFeatures = false;
}
{
name = "lazy_static";
packageId = "lazy_static";
optional = true;
}
{
name = "num-traits";
packageId = "num-traits";
usesDefaultFeatures = false;
features = [ "libm" ];
}
{
name = "quick-error";
packageId = "quick-error 2.0.1";
optional = true;
}
{
name = "rand";
packageId = "rand 0.8.5";
usesDefaultFeatures = false;
features = [ "alloc" ];
}
{
name = "rand_chacha";
packageId = "rand_chacha";
usesDefaultFeatures = false;
}
{
name = "rand_xorshift";
packageId = "rand_xorshift";
}
{
name = "regex-syntax";
packageId = "regex-syntax 0.6.29";
optional = true;
}
{
name = "rusty-fork";
packageId = "rusty-fork";
optional = true;
usesDefaultFeatures = false;
}
{
name = "tempfile";
packageId = "tempfile";
optional = true;
}
{
name = "unarray";
packageId = "unarray";
}
];
features = {
"bit-set" = [ "dep:bit-set" ];
"default" = [ "std" "fork" "timeout" "bit-set" "break-dead-code" ];
"default-code-coverage" = [ "std" "fork" "timeout" "bit-set" ];
"fork" = [ "std" "rusty-fork" "tempfile" ];
"hardware-rng" = [ "x86" ];
"lazy_static" = [ "dep:lazy_static" ];
"quick-error" = [ "dep:quick-error" ];
"regex-syntax" = [ "dep:regex-syntax" ];
"rusty-fork" = [ "dep:rusty-fork" ];
"std" = [ "rand/std" "byteorder/std" "lazy_static" "quick-error" "regex-syntax" "num-traits/std" ];
"tempfile" = [ "dep:tempfile" ];
"timeout" = [ "fork" "rusty-fork/timeout" ];
"x86" = [ "dep:x86" ];
};
resolvedDefaultFeatures = [ "alloc" "bit-set" "break-dead-code" "default" "fork" "lazy_static" "quick-error" "regex-syntax" "rusty-fork" "std" "tempfile" "timeout" ];
};
"prost" = rec {
crateName = "prost";
version = "0.11.9";
edition = "2021";
sha256 = "1kc1hva2h894hc0zf6r4r8fsxfpazf7xn5rj3jya9sbrsyhym0hb";
authors = [
"Dan Burkert <dan@danburkert.com>"
"Lucio Franco <luciofranco14@gmail.com"
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
usesDefaultFeatures = false;
}
{
name = "prost-derive";
packageId = "prost-derive";
optional = true;
}
];
features = {
"default" = [ "prost-derive" "std" ];
"prost-derive" = [ "dep:prost-derive" ];
};
resolvedDefaultFeatures = [ "default" "prost-derive" "std" ];
};
"prost-build" = rec {
crateName = "prost-build";
version = "0.11.9";
edition = "2021";
sha256 = "0w5jx97q96ydhkg67wx3lb11kfy8195c56g0476glzws5iak758i";
authors = [
"Dan Burkert <dan@danburkert.com>"
"Lucio Franco <luciofranco14@gmail.com>"
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
usesDefaultFeatures = false;
}
{
name = "heck";
packageId = "heck";
}
{
name = "itertools";
packageId = "itertools";
usesDefaultFeatures = false;
features = [ "use_alloc" ];
}
{
name = "lazy_static";
packageId = "lazy_static";
}
{
name = "log";
packageId = "log";
}
{
name = "multimap";
packageId = "multimap";
usesDefaultFeatures = false;
}
{
name = "petgraph";
packageId = "petgraph";
usesDefaultFeatures = false;
}
{
name = "prettyplease";
packageId = "prettyplease";
optional = true;
}
{
name = "prost";
packageId = "prost";
usesDefaultFeatures = false;
}
{
name = "prost-types";
packageId = "prost-types";
usesDefaultFeatures = false;
}
{
name = "regex";
packageId = "regex";
usesDefaultFeatures = false;
features = [ "std" "unicode-bool" ];
}
{
name = "syn";
packageId = "syn 1.0.109";
optional = true;
features = [ "full" ];
}
{
name = "tempfile";
packageId = "tempfile";
}
{
name = "which";
packageId = "which";
}
];
features = {
"cleanup-markdown" = [ "pulldown-cmark" "pulldown-cmark-to-cmark" ];
"default" = [ "format" ];
"format" = [ "prettyplease" "syn" ];
"prettyplease" = [ "dep:prettyplease" ];
"pulldown-cmark" = [ "dep:pulldown-cmark" ];
"pulldown-cmark-to-cmark" = [ "dep:pulldown-cmark-to-cmark" ];
"syn" = [ "dep:syn" ];
};
resolvedDefaultFeatures = [ "default" "format" "prettyplease" "syn" ];
};
"prost-derive" = rec {
crateName = "prost-derive";
version = "0.11.9";
edition = "2021";
sha256 = "1d3mw2s2jba1f7wcjmjd6ha2a255p2rmynxhm1nysv9w1z8xilp5";
procMacro = true;
authors = [
"Dan Burkert <dan@danburkert.com>"
"Lucio Franco <luciofranco14@gmail.com>"
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "anyhow";
packageId = "anyhow";
}
{
name = "itertools";
packageId = "itertools";
usesDefaultFeatures = false;
features = [ "use_alloc" ];
}
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "extra-traits" ];
}
];
};
"prost-types" = rec {
crateName = "prost-types";
version = "0.11.9";
edition = "2021";
sha256 = "04ryk38sqkp2nf4dgdqdfbgn6zwwvjraw6hqq6d9a6088shj4di1";
authors = [
"Dan Burkert <dan@danburkert.com>"
"Lucio Franco <luciofranco14@gmail.com"
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "prost";
packageId = "prost";
usesDefaultFeatures = false;
features = [ "prost-derive" ];
}
];
features = {
"default" = [ "std" ];
"std" = [ "prost/std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"quick-error 1.2.3" = rec {
crateName = "quick-error";
version = "1.2.3";
edition = "2015";
sha256 = "1q6za3v78hsspisc197bg3g7rpc989qycy8ypr8ap8igv10ikl51";
authors = [
"Paul Colomiets <paul@colomiets.name>"
"Colin Kiegel <kiegel@gmx.de>"
];
};
"quick-error 2.0.1" = rec {
crateName = "quick-error";
version = "2.0.1";
edition = "2018";
sha256 = "18z6r2rcjvvf8cn92xjhm2qc3jpd1ljvcbf12zv0k9p565gmb4x9";
authors = [
"Paul Colomiets <paul@colomiets.name>"
"Colin Kiegel <kiegel@gmx.de>"
];
};
"quote 0.6.13" = rec {
crateName = "quote";
version = "0.6.13";
edition = "2015";
sha256 = "1qgqq48jymp5h4y082aanf25hrw6bpb678xh3zw993qfhxmkpqkc";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 0.4.30";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "proc-macro" ];
"proc-macro" = [ "proc-macro2/proc-macro" ];
};
resolvedDefaultFeatures = [ "default" "proc-macro" ];
};
"quote 1.0.26" = rec {
crateName = "quote";
version = "1.0.26";
edition = "2018";
sha256 = "1z521piwggwzs0rj4wjx4ma6af1g6f1h5dkp382y5akqyx5sy924";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "proc-macro" ];
"proc-macro" = [ "proc-macro2/proc-macro" ];
};
resolvedDefaultFeatures = [ "default" "proc-macro" ];
};
"radix_trie" = rec {
crateName = "radix_trie";
version = "0.2.1";
edition = "2018";
sha256 = "1zaq3im5ss03w91ij11cj97vvzc5y1f3064d9pi2ysnwziww2sf0";
authors = [
"Michael Sproul <micsproul@gmail.com>"
];
dependencies = [
{
name = "endian-type";
packageId = "endian-type";
}
{
name = "nibble_vec";
packageId = "nibble_vec";
}
];
features = {
"serde" = [ "dep:serde" ];
};
};
"rand 0.4.6" = rec {
crateName = "rand";
version = "0.4.6";
edition = "2015";
sha256 = "14qjfv3gggzhnma20k0sc1jf8y6pplsaq7n1j9ls5c8kf2wl0a2m";
authors = [
"The Rust Project Developers"
];
dependencies = [
{
name = "fuchsia-cprng";
packageId = "fuchsia-cprng";
target = { target, features }: ("fuchsia" == target."os");
}
{
name = "libc";
packageId = "libc";
optional = true;
target = { target, features }: (target."unix" or false);
}
{
name = "rand_core";
packageId = "rand_core 0.3.1";
usesDefaultFeatures = false;
target = { target, features }: ("sgx" == target."env");
}
{
name = "rdrand";
packageId = "rdrand";
target = { target, features }: ("sgx" == target."env");
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "minwindef" "ntsecapi" "profileapi" "winnt" ];
}
];
features = {
"default" = [ "std" ];
"libc" = [ "dep:libc" ];
"nightly" = [ "i128_support" ];
"std" = [ "libc" ];
};
resolvedDefaultFeatures = [ "default" "libc" "std" ];
};
"rand 0.8.5" = rec {
crateName = "rand";
version = "0.8.5";
edition = "2018";
sha256 = "013l6931nn7gkc23jz5mm3qdhf93jjf0fg64nz2lp4i51qd8vbrl";
authors = [
"The Rand Project Developers"
"The Rust Project Developers"
];
dependencies = [
{
name = "libc";
packageId = "libc";
optional = true;
usesDefaultFeatures = false;
target = { target, features }: (target."unix" or false);
}
{
name = "rand_chacha";
packageId = "rand_chacha";
optional = true;
usesDefaultFeatures = false;
}
{
name = "rand_core";
packageId = "rand_core 0.6.4";
}
];
features = {
"alloc" = [ "rand_core/alloc" ];
"default" = [ "std" "std_rng" ];
"getrandom" = [ "rand_core/getrandom" ];
"libc" = [ "dep:libc" ];
"log" = [ "dep:log" ];
"packed_simd" = [ "dep:packed_simd" ];
"rand_chacha" = [ "dep:rand_chacha" ];
"serde" = [ "dep:serde" ];
"serde1" = [ "serde" "rand_core/serde1" ];
"simd_support" = [ "packed_simd" ];
"std" = [ "rand_core/std" "rand_chacha/std" "alloc" "getrandom" "libc" ];
"std_rng" = [ "rand_chacha" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "getrandom" "libc" "rand_chacha" "small_rng" "std" "std_rng" ];
};
"rand_chacha" = rec {
crateName = "rand_chacha";
version = "0.3.1";
edition = "2018";
sha256 = "123x2adin558xbhvqb8w4f6syjsdkmqff8cxwhmjacpsl1ihmhg6";
authors = [
"The Rand Project Developers"
"The Rust Project Developers"
"The CryptoCorrosion Contributors"
];
dependencies = [
{
name = "ppv-lite86";
packageId = "ppv-lite86";
usesDefaultFeatures = false;
features = [ "simd" ];
}
{
name = "rand_core";
packageId = "rand_core 0.6.4";
}
];
features = {
"default" = [ "std" ];
"serde" = [ "dep:serde" ];
"serde1" = [ "serde" ];
"std" = [ "ppv-lite86/std" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"rand_core 0.3.1" = rec {
crateName = "rand_core";
version = "0.3.1";
edition = "2015";
sha256 = "0jzdgszfa4bliigiy4hi66k7fs3gfwi2qxn8vik84ph77fwdwvvs";
authors = [
"The Rand Project Developers"
"The Rust Project Developers"
];
dependencies = [
{
name = "rand_core";
packageId = "rand_core 0.4.2";
}
];
features = {
"alloc" = [ "rand_core/alloc" ];
"default" = [ "std" ];
"serde1" = [ "rand_core/serde1" ];
"std" = [ "rand_core/std" ];
};
};
"rand_core 0.4.2" = rec {
crateName = "rand_core";
version = "0.4.2";
edition = "2015";
sha256 = "1p09ynysrq1vcdlmcqnapq4qakl2yd1ng3kxh3qscpx09k2a6cww";
authors = [
"The Rand Project Developers"
"The Rust Project Developers"
];
features = {
"serde" = [ "dep:serde" ];
"serde1" = [ "serde" "serde_derive" ];
"serde_derive" = [ "dep:serde_derive" ];
"std" = [ "alloc" ];
};
};
"rand_core 0.6.4" = rec {
crateName = "rand_core";
version = "0.6.4";
edition = "2018";
sha256 = "0b4j2v4cb5krak1pv6kakv4sz6xcwbrmy2zckc32hsigbrwy82zc";
authors = [
"The Rand Project Developers"
"The Rust Project Developers"
];
dependencies = [
{
name = "getrandom";
packageId = "getrandom";
optional = true;
}
];
features = {
"getrandom" = [ "dep:getrandom" ];
"serde" = [ "dep:serde" ];
"serde1" = [ "serde" ];
"std" = [ "alloc" "getrandom" "getrandom/std" ];
};
resolvedDefaultFeatures = [ "alloc" "getrandom" "std" ];
};
"rand_xorshift" = rec {
crateName = "rand_xorshift";
version = "0.3.0";
edition = "2018";
sha256 = "13vcag7gmqspzyabfl1gr9ykvxd2142q2agrj8dkyjmfqmgg4nyj";
authors = [
"The Rand Project Developers"
"The Rust Project Developers"
];
dependencies = [
{
name = "rand_core";
packageId = "rand_core 0.6.4";
}
];
features = {
"serde" = [ "dep:serde" ];
"serde1" = [ "serde" ];
};
};
"rand_xoshiro" = rec {
crateName = "rand_xoshiro";
version = "0.6.0";
edition = "2018";
sha256 = "1ajsic84rzwz5qr0mzlay8vi17swqi684bqvwqyiim3flfrcv5vg";
authors = [
"The Rand Project Developers"
];
dependencies = [
{
name = "rand_core";
packageId = "rand_core 0.6.4";
}
];
features = {
"serde" = [ "dep:serde" ];
"serde1" = [ "serde" ];
};
};
"rayon" = rec {
crateName = "rayon";
version = "1.7.0";
edition = "2021";
sha256 = "0fzh8w5ds1qjhilll4rkpd3kimw70zi5605wprxcig1pdqczab8x";
authors = [
"Niko Matsakis <niko@alum.mit.edu>"
"Josh Stone <cuviper@gmail.com>"
];
dependencies = [
{
name = "either";
packageId = "either";
usesDefaultFeatures = false;
}
{
name = "rayon-core";
packageId = "rayon-core";
}
];
};
"rayon-core" = rec {
crateName = "rayon-core";
version = "1.11.0";
edition = "2021";
sha256 = "13dymrhhdilzpbfh3aylv6ariayqdfk614b3frvwixb6d6yrb3sb";
authors = [
"Niko Matsakis <niko@alum.mit.edu>"
"Josh Stone <cuviper@gmail.com>"
];
dependencies = [
{
name = "crossbeam-channel";
packageId = "crossbeam-channel";
}
{
name = "crossbeam-deque";
packageId = "crossbeam-deque";
}
{
name = "crossbeam-utils";
packageId = "crossbeam-utils";
}
{
name = "num_cpus";
packageId = "num_cpus";
}
];
};
"rdrand" = rec {
crateName = "rdrand";
version = "0.4.0";
edition = "2015";
sha256 = "1cjq0kwx1bk7jx3kzyciiish5gqsj7620dm43dc52sr8fzmm9037";
authors = [
"Simonas Kazlauskas <rdrand@kazlauskas.me>"
];
dependencies = [
{
name = "rand_core";
packageId = "rand_core 0.3.1";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"redox_syscall 0.2.16" = rec {
crateName = "redox_syscall";
version = "0.2.16";
edition = "2018";
sha256 = "16jicm96kjyzm802cxdd1k9jmcph0db1a4lhslcnhjsvhp0mhnpv";
libName = "syscall";
authors = [
"Jeremy Soller <jackpot51@gmail.com>"
];
dependencies = [
{
name = "bitflags";
packageId = "bitflags";
}
];
};
"redox_syscall 0.3.5" = rec {
crateName = "redox_syscall";
version = "0.3.5";
edition = "2018";
sha256 = "0acgiy2lc1m2vr8cr33l5s7k9wzby8dybyab1a9p753hcbr68xjn";
libName = "syscall";
authors = [
"Jeremy Soller <jackpot51@gmail.com>"
];
dependencies = [
{
name = "bitflags";
packageId = "bitflags";
}
];
features = {
"core" = [ "dep:core" ];
"rustc-dep-of-std" = [ "core" "bitflags/rustc-dep-of-std" ];
};
};
"redox_users" = rec {
crateName = "redox_users";
version = "0.4.3";
edition = "2018";
sha256 = "0asw3s4iy69knafkhvlbchy230qawc297vddjdwjs5nglwvxhcxh";
authors = [
"Jose Narvaez <goyox86@gmail.com>"
"Wesley Hershberger <mggmugginsmc@gmail.com>"
];
dependencies = [
{
name = "getrandom";
packageId = "getrandom";
features = [ "std" ];
}
{
name = "redox_syscall";
packageId = "redox_syscall 0.2.16";
}
{
name = "thiserror";
packageId = "thiserror";
}
];
features = {
"auth" = [ "rust-argon2" "zeroize" ];
"default" = [ "auth" ];
"rust-argon2" = [ "dep:rust-argon2" ];
"zeroize" = [ "dep:zeroize" ];
};
};
"regex" = rec {
crateName = "regex";
version = "1.8.1";
edition = "2021";
sha256 = "0w2kgdvs2fsv39hrsb912zjq3bx5vw1cchslvbi6mk1iycbyd0xg";
authors = [
"The Rust Project Developers"
];
dependencies = [
{
name = "aho-corasick";
packageId = "aho-corasick";
optional = true;
}
{
name = "memchr";
packageId = "memchr";
optional = true;
}
{
name = "regex-syntax";
packageId = "regex-syntax 0.7.1";
usesDefaultFeatures = false;
}
];
features = {
"aho-corasick" = [ "dep:aho-corasick" ];
"default" = [ "std" "perf" "unicode" "regex-syntax/default" ];
"memchr" = [ "dep:memchr" ];
"perf" = [ "perf-cache" "perf-dfa" "perf-inline" "perf-literal" ];
"perf-literal" = [ "aho-corasick" "memchr" ];
"unicode" = [ "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" "regex-syntax/unicode" ];
"unicode-age" = [ "regex-syntax/unicode-age" ];
"unicode-bool" = [ "regex-syntax/unicode-bool" ];
"unicode-case" = [ "regex-syntax/unicode-case" ];
"unicode-gencat" = [ "regex-syntax/unicode-gencat" ];
"unicode-perl" = [ "regex-syntax/unicode-perl" ];
"unicode-script" = [ "regex-syntax/unicode-script" ];
"unicode-segment" = [ "regex-syntax/unicode-segment" ];
"unstable" = [ "pattern" ];
"use_std" = [ "std" ];
};
resolvedDefaultFeatures = [ "aho-corasick" "default" "memchr" "perf" "perf-cache" "perf-dfa" "perf-inline" "perf-literal" "std" "unicode" "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
};
"regex-automata" = rec {
crateName = "regex-automata";
version = "0.3.4";
edition = "2021";
sha256 = "156jmvsbzd9arih42ninzkfgv7g93g6i2fdxc5gki53m1ccxddmp";
authors = [
"The Rust Project Developers"
"Andrew Gallant <jamslam@gmail.com>"
];
features = {
"default" = [ "std" "syntax" "perf" "unicode" "meta" "nfa" "dfa" "hybrid" ];
"dfa" = [ "dfa-build" "dfa-search" "dfa-onepass" ];
"dfa-build" = [ "nfa-thompson" "dfa-search" ];
"dfa-onepass" = [ "nfa-thompson" ];
"hybrid" = [ "alloc" "nfa-thompson" ];
"internal-instrument" = [ "internal-instrument-pikevm" ];
"internal-instrument-pikevm" = [ "logging" "std" ];
"logging" = [ "dep:log" "aho-corasick?/logging" ];
"meta" = [ "syntax" "nfa-pikevm" ];
"nfa" = [ "nfa-thompson" "nfa-pikevm" "nfa-backtrack" ];
"nfa-backtrack" = [ "nfa-thompson" ];
"nfa-pikevm" = [ "nfa-thompson" ];
"nfa-thompson" = [ "alloc" ];
"perf" = [ "perf-inline" "perf-literal" ];
"perf-literal" = [ "perf-literal-substring" "perf-literal-multisubstring" ];
"perf-literal-multisubstring" = [ "std" "dep:aho-corasick" ];
"perf-literal-substring" = [ "aho-corasick?/perf-literal" "dep:memchr" ];
"std" = [ "regex-syntax?/std" "memchr?/std" "aho-corasick?/std" "alloc" ];
"syntax" = [ "dep:regex-syntax" "alloc" ];
"unicode" = [ "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" "unicode-word-boundary" "regex-syntax?/unicode" ];
"unicode-age" = [ "regex-syntax?/unicode-age" ];
"unicode-bool" = [ "regex-syntax?/unicode-bool" ];
"unicode-case" = [ "regex-syntax?/unicode-case" ];
"unicode-gencat" = [ "regex-syntax?/unicode-gencat" ];
"unicode-perl" = [ "regex-syntax?/unicode-perl" ];
"unicode-script" = [ "regex-syntax?/unicode-script" ];
"unicode-segment" = [ "regex-syntax?/unicode-segment" ];
};
resolvedDefaultFeatures = [ "dfa-search" ];
};
"regex-syntax 0.6.29" = rec {
crateName = "regex-syntax";
version = "0.6.29";
edition = "2018";
sha256 = "1qgj49vm6y3zn1hi09x91jvgkl2b1fiaq402skj83280ggfwcqpi";
authors = [
"The Rust Project Developers"
];
features = {
"default" = [ "unicode" ];
"unicode" = [ "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
};
resolvedDefaultFeatures = [ "default" "unicode" "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
};
"regex-syntax 0.7.1" = rec {
crateName = "regex-syntax";
version = "0.7.1";
edition = "2021";
sha256 = "0g1s6ra0ra8xy1fxscspd406c3pn53bjm1is8phamlwvy6a656d5";
authors = [
"The Rust Project Developers"
];
features = {
"default" = [ "std" "unicode" ];
"unicode" = [ "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
};
resolvedDefaultFeatures = [ "default" "std" "unicode" "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
};
"remove_dir_all" = rec {
crateName = "remove_dir_all";
version = "0.5.3";
edition = "2015";
sha256 = "1rzqbsgkmr053bxxl04vmvsd1njyz0nxvly97aip6aa2cmb15k9s";
authors = [
"Aaronepower <theaaronepower@gmail.com>"
];
dependencies = [
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "std" "errhandlingapi" "winerror" "fileapi" "winbase" ];
}
];
};
"rnix" = rec {
crateName = "rnix";
version = "0.11.0";
edition = "2021";
sha256 = "0pybq9gp4b7lp0066236jpqi9lgb1bzvqc9axymwrq3hxgdwwddv";
authors = [
"jD91mZM2 <me@krake.one>"
];
dependencies = [
{
name = "rowan";
packageId = "rowan";
}
];
};
"rowan" = rec {
crateName = "rowan";
version = "0.15.11";
edition = "2021";
sha256 = "1gvqa02nmssbl10a4apvi63l95pfllnhxqvasmg4ffj8z7z9qi34";
authors = [
"Aleksey Kladov <aleksey.kladov@gmail.com>"
];
dependencies = [
{
name = "countme";
packageId = "countme";
}
{
name = "hashbrown";
packageId = "hashbrown";
usesDefaultFeatures = false;
features = [ "inline-more" ];
}
{
name = "memoffset";
packageId = "memoffset 0.8.0";
}
{
name = "rustc-hash";
packageId = "rustc-hash";
}
{
name = "text-size";
packageId = "text-size";
}
];
features = {
"serde" = [ "dep:serde" ];
"serde1" = [ "serde" "text-size/serde" ];
};
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
"rustc-demangle" = rec {
crateName = "rustc-demangle";
version = "0.1.23";
edition = "2015";
sha256 = "0xnbk2bmyzshacjm2g1kd4zzv2y2az14bw3sjccq5qkpmsfvn9nn";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"rustc-dep-of-std" = [ "core" "compiler_builtins" ];
};
};
"rustc-hash" = rec {
crateName = "rustc-hash";
version = "1.1.0";
edition = "2015";
sha256 = "1qkc5khrmv5pqi5l5ca9p5nl5hs742cagrndhbrlk3dhlrx3zm08";
authors = [
"The Rust Project Developers"
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"rustix" = rec {
crateName = "rustix";
version = "0.37.19";
edition = "2018";
sha256 = "0gb12rp992bh2h5msqcbpdsx6h1gslsb0zpp5hdnyxj2hnfp5y5c";
authors = [
"Dan Gohman <dev@sunfishcode.online>"
"Jakub Konka <kubkon@jakubkonka.com>"
];
dependencies = [
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "errno";
packageId = "errno";
rename = "libc_errno";
optional = true;
usesDefaultFeatures = false;
target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os") && (("x86" == target."arch") || (("x86_64" == target."arch") && ("64" == target."pointer_width")) || (("little" == target."endian") && (("arm" == target."arch") || (("aarch64" == target."arch") && ("64" == target."pointer_width")) || ("powerpc64" == target."arch") || ("riscv64" == target."arch") || ("mips" == target."arch") || ("mips64" == target."arch")))));
}
{
name = "errno";
packageId = "errno";
rename = "libc_errno";
usesDefaultFeatures = false;
target = { target, features }: ((!(target."windows" or false)) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os") && (("x86" == target."arch") || (("x86_64" == target."arch") && ("64" == target."pointer_width")) || (("little" == target."endian") && (("arm" == target."arch") || (("aarch64" == target."arch") && ("64" == target."pointer_width")) || ("powerpc64" == target."arch") || ("riscv64" == target."arch") || ("mips" == target."arch") || ("mips64" == target."arch"))))))));
}
{
name = "errno";
packageId = "errno";
rename = "libc_errno";
usesDefaultFeatures = false;
target = { target, features }: (target."windows" or false);
}
{
name = "io-lifetimes";
packageId = "io-lifetimes";
optional = true;
usesDefaultFeatures = false;
features = [ "close" ];
}
{
name = "libc";
packageId = "libc";
optional = true;
target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os") && (("x86" == target."arch") || (("x86_64" == target."arch") && ("64" == target."pointer_width")) || (("little" == target."endian") && (("arm" == target."arch") || (("aarch64" == target."arch") && ("64" == target."pointer_width")) || ("powerpc64" == target."arch") || ("riscv64" == target."arch") || ("mips" == target."arch") || ("mips64" == target."arch")))));
features = [ "extra_traits" ];
}
{
name = "libc";
packageId = "libc";
target = { target, features }: ((!(target."windows" or false)) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os") && (("x86" == target."arch") || (("x86_64" == target."arch") && ("64" == target."pointer_width")) || (("little" == target."endian") && (("arm" == target."arch") || (("aarch64" == target."arch") && ("64" == target."pointer_width")) || ("powerpc64" == target."arch") || ("riscv64" == target."arch") || ("mips" == target."arch") || ("mips64" == target."arch"))))))));
features = [ "extra_traits" ];
}
{
name = "linux-raw-sys";
packageId = "linux-raw-sys";
usesDefaultFeatures = false;
target = { target, features }: ((("android" == target."os") || ("linux" == target."os")) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os") && (("x86" == target."arch") || (("x86_64" == target."arch") && ("64" == target."pointer_width")) || (("little" == target."endian") && (("arm" == target."arch") || (("aarch64" == target."arch") && ("64" == target."pointer_width")) || ("powerpc64" == target."arch") || ("riscv64" == target."arch") || ("mips" == target."arch") || ("mips64" == target."arch"))))))));
features = [ "general" "ioctl" "no_std" ];
}
{
name = "linux-raw-sys";
packageId = "linux-raw-sys";
usesDefaultFeatures = false;
target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os") && (("x86" == target."arch") || (("x86_64" == target."arch") && ("64" == target."pointer_width")) || (("little" == target."endian") && (("arm" == target."arch") || (("aarch64" == target."arch") && ("64" == target."pointer_width")) || ("powerpc64" == target."arch") || ("riscv64" == target."arch") || ("mips" == target."arch") || ("mips64" == target."arch")))));
features = [ "general" "errno" "ioctl" "no_std" ];
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_Foundation" "Win32_Networking_WinSock" "Win32_NetworkManagement_IpHelper" "Win32_System_Threading" ];
}
];
devDependencies = [
{
name = "errno";
packageId = "errno";
rename = "libc_errno";
usesDefaultFeatures = false;
}
{
name = "io-lifetimes";
packageId = "io-lifetimes";
usesDefaultFeatures = false;
features = [ "close" ];
}
{
name = "libc";
packageId = "libc";
}
];
features = {
"all-apis" = [ "fs" "io_uring" "mm" "net" "param" "process" "procfs" "rand" "runtime" "termios" "thread" "time" ];
"all-impls" = [ "os_pipe" "fs-err" ];
"alloc" = [ "dep:alloc" ];
"cc" = [ "dep:cc" ];
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"default" = [ "std" "use-libc-auxv" ];
"fs-err" = [ "io-lifetimes/fs-err" ];
"io-lifetimes" = [ "dep:io-lifetimes" ];
"io_uring" = [ "fs" "net" ];
"itoa" = [ "dep:itoa" ];
"libc" = [ "dep:libc" ];
"libc_errno" = [ "dep:libc_errno" ];
"linux_latest" = [ "linux_4_11" ];
"once_cell" = [ "dep:once_cell" ];
"os_pipe" = [ "io-lifetimes/os_pipe" ];
"param" = [ "fs" ];
"procfs" = [ "once_cell" "itoa" "fs" ];
"rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins" "linux-raw-sys/rustc-dep-of-std" "bitflags/rustc-dep-of-std" ];
"std" = [ "io-lifetimes" ];
"use-libc" = [ "libc_errno" "libc" ];
"use-libc-auxv" = [ "libc" ];
};
resolvedDefaultFeatures = [ "default" "fs" "io-lifetimes" "libc" "std" "termios" "use-libc-auxv" ];
};
"rustversion" = rec {
crateName = "rustversion";
version = "1.0.12";
edition = "2018";
sha256 = "01mzns4b7vfcxsyf63ck68gachqcbqzsfs6iwzrv6j449p70hcjg";
procMacro = true;
build = "build/build.rs";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
};
"rusty-fork" = rec {
crateName = "rusty-fork";
version = "0.3.0";
edition = "2018";
sha256 = "0kxwq5c480gg6q0j3bg4zzyfh2kwmc3v2ba94jw8ncjc8mpcqgfb";
authors = [
"Jason Lingle"
];
dependencies = [
{
name = "fnv";
packageId = "fnv";
}
{
name = "quick-error";
packageId = "quick-error 1.2.3";
}
{
name = "tempfile";
packageId = "tempfile";
}
{
name = "wait-timeout";
packageId = "wait-timeout";
optional = true;
}
];
features = {
"default" = [ "timeout" ];
"timeout" = [ "wait-timeout" ];
"wait-timeout" = [ "dep:wait-timeout" ];
};
resolvedDefaultFeatures = [ "timeout" "wait-timeout" ];
};
"rustyline" = rec {
crateName = "rustyline";
version = "10.1.1";
edition = "2018";
sha256 = "1vvsd68cch0lpcg6mcwfvfdd6r4cxbwis3bf9443phzkqcr3rs61";
authors = [
"Katsu Kawakami <kkawa1570@gmail.com>"
];
dependencies = [
{
name = "bitflags";
packageId = "bitflags";
}
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "clipboard-win";
packageId = "clipboard-win";
target = { target, features }: (target."windows" or false);
}
{
name = "dirs-next";
packageId = "dirs-next";
optional = true;
}
{
name = "fd-lock";
packageId = "fd-lock";
}
{
name = "libc";
packageId = "libc";
}
{
name = "log";
packageId = "log";
}
{
name = "memchr";
packageId = "memchr";
}
{
name = "nix";
packageId = "nix 0.25.1";
usesDefaultFeatures = false;
target = { target, features }: (target."unix" or false);
features = [ "fs" "ioctl" "poll" "signal" "term" ];
}
{
name = "radix_trie";
packageId = "radix_trie";
optional = true;
}
{
name = "scopeguard";
packageId = "scopeguard";
target = { target, features }: (target."windows" or false);
}
{
name = "unicode-segmentation";
packageId = "unicode-segmentation";
}
{
name = "unicode-width";
packageId = "unicode-width";
}
{
name = "utf8parse";
packageId = "utf8parse";
target = { target, features }: (target."unix" or false);
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "consoleapi" "handleapi" "synchapi" "minwindef" "processenv" "std" "winbase" "wincon" "winuser" ];
}
];
features = {
"case_insensitive_history_search" = [ "regex" ];
"custom-bindings" = [ "radix_trie" ];
"default" = [ "custom-bindings" "with-dirs" ];
"dirs-next" = [ "dep:dirs-next" ];
"radix_trie" = [ "dep:radix_trie" ];
"regex" = [ "dep:regex" ];
"signal-hook" = [ "dep:signal-hook" ];
"skim" = [ "dep:skim" ];
"with-dirs" = [ "dirs-next" ];
"with-fuzzy" = [ "skim" ];
};
resolvedDefaultFeatures = [ "custom-bindings" "default" "dirs-next" "radix_trie" "with-dirs" ];
};
"ryu" = rec {
crateName = "ryu";
version = "1.0.13";
edition = "2018";
sha256 = "0hchlxvjmsz51l06c7r8zwj45pm8bhc3x3czcih27rkx8v03j4zr";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
features = {
"no-panic" = [ "dep:no-panic" ];
};
};
"same-file" = rec {
crateName = "same-file";
version = "1.0.6";
edition = "2018";
sha256 = "00h5j1w87dmhnvbv9l8bic3y7xxsnjmssvifw2ayvgx9mb1ivz4k";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
];
dependencies = [
{
name = "winapi-util";
packageId = "winapi-util";
target = { target, features }: (target."windows" or false);
}
];
};
"scopeguard" = rec {
crateName = "scopeguard";
version = "1.1.0";
edition = "2015";
sha256 = "1kbqm85v43rq92vx7hfiay6pmcga03vrjbbfwqpyj3pwsg3b16nj";
authors = [
"bluss"
];
features = {
"default" = [ "use_std" ];
};
resolvedDefaultFeatures = [ "default" "use_std" ];
};
"serde" = rec {
crateName = "serde";
version = "1.0.162";
edition = "2015";
sha256 = "1dksgs0zi9wdh3bm3gzzsvmgg39fn8vb4d8gbz09haswmghzdcki";
authors = [
"Erick Tryzelaar <erick.tryzelaar@gmail.com>"
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "serde_derive";
packageId = "serde_derive";
optional = true;
}
];
devDependencies = [
{
name = "serde_derive";
packageId = "serde_derive";
}
];
features = {
"default" = [ "std" ];
"derive" = [ "serde_derive" ];
"serde_derive" = [ "dep:serde_derive" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "derive" "rc" "serde_derive" "std" ];
};
"serde_derive" = rec {
crateName = "serde_derive";
version = "1.0.162";
edition = "2015";
sha256 = "1diwx4c86b63mgmzbd5nvj8imjwhipm48jlhi62bar7xa91q3852";
procMacro = true;
authors = [
"Erick Tryzelaar <erick.tryzelaar@gmail.com>"
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 2.0.15";
}
];
features = { };
resolvedDefaultFeatures = [ "default" ];
};
"serde_json" = rec {
crateName = "serde_json";
version = "1.0.96";
edition = "2018";
sha256 = "1waj3qwpa610vmksnzcmkll6vaw7nf7v3ckj4v0wlfs0a153jz85";
authors = [
"Erick Tryzelaar <erick.tryzelaar@gmail.com>"
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "itoa";
packageId = "itoa";
}
{
name = "ryu";
packageId = "ryu";
}
{
name = "serde";
packageId = "serde";
usesDefaultFeatures = false;
}
];
devDependencies = [
{
name = "serde";
packageId = "serde";
features = [ "derive" ];
}
];
features = {
"alloc" = [ "serde/alloc" ];
"default" = [ "std" ];
"indexmap" = [ "dep:indexmap" ];
"preserve_order" = [ "indexmap" "std" ];
"std" = [ "serde/std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"serde_spanned" = rec {
crateName = "serde_spanned";
version = "0.6.1";
edition = "2021";
sha256 = "1x7wqhqay4bgkaq8dmvb9z01mk2z0j0g9jl5nb9ynv3aanpqrz8f";
dependencies = [
{
name = "serde";
packageId = "serde";
optional = true;
}
];
features = {
"serde" = [ "dep:serde" ];
};
resolvedDefaultFeatures = [ "serde" ];
};
"sha2" = rec {
crateName = "sha2";
version = "0.10.6";
edition = "2018";
sha256 = "1h5xrrv2y06kr1gsz4pwrm3lsp206nm2gjxgbf21wfrfzsavgrl2";
authors = [
"RustCrypto Developers"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "cpufeatures";
packageId = "cpufeatures";
target = { target, features }: (("aarch64" == target."arch") || ("x86_64" == target."arch") || ("x86" == target."arch"));
}
{
name = "digest";
packageId = "digest";
}
];
devDependencies = [
{
name = "digest";
packageId = "digest";
features = [ "dev" ];
}
];
features = {
"asm" = [ "sha2-asm" ];
"asm-aarch64" = [ "asm" ];
"default" = [ "std" ];
"oid" = [ "digest/oid" ];
"sha2-asm" = [ "dep:sha2-asm" ];
"std" = [ "digest/std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"sharded-slab" = rec {
crateName = "sharded-slab";
version = "0.1.4";
edition = "2018";
sha256 = "0cbb8kgwsyr3zzhsv8jrs3y1j3vsw4jxil42lfq31ikhdy0bl3wh";
authors = [
"Eliza Weisman <eliza@buoyant.io>"
];
dependencies = [
{
name = "lazy_static";
packageId = "lazy_static";
}
];
features = {
"loom" = [ "dep:loom" ];
};
};
"signal-hook-registry" = rec {
crateName = "signal-hook-registry";
version = "1.4.1";
edition = "2015";
sha256 = "18crkkw5k82bvcx088xlf5g4n3772m24qhzgfan80nda7d3rn8nq";
authors = [
"Michal 'vorner' Vaner <vorner@vorner.cz>"
"Masaki Hara <ackie.h.gmai@gmail.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
}
];
};
"slab" = rec {
crateName = "slab";
version = "0.4.8";
edition = "2018";
sha256 = "0bgwxig8gkqp6gz8rvrpdj6qwa10karnsxwx7wsj5ay8kcf3aa35";
authors = [
"Carl Lerche <me@carllerche.com>"
];
buildDependencies = [
{
name = "autocfg";
packageId = "autocfg";
}
];
features = {
"default" = [ "std" ];
"serde" = [ "dep:serde" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"sled" = rec {
crateName = "sled";
version = "0.34.7";
edition = "2018";
sha256 = "0dcr2s7cylj5mb33ci3kpx7fz797jwvysnl5airrir9cgirv95kz";
authors = [
"Tyler Neely <t@jujit.su>"
];
dependencies = [
{
name = "crc32fast";
packageId = "crc32fast";
}
{
name = "crossbeam-epoch";
packageId = "crossbeam-epoch";
}
{
name = "crossbeam-utils";
packageId = "crossbeam-utils";
}
{
name = "fs2";
packageId = "fs2";
target = { target, features }: (("linux" == target."os") || ("macos" == target."os") || ("windows" == target."os"));
}
{
name = "fxhash";
packageId = "fxhash";
}
{
name = "libc";
packageId = "libc";
}
{
name = "log";
packageId = "log";
}
{
name = "parking_lot";
packageId = "parking_lot 0.11.2";
}
{
name = "zstd";
packageId = "zstd";
optional = true;
}
];
devDependencies = [
{
name = "log";
packageId = "log";
}
];
features = {
"backtrace" = [ "dep:backtrace" ];
"color-backtrace" = [ "dep:color-backtrace" ];
"compression" = [ "zstd" ];
"default" = [ "no_metrics" ];
"io_uring" = [ "rio" ];
"no_logs" = [ "log/max_level_off" ];
"pretty_backtrace" = [ "color-backtrace" ];
"rio" = [ "dep:rio" ];
"testing" = [ "event_log" "lock_free_delays" "compression" "failpoints" "backtrace" ];
"zstd" = [ "dep:zstd" ];
};
resolvedDefaultFeatures = [ "compression" "default" "no_metrics" "zstd" ];
};
"smallvec" = rec {
crateName = "smallvec";
version = "1.10.0";
edition = "2018";
sha256 = "1q2k15fzxgwjpcdv3f323w24rbbfyv711ayz85ila12lg7zbw1x5";
authors = [
"The Servo Project Developers"
];
features = {
"arbitrary" = [ "dep:arbitrary" ];
"const_new" = [ "const_generics" ];
"serde" = [ "dep:serde" ];
};
};
"smol_str" = rec {
crateName = "smol_str";
version = "0.2.0";
edition = "2018";
sha256 = "1779hpx5ipbcvkdj5zw8zqk3ynn160qvls1gkcr54hwsprmjw8bl";
authors = [
"Aleksey Kladov <aleksey.kladov@gmail.com>"
];
dependencies = [
{
name = "serde";
packageId = "serde";
optional = true;
usesDefaultFeatures = false;
}
];
devDependencies = [
{
name = "serde";
packageId = "serde";
features = [ "derive" ];
}
];
features = {
"arbitrary" = [ "dep:arbitrary" ];
"default" = [ "std" ];
"serde" = [ "dep:serde" ];
"std" = [ "serde?/std" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
"socket2 0.4.9" = rec {
crateName = "socket2";
version = "0.4.9";
edition = "2018";
sha256 = "0qnn1r41jqj20m0a2nzzjgzndlmpg5maiyjchccaypfqxq8sk934";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
"Thomas de Zeeuw <thomasdezeeuw@gmail.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "handleapi" "ws2ipdef" "ws2tcpip" ];
}
];
features = { };
resolvedDefaultFeatures = [ "all" ];
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
"socket2 0.5.4" = rec {
crateName = "socket2";
version = "0.5.4";
edition = "2021";
sha256 = "17lqx8w2b3nysrkdbdz8y7fkikz5v77c052q57lxwajmxchfhca0";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
"Thomas de Zeeuw <thomasdezeeuw@gmail.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_Foundation" "Win32_Networking_WinSock" "Win32_System_IO" "Win32_System_Threading" "Win32_System_WindowsProgramming" ];
}
];
features = { };
resolvedDefaultFeatures = [ "all" ];
};
feat(tvix/eval): use lexical-core to format float Apparently our naive implementation of float formatting, which simply used {:.5}, and trimmed trailing "0" strings not sufficient. It wrongly trimmed numbers with zeroes but no decimal point, like `10000` got trimmed to `1`. Nix uses `std::to_string` on the double, which according to https://en.cppreference.com/w/cpp/string/basic_string/to_string is equivalent to `std::sprintf(buf, "%f", value)`. https://en.cppreference.com/w/cpp/io/c/fprintf mentions this is treated like this: > Precision specifies the exact number of digits to appear after > the decimal point character. The default precision is 6. In the > alternative implementation decimal point character is written even if > no digits follow it. For infinity and not-a-number conversion style > see notes. This doesn't seem to be the case though, and Nix uses scientific notation in some cases. There's a whole bunch of strategies to determine which is a more compact notation, and which notation should be used for a given number. https://github.com/rust-lang/rust/issues/24556 provides some pointers into various rabbit holes for those interested. This gist seems to be that currently a different formatting is not exposed in rust directly, at least not for public consumption. There is the [lexical-core](https://github.com/Alexhuszagh/rust-lexical) crate though, which provides a way to format floats with various strategies and formats. Change our implementation of `TotalDisplay` for the `Value::Float` case to use that. We still need to do some post-processing, because Nix always adds the sign in scientific notation (and there's no way to configure lexical-core to do that), and lexical-core in some cases keeps the trailing zeros. Even with all that in place, there as a difference in `eval-okay- fromjson.nix` (from tvix-tests), which I couldn't get to work. I updated the fixture to a less problematic number. With this, the testsuite passes again, and does for the upcoming CL introducing builtins.fromTOML, and enabling the nix testsuite bits for it, too. Change-Id: Ie6fba5619e1d9fd7ce669a51594658b029057acc Reviewed-on: https://cl.tvl.fyi/c/depot/+/7922 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-01-24 19:27:20 +01:00
"static_assertions" = rec {
crateName = "static_assertions";
version = "1.1.0";
edition = "2015";
sha256 = "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2";
authors = [
"Nikolai Vazquez"
];
features = { };
};
"str-buf" = rec {
crateName = "str-buf";
version = "1.0.6";
edition = "2018";
sha256 = "1l7q4nha7wpsr0970bfqm773vhmpwr9l6rr8r4gwgrh46wvdh24y";
authors = [
"Douman <douman@gmx.se>"
];
features = {
"serde" = [ "dep:serde" ];
};
};
"strsim" = rec {
crateName = "strsim";
version = "0.10.0";
edition = "2015";
sha256 = "08s69r4rcrahwnickvi0kq49z524ci50capybln83mg6b473qivk";
authors = [
"Danny Guo <danny@dannyguo.com>"
];
};
"structmeta" = rec {
crateName = "structmeta";
version = "0.1.6";
edition = "2021";
sha256 = "0alyl12b7fab8izrpliil73sxs1ivr5vm0pisallmxlb4zb44j0h";
authors = [
"frozenlib"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "structmeta-derive";
packageId = "structmeta-derive";
}
{
name = "syn";
packageId = "syn 1.0.109";
}
];
devDependencies = [
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "extra-traits" "full" ];
}
];
};
"structmeta-derive" = rec {
crateName = "structmeta-derive";
version = "0.1.6";
edition = "2021";
sha256 = "14vxik2m3dm7bwx016qfz062fwznkbq02fyq8vby545m0pj0nhi4";
procMacro = true;
authors = [
"frozenlib"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
}
];
devDependencies = [
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "extra-traits" ];
}
];
};
"subtle" = rec {
crateName = "subtle";
version = "2.4.1";
edition = "2015";
sha256 = "00b6jzh9gzb0h9n25g06nqr90z3xzqppfhhb260s1hjhh4pg7pkb";
authors = [
"Isis Lovecruft <isis@patternsinthevoid.net>"
"Henry de Valence <hdevalence@hdevalence.ca>"
];
features = {
"default" = [ "std" "i128" ];
};
};
"syn 0.15.44" = rec {
crateName = "syn";
version = "0.15.44";
edition = "2015";
sha256 = "1id5g6x6zihv3j7hwrw3m1jp636bg8dpi671r7zy3jvpkavb794w";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 0.4.30";
usesDefaultFeatures = false;
}
{
name = "quote";
packageId = "quote 0.6.13";
optional = true;
usesDefaultFeatures = false;
}
{
name = "unicode-xid";
packageId = "unicode-xid";
}
];
features = {
"default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ];
"printing" = [ "quote" ];
"proc-macro" = [ "proc-macro2/proc-macro" "quote/proc-macro" ];
"quote" = [ "dep:quote" ];
};
resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "full" "parsing" "printing" "proc-macro" "quote" ];
};
"syn 1.0.109" = rec {
crateName = "syn";
version = "1.0.109";
edition = "2018";
sha256 = "0ds2if4600bd59wsv7jjgfkayfzy3hnazs394kz6zdkmna8l3dkj";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
usesDefaultFeatures = false;
}
{
name = "quote";
packageId = "quote 1.0.26";
optional = true;
usesDefaultFeatures = false;
}
{
name = "unicode-ident";
packageId = "unicode-ident";
}
];
features = {
"default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ];
"printing" = [ "quote" ];
"proc-macro" = [ "proc-macro2/proc-macro" "quote/proc-macro" ];
"quote" = [ "dep:quote" ];
"test" = [ "syn-test-suite/all-features" ];
};
resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "quote" "visit" "visit-mut" ];
};
"syn 2.0.15" = rec {
crateName = "syn";
version = "2.0.15";
edition = "2021";
sha256 = "08n8c235bj7f86a5jg561s5zjfijdn8jw6ih2im7xxb0iczcykx3";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
usesDefaultFeatures = false;
}
{
name = "quote";
packageId = "quote 1.0.26";
optional = true;
usesDefaultFeatures = false;
}
{
name = "unicode-ident";
packageId = "unicode-ident";
}
];
features = {
"default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ];
"printing" = [ "quote" ];
"proc-macro" = [ "proc-macro2/proc-macro" "quote/proc-macro" ];
"quote" = [ "dep:quote" ];
"test" = [ "syn-test-suite/all-features" ];
};
resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "quote" "visit-mut" ];
};
"sync_wrapper" = rec {
crateName = "sync_wrapper";
version = "0.1.2";
edition = "2018";
sha256 = "0q01lyj0gr9a93n10nxsn8lwbzq97jqd6b768x17c8f7v7gccir0";
authors = [
"Actyx AG <developer@actyx.io>"
];
features = {
"futures" = [ "futures-core" ];
"futures-core" = [ "dep:futures-core" ];
};
};
"tabwriter" = rec {
crateName = "tabwriter";
version = "1.2.1";
edition = "2018";
sha256 = "048i0mj3b07zlry9m5fl706y5bzdzgrswymqn32drakzk7y5q81n";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
];
dependencies = [
{
name = "unicode-width";
packageId = "unicode-width";
}
];
features = {
"ansi_formatting" = [ "regex" "lazy_static" ];
"lazy_static" = [ "dep:lazy_static" ];
"regex" = [ "dep:regex" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"tempdir" = rec {
crateName = "tempdir";
version = "0.3.7";
edition = "2015";
sha256 = "1n5n86zxpgd85y0mswrp5cfdisizq2rv3la906g6ipyc03xvbwhm";
authors = [
"The Rust Project Developers"
];
dependencies = [
{
name = "rand";
packageId = "rand 0.4.6";
}
{
name = "remove_dir_all";
packageId = "remove_dir_all";
}
];
};
"tempfile" = rec {
crateName = "tempfile";
version = "3.5.0";
edition = "2018";
sha256 = "163rp254r3x7i5hisagrpxid2166pq94jvk511dpkmc1yf2fryxr";
authors = [
"Steven Allen <steven@stebalien.com>"
"The Rust Project Developers"
"Ashley Mannix <ashleymannix@live.com.au>"
"Jason White <me@jasonwhite.io>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "fastrand";
packageId = "fastrand";
}
{
name = "redox_syscall";
packageId = "redox_syscall 0.3.5";
target = { target, features }: ("redox" == target."os");
}
{
name = "rustix";
packageId = "rustix";
target = { target, features }: ((target."unix" or false) || ("wasi" == target."os"));
features = [ "fs" ];
}
{
name = "windows-sys";
packageId = "windows-sys 0.45.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_Storage_FileSystem" "Win32_Foundation" ];
}
];
features = { };
};
"termcolor" = rec {
crateName = "termcolor";
version = "1.2.0";
edition = "2018";
sha256 = "1dmrbsljxpfng905qkaxljlwjhv8h0i3969cbiv5rb7y8a4wymdy";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
];
dependencies = [
{
name = "winapi-util";
packageId = "winapi-util";
target = { target, features }: (target."windows" or false);
}
];
};
"test-case" = rec {
crateName = "test-case";
version = "2.2.2";
edition = "2018";
sha256 = "1h4qymhy332lzgg79w696qfxg6wdab5birn8xvfgkczzgmdczmi1";
authors = [
"Marcin Sas-Szymanski <marcin.sas-szymanski@anixe.pl>"
"Wojciech Polak <frondeus@gmail.com>"
"Łukasz Biel <lukasz.p.biel@gmail.com>"
];
dependencies = [
{
name = "test-case-macros";
packageId = "test-case-macros";
usesDefaultFeatures = false;
}
];
features = {
"regex" = [ "dep:regex" ];
"with-regex" = [ "regex" "test-case-macros/with-regex" ];
};
};
"test-case-macros" = rec {
crateName = "test-case-macros";
version = "2.2.2";
edition = "2018";
sha256 = "09jvbfvz48v6ya3i25gp3lbr6ym1fz7qyp3l6bcdslwkw7v7nnz4";
procMacro = true;
authors = [
"Marcin Sas-Szymanski <marcin.sas-szymanski@anixe.pl>"
"Wojciech Polak <frondeus@gmail.com>"
"Łukasz Biel <lukasz.p.biel@gmail.com>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "proc-macro-error";
packageId = "proc-macro-error";
}
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "full" "extra-traits" ];
}
];
features = { };
};
"test-generator" = rec {
crateName = "test-generator";
version = "0.3.0";
edition = "2018";
workspace_member = null;
src = pkgs.fetchgit {
url = "https://github.com/JamesGuthrie/test-generator.git";
rev = "82e799979980962aec1aa324ec6e0e4cad781f41";
sha256 = "08brp3qqa55hijc7xby3lam2cc84hvx1zzfqv6lj7smlczh8k32y";
};
procMacro = true;
authors = [
"Frank Rehberger <frehberg@gmail.com>"
];
dependencies = [
{
name = "glob";
packageId = "glob";
}
{
name = "proc-macro2";
packageId = "proc-macro2 0.4.30";
}
{
name = "quote";
packageId = "quote 0.6.13";
}
{
name = "syn";
packageId = "syn 0.15.44";
features = [ "full" ];
}
];
};
"test-strategy" = rec {
crateName = "test-strategy";
version = "0.2.1";
edition = "2021";
sha256 = "105lxqs0vnqff5821sgns8q1scvrwfx1yw6iz7i7nr862j6l1mk2";
procMacro = true;
authors = [
"frozenlib"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "structmeta";
packageId = "structmeta";
}
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "visit" "full" ];
}
];
};
"text-size" = rec {
crateName = "text-size";
version = "1.1.0";
edition = "2018";
sha256 = "02jn26l5wcdjqpy80ycnk9ha10flyc0p4yga8ci6aaz7vd4bb318";
authors = [
"Aleksey Kladov <aleksey.kladov@gmail.com>"
"Christopher Durham (CAD97) <cad97@cad97.com>"
];
features = {
"serde" = [ "dep:serde" ];
};
};
"textwrap" = rec {
crateName = "textwrap";
version = "0.16.0";
edition = "2021";
sha256 = "0gbwkjf15l6p3x2rkr75fa4cpcs1ly4c8pmlfx5bl6zybcm24ai2";
authors = [
"Martin Geisler <martin@geisler.net>"
];
features = {
"default" = [ "unicode-linebreak" "unicode-width" "smawk" ];
"hyphenation" = [ "dep:hyphenation" ];
"smawk" = [ "dep:smawk" ];
"terminal_size" = [ "dep:terminal_size" ];
"unicode-linebreak" = [ "dep:unicode-linebreak" ];
"unicode-width" = [ "dep:unicode-width" ];
};
};
"thiserror" = rec {
crateName = "thiserror";
version = "1.0.40";
edition = "2018";
sha256 = "1b7bdhriasdsr99y39d50jz995xaz9sw3hsbb6z9kp6q9cqrm34p";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "thiserror-impl";
packageId = "thiserror-impl";
}
];
};
"thiserror-impl" = rec {
crateName = "thiserror-impl";
version = "1.0.40";
edition = "2018";
sha256 = "17sn41kyimc6s983aypkk6a45pcyrkbkvrw6rp407n5hqm16ligr";
procMacro = true;
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 2.0.15";
}
];
};
"thread_local" = rec {
crateName = "thread_local";
version = "1.1.7";
edition = "2021";
sha256 = "0lp19jdgvp5m4l60cgxdnl00yw1hlqy8gcywg9bddwng9h36zp9z";
authors = [
"Amanieu d'Antras <amanieu@gmail.com>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "once_cell";
packageId = "once_cell";
}
];
features = { };
};
"tinytemplate" = rec {
crateName = "tinytemplate";
version = "1.2.1";
edition = "2015";
sha256 = "1g5n77cqkdh9hy75zdb01adxn45mkh9y40wdr7l68xpz35gnnkdy";
authors = [
"Brook Heisler <brookheisler@gmail.com>"
];
dependencies = [
{
name = "serde";
packageId = "serde";
}
{
name = "serde_json";
packageId = "serde_json";
}
];
};
"tinyvec" = rec {
crateName = "tinyvec";
version = "1.6.0";
edition = "2018";
sha256 = "0l6bl2h62a5m44jdnpn7lmj14rd44via8180i7121fvm73mmrk47";
authors = [
"Lokathor <zefria@gmail.com>"
];
dependencies = [
{
name = "tinyvec_macros";
packageId = "tinyvec_macros";
optional = true;
}
];
features = {
"alloc" = [ "tinyvec_macros" ];
"arbitrary" = [ "dep:arbitrary" ];
"real_blackbox" = [ "criterion/real_blackbox" ];
"rustc_1_55" = [ "rustc_1_40" ];
"rustc_1_57" = [ "rustc_1_55" ];
"serde" = [ "dep:serde" ];
"std" = [ "alloc" ];
"tinyvec_macros" = [ "dep:tinyvec_macros" ];
};
resolvedDefaultFeatures = [ "alloc" "default" "tinyvec_macros" ];
};
"tinyvec_macros" = rec {
crateName = "tinyvec_macros";
version = "0.1.1";
edition = "2018";
sha256 = "081gag86208sc3y6sdkshgw3vysm5d34p431dzw0bshz66ncng0z";
authors = [
"Soveu <marx.tomasz@gmail.com>"
];
};
"tokio" = rec {
crateName = "tokio";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
version = "1.32.0";
edition = "2021";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
sha256 = "1yck1349q23l22bgxcbqd3wkaffw2vmkf7z26m3wgmkcxmvn1v8p";
authors = [
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
{
name = "backtrace";
packageId = "backtrace";
target = { target, features }: (target."tokio_taskdump" or false);
}
{
name = "bytes";
packageId = "bytes";
optional = true;
}
{
name = "libc";
packageId = "libc";
optional = true;
target = { target, features }: (target."unix" or false);
}
{
name = "mio";
packageId = "mio";
optional = true;
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
usesDefaultFeatures = false;
}
{
name = "num_cpus";
packageId = "num_cpus";
optional = true;
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "signal-hook-registry";
packageId = "signal-hook-registry";
optional = true;
target = { target, features }: (target."unix" or false);
}
{
name = "socket2";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
packageId = "socket2 0.5.4";
optional = true;
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
target = { target, features }: (!(builtins.elem "wasm" target."family"));
features = [ "all" ];
}
{
name = "tokio-macros";
packageId = "tokio-macros";
optional = true;
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
optional = true;
target = { target, features }: (target."windows" or false);
}
];
devDependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
{
name = "socket2";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
packageId = "socket2 0.5.4";
target = { target, features }: (!(builtins.elem "wasm" target."family"));
}
{
name = "windows-sys";
packageId = "windows-sys 0.48.0";
target = { target, features }: (target."windows" or false);
features = [ "Win32_Foundation" "Win32_Security_Authorization" ];
}
];
features = {
"bytes" = [ "dep:bytes" ];
"full" = [ "fs" "io-util" "io-std" "macros" "net" "parking_lot" "process" "rt" "rt-multi-thread" "signal" "sync" "time" ];
"io-util" = [ "bytes" ];
"libc" = [ "dep:libc" ];
"macros" = [ "tokio-macros" ];
"mio" = [ "dep:mio" ];
"net" = [ "libc" "mio/os-poll" "mio/os-ext" "mio/net" "socket2" "windows-sys/Win32_Foundation" "windows-sys/Win32_Security" "windows-sys/Win32_Storage_FileSystem" "windows-sys/Win32_System_Pipes" "windows-sys/Win32_System_SystemServices" ];
"num_cpus" = [ "dep:num_cpus" ];
"parking_lot" = [ "dep:parking_lot" ];
"process" = [ "bytes" "libc" "mio/os-poll" "mio/os-ext" "mio/net" "signal-hook-registry" "windows-sys/Win32_Foundation" "windows-sys/Win32_System_Threading" "windows-sys/Win32_System_WindowsProgramming" ];
"rt-multi-thread" = [ "num_cpus" "rt" ];
"signal" = [ "libc" "mio/os-poll" "mio/net" "mio/os-ext" "signal-hook-registry" "windows-sys/Win32_Foundation" "windows-sys/Win32_System_Console" ];
"signal-hook-registry" = [ "dep:signal-hook-registry" ];
"socket2" = [ "dep:socket2" ];
"test-util" = [ "rt" "sync" "time" ];
"tokio-macros" = [ "dep:tokio-macros" ];
"tracing" = [ "dep:tracing" ];
"windows-sys" = [ "dep:windows-sys" ];
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
resolvedDefaultFeatures = [ "bytes" "default" "fs" "io-std" "io-util" "libc" "macros" "mio" "net" "num_cpus" "rt" "rt-multi-thread" "signal" "signal-hook-registry" "socket2" "sync" "time" "tokio-macros" "windows-sys" ];
};
"tokio-io-timeout" = rec {
crateName = "tokio-io-timeout";
version = "1.2.0";
edition = "2018";
sha256 = "1gx84f92q1491vj4pkn81j8pz1s3pgwnbrsdhfsa2556mli41drh";
authors = [
"Steven Fackler <sfackler@gmail.com>"
];
dependencies = [
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "tokio";
packageId = "tokio";
features = [ "time" ];
}
];
devDependencies = [
{
name = "tokio";
packageId = "tokio";
features = [ "full" ];
}
];
};
"tokio-macros" = rec {
crateName = "tokio-macros";
version = "2.1.0";
edition = "2018";
sha256 = "0pk7y9dfanab886iaqwcbri39jkw33kgl7y07v0kg1pp8prdq2v3";
procMacro = true;
authors = [
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 2.0.15";
features = [ "full" ];
}
];
};
"tokio-stream" = rec {
crateName = "tokio-stream";
version = "0.1.14";
edition = "2021";
sha256 = "0hi8hcwavh5sdi1ivc9qc4yvyr32f153c212dpd7sb366y6rhz1r";
authors = [
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "futures-core";
packageId = "futures-core";
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "tokio";
packageId = "tokio";
features = [ "sync" ];
}
];
devDependencies = [
{
name = "tokio";
packageId = "tokio";
features = [ "full" "test-util" ];
}
];
features = {
"default" = [ "time" ];
"fs" = [ "tokio/fs" ];
"full" = [ "time" "net" "io-util" "fs" "sync" "signal" ];
"io-util" = [ "tokio/io-util" ];
"net" = [ "tokio/net" ];
"signal" = [ "tokio/signal" ];
"sync" = [ "tokio/sync" "tokio-util" ];
"time" = [ "tokio/time" ];
"tokio-util" = [ "dep:tokio-util" ];
};
resolvedDefaultFeatures = [ "default" "fs" "net" "time" ];
};
"tokio-util" = rec {
crateName = "tokio-util";
version = "0.7.8";
edition = "2021";
sha256 = "0zfvblvskaj65rianw6agz9hnbdbsfgf5fkw4srwik3yr31fhvw0";
authors = [
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "futures-core";
packageId = "futures-core";
}
{
name = "futures-sink";
packageId = "futures-sink";
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "tokio";
packageId = "tokio";
features = [ "sync" ];
}
{
name = "tracing";
packageId = "tracing";
optional = true;
usesDefaultFeatures = false;
features = [ "std" ];
}
];
devDependencies = [
{
name = "tokio";
packageId = "tokio";
features = [ "full" ];
}
];
features = {
"__docs_rs" = [ "futures-util" ];
"codec" = [ "tracing" ];
"compat" = [ "futures-io" ];
"full" = [ "codec" "compat" "io-util" "time" "net" "rt" ];
"futures-io" = [ "dep:futures-io" ];
"futures-util" = [ "dep:futures-util" ];
"hashbrown" = [ "dep:hashbrown" ];
"io-util" = [ "io" "tokio/rt" "tokio/io-util" ];
"net" = [ "tokio/net" ];
"rt" = [ "tokio/rt" "tokio/sync" "futures-util" "hashbrown" ];
"slab" = [ "dep:slab" ];
"time" = [ "tokio/time" "slab" ];
"tracing" = [ "dep:tracing" ];
};
resolvedDefaultFeatures = [ "codec" "default" "io" "io-util" "tracing" ];
};
"toml" = rec {
crateName = "toml";
version = "0.6.0";
edition = "2021";
sha256 = "05zjz69wjymp9yrgccg5vhvxpf855rgn23vl1yvri4nwwj8difag";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
dependencies = [
{
name = "serde";
packageId = "serde";
}
{
name = "serde_spanned";
packageId = "serde_spanned";
features = [ "serde" ];
}
{
name = "toml_datetime";
packageId = "toml_datetime";
features = [ "serde" ];
}
{
name = "toml_edit";
packageId = "toml_edit";
optional = true;
features = [ "serde" ];
}
];
devDependencies = [
{
name = "serde";
packageId = "serde";
features = [ "derive" ];
}
];
features = {
"default" = [ "parse" "display" ];
"display" = [ "dep:toml_edit" ];
"indexmap" = [ "dep:indexmap" ];
"parse" = [ "dep:toml_edit" ];
"preserve_order" = [ "indexmap" ];
};
resolvedDefaultFeatures = [ "default" "display" "parse" ];
};
"toml_datetime" = rec {
crateName = "toml_datetime";
version = "0.5.1";
edition = "2021";
sha256 = "1xcw3kyklh3s2gxp65ma26rgkl7505la4xx1r55kfgcfmikz8ls5";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
dependencies = [
{
name = "serde";
packageId = "serde";
optional = true;
}
];
features = {
"serde" = [ "dep:serde" ];
};
resolvedDefaultFeatures = [ "serde" ];
};
"toml_edit" = rec {
crateName = "toml_edit";
version = "0.18.1";
edition = "2021";
sha256 = "0ax1bwzd4xclpids3b69nd1nxqi3x3qa4ymz51jbrp6hsy6rvian";
authors = [
"Andronik Ordian <write@reusable.software>"
"Ed Page <eopage@gmail.com>"
];
dependencies = [
{
name = "indexmap";
packageId = "indexmap";
}
{
name = "nom8";
packageId = "nom8";
}
{
name = "serde";
packageId = "serde";
optional = true;
}
{
name = "serde_spanned";
packageId = "serde_spanned";
optional = true;
features = [ "serde" ];
}
{
name = "toml_datetime";
packageId = "toml_datetime";
}
];
features = {
"easy" = [ "serde" ];
"perf" = [ "dep:kstring" ];
"serde" = [ "dep:serde" "toml_datetime/serde" "dep:serde_spanned" ];
};
resolvedDefaultFeatures = [ "default" "serde" ];
};
"tonic" = rec {
crateName = "tonic";
version = "0.8.3";
edition = "2018";
sha256 = "1yymp2xi1p60g81p5jfaybcawpfkb01vqvzqn4cyz6wj7fnry8cg";
authors = [
"Lucio Franco <luciofranco14@gmail.com>"
];
dependencies = [
{
name = "async-stream";
packageId = "async-stream";
}
{
name = "async-trait";
packageId = "async-trait";
optional = true;
}
{
name = "axum";
packageId = "axum";
optional = true;
usesDefaultFeatures = false;
}
{
name = "base64";
packageId = "base64";
}
{
name = "bytes";
packageId = "bytes";
}
{
name = "futures-core";
packageId = "futures-core";
usesDefaultFeatures = false;
}
{
name = "futures-util";
packageId = "futures-util";
usesDefaultFeatures = false;
}
{
name = "h2";
packageId = "h2";
optional = true;
}
{
name = "http";
packageId = "http";
}
{
name = "http-body";
packageId = "http-body";
}
{
name = "hyper";
packageId = "hyper";
optional = true;
features = [ "full" ];
}
{
name = "hyper-timeout";
packageId = "hyper-timeout";
optional = true;
}
{
name = "percent-encoding";
packageId = "percent-encoding";
}
{
name = "pin-project";
packageId = "pin-project";
}
{
name = "prost";
packageId = "prost";
rename = "prost1";
optional = true;
}
{
name = "prost-derive";
packageId = "prost-derive";
optional = true;
}
{
name = "tokio";
packageId = "tokio";
optional = true;
features = [ "net" ];
}
{
name = "tokio-stream";
packageId = "tokio-stream";
}
{
name = "tokio-util";
packageId = "tokio-util";
features = [ "codec" ];
}
{
name = "tower";
packageId = "tower";
optional = true;
usesDefaultFeatures = false;
features = [ "balance" "buffer" "discover" "limit" "load" "make" "timeout" "util" ];
}
{
name = "tower-layer";
packageId = "tower-layer";
}
{
name = "tower-service";
packageId = "tower-service";
}
{
name = "tracing";
packageId = "tracing";
}
{
name = "tracing-futures";
packageId = "tracing-futures";
optional = true;
}
];
devDependencies = [
{
name = "tokio";
packageId = "tokio";
features = [ "rt" "macros" ];
}
{
name = "tower";
packageId = "tower";
features = [ "full" ];
}
];
features = {
"async-trait" = [ "dep:async-trait" ];
"axum" = [ "dep:axum" ];
"channel" = [ "h2" "hyper" "tokio" "tower" "tracing-futures" "tokio/macros" "tokio/time" "hyper-timeout" ];
"codegen" = [ "async-trait" ];
"default" = [ "transport" "codegen" "prost" ];
"flate2" = [ "dep:flate2" ];
"gzip" = [ "flate2" ];
"h2" = [ "dep:h2" ];
"hyper" = [ "dep:hyper" ];
"hyper-timeout" = [ "dep:hyper-timeout" ];
"prost" = [ "prost1" "prost-derive" ];
"prost-derive" = [ "dep:prost-derive" ];
"prost1" = [ "dep:prost1" ];
"rustls-native-certs" = [ "dep:rustls-native-certs" ];
"rustls-pemfile" = [ "dep:rustls-pemfile" ];
"tls" = [ "rustls-pemfile" "transport" "tokio-rustls" ];
"tls-roots" = [ "tls-roots-common" "rustls-native-certs" ];
"tls-roots-common" = [ "tls" ];
"tls-webpki-roots" = [ "tls-roots-common" "webpki-roots" ];
"tokio" = [ "dep:tokio" ];
"tokio-rustls" = [ "dep:tokio-rustls" ];
"tower" = [ "dep:tower" ];
"tracing-futures" = [ "dep:tracing-futures" ];
"transport" = [ "axum" "channel" ];
"webpki-roots" = [ "dep:webpki-roots" ];
};
resolvedDefaultFeatures = [ "async-trait" "axum" "channel" "codegen" "default" "h2" "hyper" "hyper-timeout" "prost" "prost-derive" "prost1" "tokio" "tower" "tracing-futures" "transport" ];
};
"tonic-build" = rec {
crateName = "tonic-build";
version = "0.8.4";
edition = "2018";
sha256 = "1i781mfzcbzfk6fnf7qp95q6r0b05ixvmynw4z0agq7pq2wykxav";
authors = [
"Lucio Franco <luciofranco14@gmail.com>"
];
dependencies = [
{
name = "prettyplease";
packageId = "prettyplease";
}
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "prost-build";
packageId = "prost-build";
optional = true;
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
}
];
features = {
"cleanup-markdown" = [ "prost-build/cleanup-markdown" ];
"default" = [ "transport" "prost" ];
"prost" = [ "prost-build" ];
"prost-build" = [ "dep:prost-build" ];
};
resolvedDefaultFeatures = [ "default" "prost" "prost-build" "transport" ];
};
"tonic-mock" = rec {
crateName = "tonic-mock";
version = "0.1.0";
edition = "2018";
workspace_member = null;
src = pkgs.fetchgit {
url = "https://github.com/brainrake/tonic-mock";
rev = "ec1a15510875de99d709d684190db5d9beab175e";
sha256 = "0lwa03hpp0mxa6aa1zv5w68k61y4hccfm0q2ykyq392fwal8vb50";
};
authors = [
"Tyr Chen <tyr.chen@gmail.com>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "futures";
packageId = "futures";
}
{
name = "http";
packageId = "http";
}
{
name = "http-body";
packageId = "http-body";
}
{
name = "prost";
packageId = "prost";
}
{
name = "tonic";
packageId = "tonic";
}
];
};
"tonic-reflection" = rec {
crateName = "tonic-reflection";
version = "0.5.0";
edition = "2018";
sha256 = "05i6c1fcbwkkj0p2r63vb5iac60b22a5rif3zx5li8a0slqgfm84";
authors = [
"James Nugent <james@jen20.com>"
"Samani G. Gikandi <samani@gojulas.com>"
];
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "prost";
packageId = "prost";
}
{
name = "prost-types";
packageId = "prost-types";
}
{
name = "tokio";
packageId = "tokio";
features = [ "sync" ];
}
{
name = "tokio-stream";
packageId = "tokio-stream";
features = [ "net" ];
}
{
name = "tonic";
packageId = "tonic";
features = [ "codegen" "prost" ];
}
];
buildDependencies = [
{
name = "tonic-build";
packageId = "tonic-build";
features = [ "transport" "prost" ];
}
];
};
"tower" = rec {
crateName = "tower";
version = "0.4.13";
edition = "2018";
sha256 = "073wncyqav4sak1p755hf6vl66njgfc1z1g1di9rxx3cvvh9pymq";
authors = [
"Tower Maintainers <team@tower-rs.com>"
];
dependencies = [
{
name = "futures-core";
packageId = "futures-core";
optional = true;
}
{
name = "futures-util";
packageId = "futures-util";
optional = true;
usesDefaultFeatures = false;
features = [ "alloc" ];
}
{
name = "indexmap";
packageId = "indexmap";
optional = true;
}
{
name = "pin-project";
packageId = "pin-project";
optional = true;
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
optional = true;
}
{
name = "rand";
packageId = "rand 0.8.5";
optional = true;
features = [ "small_rng" ];
}
{
name = "slab";
packageId = "slab";
optional = true;
}
{
name = "tokio";
packageId = "tokio";
optional = true;
features = [ "sync" ];
}
{
name = "tokio-util";
packageId = "tokio-util";
optional = true;
usesDefaultFeatures = false;
}
{
name = "tower-layer";
packageId = "tower-layer";
}
{
name = "tower-service";
packageId = "tower-service";
}
{
name = "tracing";
packageId = "tracing";
optional = true;
usesDefaultFeatures = false;
features = [ "std" ];
}
];
devDependencies = [
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "tokio";
packageId = "tokio";
features = [ "macros" "sync" "test-util" "rt-multi-thread" ];
}
];
features = {
"__common" = [ "futures-core" "pin-project-lite" ];
"balance" = [ "discover" "load" "ready-cache" "make" "rand" "slab" ];
"buffer" = [ "__common" "tokio/sync" "tokio/rt" "tokio-util" "tracing" ];
"default" = [ "log" ];
"discover" = [ "__common" ];
"filter" = [ "__common" "futures-util" ];
"full" = [ "balance" "buffer" "discover" "filter" "hedge" "limit" "load" "load-shed" "make" "ready-cache" "reconnect" "retry" "spawn-ready" "steer" "timeout" "util" ];
"futures-core" = [ "dep:futures-core" ];
"futures-util" = [ "dep:futures-util" ];
"hdrhistogram" = [ "dep:hdrhistogram" ];
"hedge" = [ "util" "filter" "futures-util" "hdrhistogram" "tokio/time" "tracing" ];
"indexmap" = [ "dep:indexmap" ];
"limit" = [ "__common" "tokio/time" "tokio/sync" "tokio-util" "tracing" ];
"load" = [ "__common" "tokio/time" "tracing" ];
"load-shed" = [ "__common" ];
"log" = [ "tracing/log" ];
"make" = [ "futures-util" "pin-project-lite" "tokio/io-std" ];
"pin-project" = [ "dep:pin-project" ];
"pin-project-lite" = [ "dep:pin-project-lite" ];
"rand" = [ "dep:rand" ];
"ready-cache" = [ "futures-core" "futures-util" "indexmap" "tokio/sync" "tracing" "pin-project-lite" ];
"reconnect" = [ "make" "tokio/io-std" "tracing" ];
"retry" = [ "__common" "tokio/time" ];
"slab" = [ "dep:slab" ];
"spawn-ready" = [ "__common" "futures-util" "tokio/sync" "tokio/rt" "util" "tracing" ];
"timeout" = [ "pin-project-lite" "tokio/time" ];
"tokio" = [ "dep:tokio" ];
"tokio-stream" = [ "dep:tokio-stream" ];
"tokio-util" = [ "dep:tokio-util" ];
"tracing" = [ "dep:tracing" ];
"util" = [ "__common" "futures-util" "pin-project" ];
};
feat(tvix/store/directorysvc): add gRPC client This provides a GRPCDirectoryService struct implementing DirectoryService, allowing a client to Directory objects from a (remote) tvix-store. Remote in this case is anything outside the current process, be it another process, or an endpoint on the network. To keep the sync interface in the `DirectoryService` trait, a handle to some tokio runtime needs to be passed into the constructor, and the two methods use `self.tokio_handle.spawn` to start an async function, and `self.tokio_handle.block_on` to wait for its completion. The client handle, called `grpc_client` itself is easy to clone, and treats concurrent requests internally. This means, even though we keep the `DirectoryService` trait sync, there's nothing preventing it from being used concurrently, let's say from multiple threads. There's still two limitations for now: 1) The trait doesn't make use of the `recursive` request, which currently leads to a N+1 query problem. This can be fixed by `GRPCDirectoryService` having a reference to another `DirectoryService` acting as the local side. I want to wait for general store composition code to pop up before manually coding this here. 2) It's currently only possible to put() leaf directory nodes, as the request normally requires uploading a whole closure. We might want to add another batch function to upload a whole closure, and/or do this batching in certain cases. This still needs some more thinking. Change-Id: I7ffec791610b72c0960cf5307cefbb12ec946dc9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8336 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-03-23 13:49:57 +01:00
resolvedDefaultFeatures = [ "__common" "balance" "buffer" "default" "discover" "futures-core" "futures-util" "indexmap" "limit" "load" "log" "make" "pin-project" "pin-project-lite" "rand" "ready-cache" "slab" "timeout" "tokio" "tokio-util" "tracing" "util" ];
};
"tower-layer" = rec {
crateName = "tower-layer";
version = "0.3.2";
edition = "2018";
sha256 = "1l7i17k9vlssrdg4s3b0ia5jjkmmxsvv8s9y9ih0jfi8ssz8s362";
authors = [
"Tower Maintainers <team@tower-rs.com>"
];
};
"tower-service" = rec {
crateName = "tower-service";
version = "0.3.2";
edition = "2018";
sha256 = "0lmfzmmvid2yp2l36mbavhmqgsvzqf7r2wiwz73ml4xmwaf1rg5n";
authors = [
"Tower Maintainers <team@tower-rs.com>"
];
};
"tracing" = rec {
crateName = "tracing";
version = "0.1.37";
edition = "2018";
sha256 = "1f2fylc79xmbh7v53kak6qyw27njbx227rd64kb4bga8ilxc7s4c";
authors = [
"Eliza Weisman <eliza@buoyant.io>"
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
feat(tvix/store/directorysvc): add gRPC client This provides a GRPCDirectoryService struct implementing DirectoryService, allowing a client to Directory objects from a (remote) tvix-store. Remote in this case is anything outside the current process, be it another process, or an endpoint on the network. To keep the sync interface in the `DirectoryService` trait, a handle to some tokio runtime needs to be passed into the constructor, and the two methods use `self.tokio_handle.spawn` to start an async function, and `self.tokio_handle.block_on` to wait for its completion. The client handle, called `grpc_client` itself is easy to clone, and treats concurrent requests internally. This means, even though we keep the `DirectoryService` trait sync, there's nothing preventing it from being used concurrently, let's say from multiple threads. There's still two limitations for now: 1) The trait doesn't make use of the `recursive` request, which currently leads to a N+1 query problem. This can be fixed by `GRPCDirectoryService` having a reference to another `DirectoryService` acting as the local side. I want to wait for general store composition code to pop up before manually coding this here. 2) It's currently only possible to put() leaf directory nodes, as the request normally requires uploading a whole closure. We might want to add another batch function to upload a whole closure, and/or do this batching in certain cases. This still needs some more thinking. Change-Id: I7ffec791610b72c0960cf5307cefbb12ec946dc9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8336 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-03-23 13:49:57 +01:00
{
name = "log";
packageId = "log";
optional = true;
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "tracing-attributes";
packageId = "tracing-attributes";
optional = true;
}
{
name = "tracing-core";
packageId = "tracing-core";
usesDefaultFeatures = false;
}
];
feat(tvix/store/directorysvc): add gRPC client This provides a GRPCDirectoryService struct implementing DirectoryService, allowing a client to Directory objects from a (remote) tvix-store. Remote in this case is anything outside the current process, be it another process, or an endpoint on the network. To keep the sync interface in the `DirectoryService` trait, a handle to some tokio runtime needs to be passed into the constructor, and the two methods use `self.tokio_handle.spawn` to start an async function, and `self.tokio_handle.block_on` to wait for its completion. The client handle, called `grpc_client` itself is easy to clone, and treats concurrent requests internally. This means, even though we keep the `DirectoryService` trait sync, there's nothing preventing it from being used concurrently, let's say from multiple threads. There's still two limitations for now: 1) The trait doesn't make use of the `recursive` request, which currently leads to a N+1 query problem. This can be fixed by `GRPCDirectoryService` having a reference to another `DirectoryService` acting as the local side. I want to wait for general store composition code to pop up before manually coding this here. 2) It's currently only possible to put() leaf directory nodes, as the request normally requires uploading a whole closure. We might want to add another batch function to upload a whole closure, and/or do this batching in certain cases. This still needs some more thinking. Change-Id: I7ffec791610b72c0960cf5307cefbb12ec946dc9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8336 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-03-23 13:49:57 +01:00
devDependencies = [
{
name = "log";
packageId = "log";
}
];
features = {
"attributes" = [ "tracing-attributes" ];
"default" = [ "std" "attributes" ];
"log" = [ "dep:log" ];
"log-always" = [ "log" ];
"std" = [ "tracing-core/std" ];
"tracing-attributes" = [ "dep:tracing-attributes" ];
"valuable" = [ "tracing-core/valuable" ];
};
feat(tvix/store/directorysvc): add gRPC client This provides a GRPCDirectoryService struct implementing DirectoryService, allowing a client to Directory objects from a (remote) tvix-store. Remote in this case is anything outside the current process, be it another process, or an endpoint on the network. To keep the sync interface in the `DirectoryService` trait, a handle to some tokio runtime needs to be passed into the constructor, and the two methods use `self.tokio_handle.spawn` to start an async function, and `self.tokio_handle.block_on` to wait for its completion. The client handle, called `grpc_client` itself is easy to clone, and treats concurrent requests internally. This means, even though we keep the `DirectoryService` trait sync, there's nothing preventing it from being used concurrently, let's say from multiple threads. There's still two limitations for now: 1) The trait doesn't make use of the `recursive` request, which currently leads to a N+1 query problem. This can be fixed by `GRPCDirectoryService` having a reference to another `DirectoryService` acting as the local side. I want to wait for general store composition code to pop up before manually coding this here. 2) It's currently only possible to put() leaf directory nodes, as the request normally requires uploading a whole closure. We might want to add another batch function to upload a whole closure, and/or do this batching in certain cases. This still needs some more thinking. Change-Id: I7ffec791610b72c0960cf5307cefbb12ec946dc9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8336 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-03-23 13:49:57 +01:00
resolvedDefaultFeatures = [ "attributes" "default" "log" "std" "tracing-attributes" ];
};
"tracing-attributes" = rec {
crateName = "tracing-attributes";
version = "0.1.24";
edition = "2018";
sha256 = "0x3spb5h4m56035lrvrchbyhg8pxrg4sk0qij8d0ni815b5f6mqg";
procMacro = true;
authors = [
"Tokio Contributors <team@tokio.rs>"
"Eliza Weisman <eliza@buoyant.io>"
"David Barsky <dbarsky@amazon.com>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 2.0.15";
usesDefaultFeatures = false;
features = [ "full" "parsing" "printing" "visit-mut" "clone-impls" "extra-traits" "proc-macro" ];
}
];
features = { };
};
"tracing-core" = rec {
crateName = "tracing-core";
version = "0.1.30";
edition = "2018";
sha256 = "0fi1jz3jbzk3n7k379pwv3wfhn35c5gcwn000m2xh7xb1sx07sr4";
authors = [
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "once_cell";
packageId = "once_cell";
optional = true;
}
{
name = "valuable";
packageId = "valuable";
optional = true;
usesDefaultFeatures = false;
target = { target, features }: (target."tracing_unstable" or false);
}
];
features = {
"default" = [ "std" "valuable/std" ];
"once_cell" = [ "dep:once_cell" ];
"std" = [ "once_cell" ];
"valuable" = [ "dep:valuable" ];
};
resolvedDefaultFeatures = [ "default" "once_cell" "std" "valuable" ];
};
"tracing-futures" = rec {
crateName = "tracing-futures";
version = "0.2.5";
edition = "2018";
sha256 = "1wimg0iwa2ldq7xv98lvivvf3q9ykfminig8r1bs0ig22np9bl4p";
authors = [
"Eliza Weisman <eliza@buoyant.io>"
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "pin-project";
packageId = "pin-project";
optional = true;
}
{
name = "tracing";
packageId = "tracing";
usesDefaultFeatures = false;
}
];
features = {
"default" = [ "std-future" "std" ];
"futures" = [ "dep:futures" ];
"futures-01" = [ "futures_01" "std" ];
"futures-03" = [ "std-future" "futures" "futures-task" "std" ];
"futures-task" = [ "dep:futures-task" ];
"futures_01" = [ "dep:futures_01" ];
"pin-project" = [ "dep:pin-project" ];
"std" = [ "tracing/std" ];
"std-future" = [ "pin-project" ];
"tokio" = [ "dep:tokio" ];
"tokio-executor" = [ "dep:tokio-executor" ];
};
resolvedDefaultFeatures = [ "default" "pin-project" "std" "std-future" ];
};
"tracing-log" = rec {
crateName = "tracing-log";
version = "0.1.3";
edition = "2018";
sha256 = "08prnkxq8yas6jvvjnvyx5v3hwblas5527wxxgbiw2yis8rsvpbq";
authors = [
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "lazy_static";
packageId = "lazy_static";
}
{
name = "log";
packageId = "log";
}
{
name = "tracing-core";
packageId = "tracing-core";
}
];
features = {
"ahash" = [ "dep:ahash" ];
"default" = [ "log-tracer" "trace-logger" "std" ];
"env_logger" = [ "dep:env_logger" ];
"interest-cache" = [ "lru" "ahash" ];
"lru" = [ "dep:lru" ];
"std" = [ "log/std" ];
};
resolvedDefaultFeatures = [ "log-tracer" "std" ];
};
"tracing-serde" = rec {
crateName = "tracing-serde";
version = "0.1.3";
edition = "2018";
sha256 = "1qfr0va69djvxqvjrx4vqq7p6myy414lx4w1f6amcn0hfwqj2sxw";
authors = [
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "serde";
packageId = "serde";
}
{
name = "tracing-core";
packageId = "tracing-core";
}
];
features = {
"valuable" = [ "valuable_crate" "valuable-serde" "tracing-core/valuable" ];
"valuable-serde" = [ "dep:valuable-serde" ];
"valuable_crate" = [ "dep:valuable_crate" ];
};
};
"tracing-subscriber" = rec {
crateName = "tracing-subscriber";
version = "0.3.17";
edition = "2018";
sha256 = "0xvwfpmb943hdy4gzyn7a2azgigf30mfd1kx10gyh5gr6yy539ih";
authors = [
"Eliza Weisman <eliza@buoyant.io>"
"David Barsky <me@davidbarsky.com>"
"Tokio Contributors <team@tokio.rs>"
];
dependencies = [
{
name = "nu-ansi-term";
packageId = "nu-ansi-term";
optional = true;
}
{
name = "serde";
packageId = "serde";
optional = true;
}
{
name = "serde_json";
packageId = "serde_json";
optional = true;
}
{
name = "sharded-slab";
packageId = "sharded-slab";
optional = true;
}
{
name = "smallvec";
packageId = "smallvec";
optional = true;
}
{
name = "thread_local";
packageId = "thread_local";
optional = true;
}
{
name = "tracing-core";
packageId = "tracing-core";
usesDefaultFeatures = false;
}
{
name = "tracing-log";
packageId = "tracing-log";
optional = true;
usesDefaultFeatures = false;
features = [ "log-tracer" "std" ];
}
{
name = "tracing-serde";
packageId = "tracing-serde";
optional = true;
}
];
devDependencies = [
{
name = "tracing-log";
packageId = "tracing-log";
}
];
features = {
"ansi" = [ "fmt" "nu-ansi-term" ];
"default" = [ "smallvec" "fmt" "ansi" "tracing-log" "std" ];
"env-filter" = [ "matchers" "regex" "once_cell" "tracing" "std" "thread_local" ];
"fmt" = [ "registry" "std" ];
"json" = [ "tracing-serde" "serde" "serde_json" ];
"local-time" = [ "time/local-offset" ];
"matchers" = [ "dep:matchers" ];
"nu-ansi-term" = [ "dep:nu-ansi-term" ];
"once_cell" = [ "dep:once_cell" ];
"parking_lot" = [ "dep:parking_lot" ];
"regex" = [ "dep:regex" ];
"registry" = [ "sharded-slab" "thread_local" "std" ];
"serde" = [ "dep:serde" ];
"serde_json" = [ "dep:serde_json" ];
"sharded-slab" = [ "dep:sharded-slab" ];
"smallvec" = [ "dep:smallvec" ];
"std" = [ "alloc" "tracing-core/std" ];
"thread_local" = [ "dep:thread_local" ];
"time" = [ "dep:time" ];
"tracing" = [ "dep:tracing" ];
"tracing-log" = [ "dep:tracing-log" ];
"tracing-serde" = [ "dep:tracing-serde" ];
"valuable" = [ "tracing-core/valuable" "valuable_crate" "valuable-serde" "tracing-serde/valuable" ];
"valuable-serde" = [ "dep:valuable-serde" ];
"valuable_crate" = [ "dep:valuable_crate" ];
};
resolvedDefaultFeatures = [ "alloc" "ansi" "default" "fmt" "json" "nu-ansi-term" "registry" "serde" "serde_json" "sharded-slab" "smallvec" "std" "thread_local" "tracing-log" "tracing-serde" ];
};
"try-lock" = rec {
crateName = "try-lock";
version = "0.2.4";
edition = "2015";
sha256 = "1vc15paa4zi06ixsxihwbvfn24d708nsyg1ncgqwcrn42byyqa1m";
authors = [
"Sean McArthur <sean@seanmonstar.com>"
];
};
"tvix-castore" = rec {
crateName = "tvix-castore";
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 = ./castore; }
else ./castore;
dependencies = [
{
name = "async-stream";
packageId = "async-stream";
}
{
name = "blake3";
packageId = "blake3";
features = [ "rayon" "std" ];
}
{
name = "bytes";
packageId = "bytes";
}
{
name = "data-encoding";
packageId = "data-encoding";
}
{
name = "futures";
packageId = "futures";
}
{
name = "lazy_static";
packageId = "lazy_static";
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "prost";
packageId = "prost";
}
{
name = "sled";
packageId = "sled";
features = [ "compression" ];
}
{
name = "thiserror";
packageId = "thiserror";
}
{
name = "tokio";
packageId = "tokio";
features = [ "fs" "net" "rt-multi-thread" "signal" ];
}
{
name = "tokio-stream";
packageId = "tokio-stream";
features = [ "fs" "net" ];
}
{
name = "tokio-util";
packageId = "tokio-util";
features = [ "io" "io-util" ];
}
{
name = "tonic";
packageId = "tonic";
}
{
name = "tonic-reflection";
packageId = "tonic-reflection";
optional = true;
}
{
name = "tower";
packageId = "tower";
}
{
name = "tracing";
packageId = "tracing";
}
{
name = "url";
packageId = "url";
}
{
name = "walkdir";
packageId = "walkdir";
}
];
buildDependencies = [
{
name = "prost-build";
packageId = "prost-build";
}
{
name = "tonic-build";
packageId = "tonic-build";
}
];
devDependencies = [
{
name = "tempfile";
packageId = "tempfile";
}
{
name = "test-case";
packageId = "test-case";
}
{
name = "tonic-mock";
packageId = "tonic-mock";
}
];
features = {
"default" = [ "reflection" ];
"reflection" = [ "tonic-reflection" ];
"tonic-reflection" = [ "dep:tonic-reflection" ];
};
resolvedDefaultFeatures = [ "default" "reflection" "tonic-reflection" ];
};
"tvix-cli" = rec {
crateName = "tvix-cli";
version = "0.1.0";
edition = "2021";
crateBin = [
{
name = "tvix";
path = "src/main.rs";
requiredFeatures = [ ];
}
];
# 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 = ./cli; }
else ./cli;
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "clap";
packageId = "clap 4.2.7";
features = [ "derive" "env" ];
}
{
name = "dirs";
packageId = "dirs";
}
{
name = "nix-compat";
packageId = "nix-compat";
}
{
name = "rustyline";
packageId = "rustyline";
}
{
name = "thiserror";
packageId = "thiserror";
}
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
{
name = "tokio";
packageId = "tokio";
}
{
name = "tracing";
packageId = "tracing";
}
{
name = "tvix-castore";
packageId = "tvix-castore";
}
{
name = "tvix-eval";
packageId = "tvix-eval";
}
{
name = "tvix-store";
packageId = "tvix-store";
}
refactor(tvix/cli): use Wu-Manber string scanning for drv references Switch out the string-scanning algorithm used in the reference scanner. The construction of aho-corasick automata made up the vast majority of runtime when evaluating nixpkgs previously. While the actual scanning with a constructed automaton is relatively fast, we almost never scan for the same set of strings twice and the cost is not worth it. An algorithm that better matches our needs is the Wu-Manber multiple string match algorithm, which works efficiently on *long* and *random* strings of the *same length*, which describes store paths (up to their hash component). This switches the refscanner crate to a Rust implementation[0][1] of this algorithm. This has several implications: 1. This crate does not provide a way to scan streams. I'm not sure if this is an inherent problem with the algorithm (probably not, but it would need buffering). Either way, related functions and tests (which were actually unused) have been removed. 2. All strings need to be of the same length. For this reason, we truncate the known paths after their hash part (they are still unique, of course). 3. Passing an empty set of matches, or a match that is shorter than the length of a store path, causes the crate to panic. We safeguard against this by completely skipping the refscanning if there are no known paths (i.e. when evaluating the first derivation of an eval), and by bailing out of scanning a string that is shorter than a store path. On the upside, this reduces overall runtime to less 1/5 of what it was before when evaluating `pkgs.stdenv.drvPath`. [0]: Frankly, it's a random, research-grade MIT-licensed crate that I found on Github: https://github.com/jneem/wu-manber [1]: We probably want to rewrite or at least fork the above crate, and add things like a three-byte wide scanner. Evaluating large portions of nixpkgs can easily lead to more than 65k derivations being scanned for. Change-Id: I08926778e1e5d5a87fc9ac26e0437aed8bbd9eb0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8017 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2023-02-02 13:51:59 +01:00
{
name = "wu-manber";
packageId = "wu-manber";
}
];
};
"tvix-eval" = rec {
crateName = "tvix-eval";
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 = ./eval; }
else ./eval;
libName = "tvix_eval";
dependencies = [
{
name = "bytes";
packageId = "bytes";
}
{
name = "codemap";
packageId = "codemap";
}
{
name = "codemap-diagnostic";
packageId = "codemap-diagnostic";
}
{
name = "dirs";
packageId = "dirs";
}
{
name = "genawaiter";
packageId = "genawaiter";
usesDefaultFeatures = false;
}
{
name = "imbl";
packageId = "imbl";
features = [ "serde" ];
}
feat(tvix/eval): use lexical-core to format float Apparently our naive implementation of float formatting, which simply used {:.5}, and trimmed trailing "0" strings not sufficient. It wrongly trimmed numbers with zeroes but no decimal point, like `10000` got trimmed to `1`. Nix uses `std::to_string` on the double, which according to https://en.cppreference.com/w/cpp/string/basic_string/to_string is equivalent to `std::sprintf(buf, "%f", value)`. https://en.cppreference.com/w/cpp/io/c/fprintf mentions this is treated like this: > Precision specifies the exact number of digits to appear after > the decimal point character. The default precision is 6. In the > alternative implementation decimal point character is written even if > no digits follow it. For infinity and not-a-number conversion style > see notes. This doesn't seem to be the case though, and Nix uses scientific notation in some cases. There's a whole bunch of strategies to determine which is a more compact notation, and which notation should be used for a given number. https://github.com/rust-lang/rust/issues/24556 provides some pointers into various rabbit holes for those interested. This gist seems to be that currently a different formatting is not exposed in rust directly, at least not for public consumption. There is the [lexical-core](https://github.com/Alexhuszagh/rust-lexical) crate though, which provides a way to format floats with various strategies and formats. Change our implementation of `TotalDisplay` for the `Value::Float` case to use that. We still need to do some post-processing, because Nix always adds the sign in scientific notation (and there's no way to configure lexical-core to do that), and lexical-core in some cases keeps the trailing zeros. Even with all that in place, there as a difference in `eval-okay- fromjson.nix` (from tvix-tests), which I couldn't get to work. I updated the fixture to a less problematic number. With this, the testsuite passes again, and does for the upcoming CL introducing builtins.fromTOML, and enabling the nix testsuite bits for it, too. Change-Id: Ie6fba5619e1d9fd7ce669a51594658b029057acc Reviewed-on: https://cl.tvl.fyi/c/depot/+/7922 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-01-24 19:27:20 +01:00
{
name = "lazy_static";
packageId = "lazy_static";
}
{
name = "lexical-core";
packageId = "lexical-core";
features = [ "format" "parse-floats" ];
}
{
name = "path-clean";
packageId = "path-clean";
}
{
name = "proptest";
packageId = "proptest";
optional = true;
usesDefaultFeatures = false;
features = [ "std" "alloc" "break-dead-code" "tempfile" ];
}
{
name = "regex";
packageId = "regex";
}
{
name = "rnix";
packageId = "rnix";
}
{
name = "rowan";
packageId = "rowan";
}
{
name = "serde";
packageId = "serde";
features = [ "rc" "derive" ];
}
{
name = "serde_json";
packageId = "serde_json";
}
{
name = "smol_str";
packageId = "smol_str";
}
{
name = "tabwriter";
packageId = "tabwriter";
}
{
name = "test-strategy";
packageId = "test-strategy";
optional = true;
}
{
name = "toml";
packageId = "toml";
}
{
name = "tvix-eval-builtin-macros";
packageId = "tvix-eval-builtin-macros";
rename = "builtin-macros";
}
{
name = "xml-rs";
packageId = "xml-rs";
}
];
devDependencies = [
{
name = "criterion";
packageId = "criterion";
}
{
name = "itertools";
packageId = "itertools";
}
{
name = "pretty_assertions";
packageId = "pretty_assertions";
}
{
name = "tempdir";
packageId = "tempdir";
}
{
name = "test-generator";
packageId = "test-generator";
}
];
features = {
"arbitrary" = [ "proptest" "test-strategy" "imbl/proptest" ];
"default" = [ "impure" "arbitrary" "nix_tests" ];
"proptest" = [ "dep:proptest" ];
"test-strategy" = [ "dep:test-strategy" ];
};
resolvedDefaultFeatures = [ "arbitrary" "default" "impure" "nix_tests" "proptest" "test-strategy" ];
};
"tvix-eval-builtin-macros" = rec {
crateName = "tvix-eval-builtin-macros";
version = "0.0.1";
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 = ./eval/builtin-macros; }
else ./eval/builtin-macros;
procMacro = true;
authors = [
"Griffin Smith <root@gws.fyi>"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "full" "parsing" "printing" "visit" "visit-mut" "extra-traits" ];
}
];
devDependencies = [
{
name = "tvix-eval";
packageId = "tvix-eval";
}
];
};
"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";
features = [ "derive" ];
}
{
name = "tvix-eval";
packageId = "tvix-eval";
}
];
};
"tvix-store" = rec {
crateName = "tvix-store";
version = "0.1.0";
edition = "2021";
crateBin = [
{
name = "tvix-store";
path = "src/bin/tvix-store.rs";
requiredFeatures = [ ];
}
];
# 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 = ./store; }
else ./store;
dependencies = [
{
name = "anyhow";
packageId = "anyhow";
}
{
name = "async-stream";
packageId = "async-stream";
}
{
name = "blake3";
packageId = "blake3";
features = [ "rayon" "std" ];
}
{
name = "bytes";
packageId = "bytes";
}
{
name = "clap";
packageId = "clap 4.2.7";
features = [ "derive" "env" ];
}
{
name = "count-write";
packageId = "count-write";
}
{
name = "data-encoding";
packageId = "data-encoding";
}
{
name = "fuse-backend-rs";
packageId = "fuse-backend-rs";
optional = true;
}
{
name = "futures";
packageId = "futures";
}
{
name = "lazy_static";
packageId = "lazy_static";
}
{
name = "libc";
packageId = "libc";
optional = true;
}
{
name = "nix-compat";
packageId = "nix-compat";
}
{
name = "parking_lot";
packageId = "parking_lot 0.12.1";
}
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
{
name = "pin-project-lite";
packageId = "pin-project-lite";
}
{
name = "prost";
packageId = "prost";
}
{
name = "sha2";
packageId = "sha2";
}
{
name = "sled";
packageId = "sled";
features = [ "compression" ];
}
{
name = "thiserror";
packageId = "thiserror";
}
{
name = "tokio";
packageId = "tokio";
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
features = [ "fs" "net" "rt-multi-thread" "signal" ];
}
{
name = "tokio-stream";
packageId = "tokio-stream";
features = [ "fs" ];
}
{
name = "tokio-util";
packageId = "tokio-util";
features = [ "io" "io-util" ];
}
{
name = "tonic";
packageId = "tonic";
}
{
name = "tonic-reflection";
packageId = "tonic-reflection";
optional = true;
}
feat(tvix/store/directorysvc): add gRPC client This provides a GRPCDirectoryService struct implementing DirectoryService, allowing a client to Directory objects from a (remote) tvix-store. Remote in this case is anything outside the current process, be it another process, or an endpoint on the network. To keep the sync interface in the `DirectoryService` trait, a handle to some tokio runtime needs to be passed into the constructor, and the two methods use `self.tokio_handle.spawn` to start an async function, and `self.tokio_handle.block_on` to wait for its completion. The client handle, called `grpc_client` itself is easy to clone, and treats concurrent requests internally. This means, even though we keep the `DirectoryService` trait sync, there's nothing preventing it from being used concurrently, let's say from multiple threads. There's still two limitations for now: 1) The trait doesn't make use of the `recursive` request, which currently leads to a N+1 query problem. This can be fixed by `GRPCDirectoryService` having a reference to another `DirectoryService` acting as the local side. I want to wait for general store composition code to pop up before manually coding this here. 2) It's currently only possible to put() leaf directory nodes, as the request normally requires uploading a whole closure. We might want to add another batch function to upload a whole closure, and/or do this batching in certain cases. This still needs some more thinking. Change-Id: I7ffec791610b72c0960cf5307cefbb12ec946dc9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8336 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-03-23 13:49:57 +01:00
{
name = "tower";
packageId = "tower";
}
{
name = "tracing";
packageId = "tracing";
}
{
name = "tracing-subscriber";
packageId = "tracing-subscriber";
features = [ "json" ];
}
{
name = "tvix-castore";
packageId = "tvix-castore";
}
{
name = "url";
packageId = "url";
}
{
name = "walkdir";
packageId = "walkdir";
}
];
buildDependencies = [
{
name = "prost-build";
packageId = "prost-build";
}
{
name = "tonic-build";
packageId = "tonic-build";
}
];
devDependencies = [
{
name = "tempfile";
packageId = "tempfile";
}
{
name = "test-case";
packageId = "test-case";
}
{
name = "tonic-mock";
packageId = "tonic-mock";
}
];
features = {
"default" = [ "fuse" "reflection" ];
"fs" = [ "dep:libc" "dep:fuse-backend-rs" ];
"fuse" = [ "fs" ];
"reflection" = [ "tonic-reflection" ];
"tonic-reflection" = [ "dep:tonic-reflection" ];
};
resolvedDefaultFeatures = [ "default" "fs" "fuse" "reflection" "tonic-reflection" ];
};
"typenum" = rec {
crateName = "typenum";
version = "1.16.0";
edition = "2018";
sha256 = "1fhb9iaqyjn4dzn2vl86kxjhp4xpw5gynczlnqzf4x6rjgpn2ya9";
build = "build/main.rs";
authors = [
"Paho Lurie-Gregg <paho@paholg.com>"
"Andre Bogus <bogusandre@gmail.com>"
];
features = {
"scale-info" = [ "dep:scale-info" ];
"scale_info" = [ "scale-info/derive" ];
};
};
"unarray" = rec {
crateName = "unarray";
version = "0.1.4";
edition = "2018";
sha256 = "154smf048k84prsdgh09nkm2n0w0336v84jd4zikyn6v6jrqbspa";
};
"unicode-bidi" = rec {
crateName = "unicode-bidi";
version = "0.3.13";
edition = "2018";
sha256 = "0q0l7rdkiq54pan7a4ama39dgynaf1mnjj1nddrq1w1zayjqp24j";
libName = "unicode_bidi";
authors = [
"The Servo Project Developers"
];
features = {
"default" = [ "std" "hardcoded-data" ];
"flame" = [ "dep:flame" ];
"flame_it" = [ "flame" "flamer" ];
"flamer" = [ "dep:flamer" ];
"serde" = [ "dep:serde" ];
"with_serde" = [ "serde" ];
};
resolvedDefaultFeatures = [ "hardcoded-data" "std" ];
};
"unicode-ident" = rec {
crateName = "unicode-ident";
version = "1.0.8";
edition = "2018";
sha256 = "1x4v4v95fv9gn5zbpm23sa9awjvmclap1wh1lmikmw9rna3llip5";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
};
"unicode-normalization" = rec {
crateName = "unicode-normalization";
version = "0.1.22";
edition = "2018";
sha256 = "08d95g7b1irc578b2iyhzv4xhsa4pfvwsqxcl9lbcpabzkq16msw";
authors = [
"kwantam <kwantam@gmail.com>"
"Manish Goregaokar <manishsmail@gmail.com>"
];
dependencies = [
{
name = "tinyvec";
packageId = "tinyvec";
features = [ "alloc" ];
}
];
features = {
"default" = [ "std" ];
};
resolvedDefaultFeatures = [ "std" ];
};
"unicode-segmentation" = rec {
crateName = "unicode-segmentation";
version = "1.10.1";
edition = "2018";
sha256 = "0dky2hm5k51xy11hc3nk85p533rvghd462b6i0c532b7hl4j9mhx";
authors = [
"kwantam <kwantam@gmail.com>"
"Manish Goregaokar <manishsmail@gmail.com>"
];
features = { };
};
"unicode-width" = rec {
crateName = "unicode-width";
version = "0.1.10";
edition = "2015";
sha256 = "12vc3wv0qwg8rzcgb9bhaf5119dlmd6lmkhbfy1zfls6n7jx3vf0";
authors = [
"kwantam <kwantam@gmail.com>"
"Manish Goregaokar <manishsmail@gmail.com>"
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"rustc-dep-of-std" = [ "std" "core" "compiler_builtins" ];
"std" = [ "dep:std" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"unicode-xid" = rec {
crateName = "unicode-xid";
version = "0.1.0";
edition = "2015";
sha256 = "1z57lqh4s18rr4x0j4fw4fmp9hf9346h0kmdgqsqx0fhjr3k0wpw";
authors = [
"erick.tryzelaar <erick.tryzelaar@gmail.com>"
"kwantam <kwantam@gmail.com>"
];
features = { };
resolvedDefaultFeatures = [ "default" ];
};
"url" = rec {
crateName = "url";
version = "2.4.0";
edition = "2018";
sha256 = "1jw89ack5ldvajpzsvhq9sy12y2xqa2x0cbin62hl80r3s1zggsh";
authors = [
"The rust-url developers"
];
dependencies = [
{
name = "form_urlencoded";
packageId = "form_urlencoded";
}
{
name = "idna";
packageId = "idna";
}
{
name = "percent-encoding";
packageId = "percent-encoding";
}
];
features = {
"serde" = [ "dep:serde" ];
};
resolvedDefaultFeatures = [ "default" ];
};
"utf8parse" = rec {
crateName = "utf8parse";
version = "0.2.1";
edition = "2018";
sha256 = "02ip1a0az0qmc2786vxk2nqwsgcwf17d3a38fkf0q7hrmwh9c6vi";
authors = [
"Joe Wilm <joe@jwilm.com>"
"Christian Duerr <contact@christianduerr.com>"
];
features = { };
resolvedDefaultFeatures = [ "default" ];
};
"valuable" = rec {
crateName = "valuable";
version = "0.1.0";
edition = "2018";
sha256 = "0v9gp3nkjbl30z0fd56d8mx7w1csk86wwjhfjhr400wh9mfpw2w3";
features = {
"default" = [ "std" ];
"derive" = [ "valuable-derive" ];
"std" = [ "alloc" ];
"valuable-derive" = [ "dep:valuable-derive" ];
};
resolvedDefaultFeatures = [ "alloc" "std" ];
};
"version_check" = rec {
crateName = "version_check";
version = "0.9.4";
edition = "2015";
sha256 = "0gs8grwdlgh0xq660d7wr80x14vxbizmd8dbp29p2pdncx8lp1s9";
authors = [
"Sergio Benitez <sb@sergio.bz>"
];
};
"vm-memory" = rec {
crateName = "vm-memory";
version = "0.10.0";
edition = "2021";
sha256 = "0z423a8i4s3addq4yjad4ar5l6qwarjwdn94lismbd0mcqv712k8";
authors = [
"Liu Jiang <gerry@linux.alibaba.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
}
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "errhandlingapi" "sysinfoapi" ];
}
];
features = {
"arc-swap" = [ "dep:arc-swap" ];
"backend-atomic" = [ "arc-swap" ];
};
resolvedDefaultFeatures = [ "backend-mmap" "default" ];
};
"vmm-sys-util" = rec {
crateName = "vmm-sys-util";
version = "0.11.1";
edition = "2021";
sha256 = "0iigyzj4j6rqhrd4kdvjjrpga5qafrjddrr4qc0fd078v04zwr6x";
authors = [
"Intel Virtualization Team <vmm-maintainers@intel.com>"
];
dependencies = [
{
name = "bitflags";
packageId = "bitflags";
target = { target, features }: (("linux" == target."os") || ("android" == target."os"));
}
{
name = "libc";
packageId = "libc";
}
];
features = {
"serde" = [ "dep:serde" ];
"serde_derive" = [ "dep:serde_derive" ];
"with-serde" = [ "serde" "serde_derive" ];
};
};
"wait-timeout" = rec {
crateName = "wait-timeout";
version = "0.2.0";
edition = "2015";
crateBin = [ ];
sha256 = "1xpkk0j5l9pfmjfh1pi0i89invlavfrd9av5xp0zhxgb29dhy84z";
authors = [
"Alex Crichton <alex@alexcrichton.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
target = { target, features }: (target."unix" or false);
}
];
};
"walkdir" = rec {
crateName = "walkdir";
version = "2.4.0";
edition = "2018";
sha256 = "1vjl9fmfc4v8k9ald23qrpcbyb8dl1ynyq8d516cm537r1yqa7fp";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
];
dependencies = [
{
name = "same-file";
packageId = "same-file";
}
{
name = "winapi-util";
packageId = "winapi-util";
target = { target, features }: (target."windows" or false);
}
];
};
"want" = rec {
crateName = "want";
version = "0.3.0";
edition = "2018";
sha256 = "181b2zmwfq389x9n2g1n37cvcvvdand832zz6v8i1l8wrdlaks0w";
authors = [
"Sean McArthur <sean@seanmonstar.com>"
];
dependencies = [
{
name = "log";
packageId = "log";
}
{
name = "try-lock";
packageId = "try-lock";
}
];
};
"wasi" = rec {
crateName = "wasi";
version = "0.11.0+wasi-snapshot-preview1";
edition = "2018";
sha256 = "08z4hxwkpdpalxjps1ai9y7ihin26y9f476i53dv98v45gkqg3cw";
authors = [
"The Cranelift Project Developers"
];
features = {
"compiler_builtins" = [ "dep:compiler_builtins" ];
"core" = [ "dep:core" ];
"default" = [ "std" ];
"rustc-dep-of-std" = [ "compiler_builtins" "core" "rustc-std-workspace-alloc" ];
"rustc-std-workspace-alloc" = [ "dep:rustc-std-workspace-alloc" ];
};
resolvedDefaultFeatures = [ "default" "std" ];
};
"wasm-bindgen" = rec {
crateName = "wasm-bindgen";
version = "0.2.84";
edition = "2018";
sha256 = "0fx5gh0b4n6znfa3blz92wn1k4bbiysyq9m95s7rn3gk46ydry1i";
authors = [
"The wasm-bindgen Developers"
];
dependencies = [
{
name = "cfg-if";
packageId = "cfg-if";
}
{
name = "wasm-bindgen-macro";
packageId = "wasm-bindgen-macro";
}
];
features = {
"default" = [ "spans" "std" ];
"enable-interning" = [ "std" ];
"serde" = [ "dep:serde" ];
"serde-serialize" = [ "serde" "serde_json" "std" ];
"serde_json" = [ "dep:serde_json" ];
"spans" = [ "wasm-bindgen-macro/spans" ];
"strict-macro" = [ "wasm-bindgen-macro/strict-macro" ];
"xxx_debug_only_print_generated_code" = [ "wasm-bindgen-macro/xxx_debug_only_print_generated_code" ];
};
resolvedDefaultFeatures = [ "default" "spans" "std" ];
};
"wasm-bindgen-backend" = rec {
crateName = "wasm-bindgen-backend";
version = "0.2.84";
edition = "2018";
sha256 = "1ffc0wb293ha56i66f830x7f8aa2xql69a21lrasy1ncbgyr1klm";
authors = [
"The wasm-bindgen Developers"
];
dependencies = [
{
name = "bumpalo";
packageId = "bumpalo";
}
{
name = "log";
packageId = "log";
}
{
name = "once_cell";
packageId = "once_cell";
}
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "full" ];
}
{
name = "wasm-bindgen-shared";
packageId = "wasm-bindgen-shared";
}
];
features = {
"extra-traits" = [ "syn/extra-traits" ];
};
resolvedDefaultFeatures = [ "spans" ];
};
"wasm-bindgen-macro" = rec {
crateName = "wasm-bindgen-macro";
version = "0.2.84";
edition = "2018";
sha256 = "1idlq28awqhq8rclb22rn5xix82w9a4rgy11vkapzhzd1dygf8ac";
procMacro = true;
authors = [
"The wasm-bindgen Developers"
];
dependencies = [
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "wasm-bindgen-macro-support";
packageId = "wasm-bindgen-macro-support";
}
];
features = {
"spans" = [ "wasm-bindgen-macro-support/spans" ];
"strict-macro" = [ "wasm-bindgen-macro-support/strict-macro" ];
};
resolvedDefaultFeatures = [ "spans" ];
};
"wasm-bindgen-macro-support" = rec {
crateName = "wasm-bindgen-macro-support";
version = "0.2.84";
edition = "2018";
sha256 = "1xm56lpi0rihh8ny7x085dgs3jdm47spgqflb98wghyadwq83zra";
authors = [
"The wasm-bindgen Developers"
];
dependencies = [
{
name = "proc-macro2";
packageId = "proc-macro2 1.0.56";
}
{
name = "quote";
packageId = "quote 1.0.26";
}
{
name = "syn";
packageId = "syn 1.0.109";
features = [ "visit" "full" ];
}
{
name = "wasm-bindgen-backend";
packageId = "wasm-bindgen-backend";
}
{
name = "wasm-bindgen-shared";
packageId = "wasm-bindgen-shared";
}
];
features = {
"extra-traits" = [ "syn/extra-traits" ];
"spans" = [ "wasm-bindgen-backend/spans" ];
};
resolvedDefaultFeatures = [ "spans" ];
};
"wasm-bindgen-shared" = rec {
crateName = "wasm-bindgen-shared";
version = "0.2.84";
edition = "2018";
sha256 = "0pcvk1c97r1pprzfaxxn359r0wqg5bm33ylbwgjh8f4cwbvzwih0";
authors = [
"The wasm-bindgen Developers"
];
};
"web-sys" = rec {
crateName = "web-sys";
version = "0.3.61";
edition = "2018";
sha256 = "15qbbdbhyz02srvm01p0cvlh0pvmbbin9hislp0yx8rvnbs9jfz3";
authors = [
"The wasm-bindgen Developers"
];
dependencies = [
{
name = "js-sys";
packageId = "js-sys";
}
{
name = "wasm-bindgen";
packageId = "wasm-bindgen";
}
];
features = {
"AbortSignal" = [ "EventTarget" ];
"AnalyserNode" = [ "AudioNode" "EventTarget" ];
"Animation" = [ "EventTarget" ];
"AnimationEvent" = [ "Event" ];
"AnimationPlaybackEvent" = [ "Event" ];
"Attr" = [ "EventTarget" "Node" ];
"AudioBufferSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ];
"AudioContext" = [ "BaseAudioContext" "EventTarget" ];
"AudioDestinationNode" = [ "AudioNode" "EventTarget" ];
"AudioNode" = [ "EventTarget" ];
"AudioProcessingEvent" = [ "Event" ];
"AudioScheduledSourceNode" = [ "AudioNode" "EventTarget" ];
"AudioStreamTrack" = [ "EventTarget" "MediaStreamTrack" ];
"AudioTrackList" = [ "EventTarget" ];
"AudioWorklet" = [ "Worklet" ];
"AudioWorkletGlobalScope" = [ "WorkletGlobalScope" ];
"AudioWorkletNode" = [ "AudioNode" "EventTarget" ];
"AuthenticatorAssertionResponse" = [ "AuthenticatorResponse" ];
"AuthenticatorAttestationResponse" = [ "AuthenticatorResponse" ];
"BaseAudioContext" = [ "EventTarget" ];
"BatteryManager" = [ "EventTarget" ];
"BeforeUnloadEvent" = [ "Event" ];
"BiquadFilterNode" = [ "AudioNode" "EventTarget" ];
"BlobEvent" = [ "Event" ];
"Bluetooth" = [ "EventTarget" ];
"BluetoothAdvertisingEvent" = [ "Event" ];
"BluetoothDevice" = [ "EventTarget" ];
"BluetoothPermissionResult" = [ "EventTarget" "PermissionStatus" ];
"BluetoothRemoteGattCharacteristic" = [ "EventTarget" ];
"BluetoothRemoteGattService" = [ "EventTarget" ];
"BroadcastChannel" = [ "EventTarget" ];
"CanvasCaptureMediaStream" = [ "EventTarget" "MediaStream" ];
"CdataSection" = [ "CharacterData" "EventTarget" "Node" "Text" ];
"ChannelMergerNode" = [ "AudioNode" "EventTarget" ];
"ChannelSplitterNode" = [ "AudioNode" "EventTarget" ];
"CharacterData" = [ "EventTarget" "Node" ];
"ChromeWorker" = [ "EventTarget" "Worker" ];
"Clipboard" = [ "EventTarget" ];
"ClipboardEvent" = [ "Event" ];
"CloseEvent" = [ "Event" ];
"Comment" = [ "CharacterData" "EventTarget" "Node" ];
"CompositionEvent" = [ "Event" "UiEvent" ];
"ConstantSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ];
"ConvolverNode" = [ "AudioNode" "EventTarget" ];
"CssAnimation" = [ "Animation" "EventTarget" ];
"CssConditionRule" = [ "CssGroupingRule" "CssRule" ];
"CssCounterStyleRule" = [ "CssRule" ];
"CssFontFaceRule" = [ "CssRule" ];
"CssFontFeatureValuesRule" = [ "CssRule" ];
"CssGroupingRule" = [ "CssRule" ];
"CssImportRule" = [ "CssRule" ];
"CssKeyframeRule" = [ "CssRule" ];
"CssKeyframesRule" = [ "CssRule" ];
"CssMediaRule" = [ "CssConditionRule" "CssGroupingRule" "CssRule" ];
"CssNamespaceRule" = [ "CssRule" ];
"CssPageRule" = [ "CssRule" ];
"CssStyleRule" = [ "CssRule" ];
"CssStyleSheet" = [ "StyleSheet" ];
"CssSupportsRule" = [ "CssConditionRule" "CssGroupingRule" "CssRule" ];
"CssTransition" = [ "Animation" "EventTarget" ];
"CustomEvent" = [ "Event" ];
"DedicatedWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ];
"DelayNode" = [ "AudioNode" "EventTarget" ];
"DeviceLightEvent" = [ "Event" ];
"DeviceMotionEvent" = [ "Event" ];
"DeviceOrientationEvent" = [ "Event" ];
"DeviceProximityEvent" = [ "Event" ];
"Document" = [ "EventTarget" "Node" ];
"DocumentFragment" = [ "EventTarget" "Node" ];
"DocumentTimeline" = [ "AnimationTimeline" ];
"DocumentType" = [ "EventTarget" "Node" ];
"DomMatrix" = [ "DomMatrixReadOnly" ];
"DomPoint" = [ "DomPointReadOnly" ];
"DomRect" = [ "DomRectReadOnly" ];
"DomRequest" = [ "EventTarget" ];
"DragEvent" = [ "Event" "MouseEvent" "UiEvent" ];
"DynamicsCompressorNode" = [ "AudioNode" "EventTarget" ];
"Element" = [ "EventTarget" "Node" ];
"ErrorEvent" = [ "Event" ];
"EventSource" = [ "EventTarget" ];
"ExtendableEvent" = [ "Event" ];
"ExtendableMessageEvent" = [ "Event" "ExtendableEvent" ];
"FetchEvent" = [ "Event" "ExtendableEvent" ];
"FetchObserver" = [ "EventTarget" ];
"File" = [ "Blob" ];
"FileReader" = [ "EventTarget" ];
"FileSystemDirectoryEntry" = [ "FileSystemEntry" ];
"FileSystemFileEntry" = [ "FileSystemEntry" ];
"FocusEvent" = [ "Event" "UiEvent" ];
"FontFaceSet" = [ "EventTarget" ];
"FontFaceSetLoadEvent" = [ "Event" ];
"GainNode" = [ "AudioNode" "EventTarget" ];
"GamepadAxisMoveEvent" = [ "Event" "GamepadEvent" ];
"GamepadButtonEvent" = [ "Event" "GamepadEvent" ];
"GamepadEvent" = [ "Event" ];
"GpuDevice" = [ "EventTarget" ];
"GpuInternalError" = [ "GpuError" ];
"GpuOutOfMemoryError" = [ "GpuError" ];
"GpuUncapturedErrorEvent" = [ "Event" ];
"GpuValidationError" = [ "GpuError" ];
"HashChangeEvent" = [ "Event" ];
"Hid" = [ "EventTarget" ];
"HidConnectionEvent" = [ "Event" ];
"HidDevice" = [ "EventTarget" ];
"HidInputReportEvent" = [ "Event" ];
"HtmlAnchorElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlAreaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlAudioElement" = [ "Element" "EventTarget" "HtmlElement" "HtmlMediaElement" "Node" ];
"HtmlBaseElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlBodyElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlBrElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlButtonElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlCanvasElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlDListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlDataElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlDataListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlDetailsElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlDialogElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlDirectoryElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlDivElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlDocument" = [ "Document" "EventTarget" "Node" ];
"HtmlElement" = [ "Element" "EventTarget" "Node" ];
"HtmlEmbedElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlFieldSetElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlFontElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlFormControlsCollection" = [ "HtmlCollection" ];
"HtmlFormElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlFrameElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlFrameSetElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlHeadElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlHeadingElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlHrElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlHtmlElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlIFrameElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlImageElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlInputElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlLabelElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlLegendElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlLiElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlLinkElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlMapElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlMediaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlMenuElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlMenuItemElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlMetaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlMeterElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlModElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlOListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlObjectElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlOptGroupElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlOptionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlOptionsCollection" = [ "HtmlCollection" ];
"HtmlOutputElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlParagraphElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlParamElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlPictureElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlPreElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlProgressElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlQuoteElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlScriptElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlSelectElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlSlotElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlSourceElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlSpanElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlStyleElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTableCaptionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTableCellElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTableColElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTableElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTableRowElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTableSectionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTemplateElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTextAreaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTimeElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTitleElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlTrackElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlUListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlUnknownElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
"HtmlVideoElement" = [ "Element" "EventTarget" "HtmlElement" "HtmlMediaElement" "Node" ];
"IdbCursorWithValue" = [ "IdbCursor" ];
"IdbDatabase" = [ "EventTarget" ];
"IdbFileHandle" = [ "EventTarget" ];
"IdbFileRequest" = [ "DomRequest" "EventTarget" ];
"IdbLocaleAwareKeyRange" = [ "IdbKeyRange" ];
"IdbMutableFile" = [ "EventTarget" ];
"IdbOpenDbRequest" = [ "EventTarget" "IdbRequest" ];
"IdbRequest" = [ "EventTarget" ];
"IdbTransaction" = [ "EventTarget" ];
"IdbVersionChangeEvent" = [ "Event" ];
"IirFilterNode" = [ "AudioNode" "EventTarget" ];
"ImageCaptureErrorEvent" = [ "Event" ];
"ImageTrack" = [ "EventTarget" ];
"InputEvent" = [ "Event" "UiEvent" ];
"KeyboardEvent" = [ "Event" "UiEvent" ];
"KeyframeEffect" = [ "AnimationEffect" ];
"LocalMediaStream" = [ "EventTarget" "MediaStream" ];
"MediaDevices" = [ "EventTarget" ];
"MediaElementAudioSourceNode" = [ "AudioNode" "EventTarget" ];
"MediaEncryptedEvent" = [ "Event" ];
"MediaKeyError" = [ "Event" ];
"MediaKeyMessageEvent" = [ "Event" ];
"MediaKeySession" = [ "EventTarget" ];
"MediaQueryList" = [ "EventTarget" ];
"MediaQueryListEvent" = [ "Event" ];
"MediaRecorder" = [ "EventTarget" ];
"MediaRecorderErrorEvent" = [ "Event" ];
"MediaSource" = [ "EventTarget" ];
"MediaStream" = [ "EventTarget" ];
"MediaStreamAudioDestinationNode" = [ "AudioNode" "EventTarget" ];
"MediaStreamAudioSourceNode" = [ "AudioNode" "EventTarget" ];
"MediaStreamEvent" = [ "Event" ];
"MediaStreamTrack" = [ "EventTarget" ];
"MediaStreamTrackEvent" = [ "Event" ];
"MediaStreamTrackGenerator" = [ "EventTarget" "MediaStreamTrack" ];
"MessageEvent" = [ "Event" ];
"MessagePort" = [ "EventTarget" ];
"MidiAccess" = [ "EventTarget" ];
"MidiConnectionEvent" = [ "Event" ];
"MidiInput" = [ "EventTarget" "MidiPort" ];
"MidiMessageEvent" = [ "Event" ];
"MidiOutput" = [ "EventTarget" "MidiPort" ];
"MidiPort" = [ "EventTarget" ];
"MouseEvent" = [ "Event" "UiEvent" ];
"MouseScrollEvent" = [ "Event" "MouseEvent" "UiEvent" ];
"MutationEvent" = [ "Event" ];
"NetworkInformation" = [ "EventTarget" ];
"Node" = [ "EventTarget" ];
"Notification" = [ "EventTarget" ];
"NotificationEvent" = [ "Event" "ExtendableEvent" ];
"OfflineAudioCompletionEvent" = [ "Event" ];
"OfflineAudioContext" = [ "BaseAudioContext" "EventTarget" ];
"OfflineResourceList" = [ "EventTarget" ];
"OffscreenCanvas" = [ "EventTarget" ];
"OscillatorNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ];
"PageTransitionEvent" = [ "Event" ];
"PaintWorkletGlobalScope" = [ "WorkletGlobalScope" ];
"PannerNode" = [ "AudioNode" "EventTarget" ];
"PaymentMethodChangeEvent" = [ "Event" "PaymentRequestUpdateEvent" ];
"PaymentRequestUpdateEvent" = [ "Event" ];
"Performance" = [ "EventTarget" ];
"PerformanceMark" = [ "PerformanceEntry" ];
"PerformanceMeasure" = [ "PerformanceEntry" ];
"PerformanceNavigationTiming" = [ "PerformanceEntry" "PerformanceResourceTiming" ];
"PerformanceResourceTiming" = [ "PerformanceEntry" ];
"PermissionStatus" = [ "EventTarget" ];
"PointerEvent" = [ "Event" "MouseEvent" "UiEvent" ];
"PopStateEvent" = [ "Event" ];
"PopupBlockedEvent" = [ "Event" ];
"PresentationAvailability" = [ "EventTarget" ];
"PresentationConnection" = [ "EventTarget" ];
"PresentationConnectionAvailableEvent" = [ "Event" ];
"PresentationConnectionCloseEvent" = [ "Event" ];
"PresentationConnectionList" = [ "EventTarget" ];
"PresentationRequest" = [ "EventTarget" ];
"ProcessingInstruction" = [ "CharacterData" "EventTarget" "Node" ];
"ProgressEvent" = [ "Event" ];
"PromiseRejectionEvent" = [ "Event" ];
"PublicKeyCredential" = [ "Credential" ];
"PushEvent" = [ "Event" "ExtendableEvent" ];
"RadioNodeList" = [ "NodeList" ];
"RtcDataChannel" = [ "EventTarget" ];
"RtcDataChannelEvent" = [ "Event" ];
"RtcPeerConnection" = [ "EventTarget" ];
"RtcPeerConnectionIceEvent" = [ "Event" ];
"RtcTrackEvent" = [ "Event" ];
"RtcdtmfSender" = [ "EventTarget" ];
"RtcdtmfToneChangeEvent" = [ "Event" ];
"Screen" = [ "EventTarget" ];
"ScreenOrientation" = [ "EventTarget" ];
"ScriptProcessorNode" = [ "AudioNode" "EventTarget" ];
"ScrollAreaEvent" = [ "Event" "UiEvent" ];
"SecurityPolicyViolationEvent" = [ "Event" ];
"Serial" = [ "EventTarget" ];
"SerialPort" = [ "EventTarget" ];
"ServiceWorker" = [ "EventTarget" ];
"ServiceWorkerContainer" = [ "EventTarget" ];
"ServiceWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ];
"ServiceWorkerRegistration" = [ "EventTarget" ];
"ShadowRoot" = [ "DocumentFragment" "EventTarget" "Node" ];
"SharedWorker" = [ "EventTarget" ];
"SharedWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ];
"SourceBuffer" = [ "EventTarget" ];
"SourceBufferList" = [ "EventTarget" ];
"SpeechRecognition" = [ "EventTarget" ];
"SpeechRecognitionError" = [ "Event" ];
"SpeechRecognitionEvent" = [ "Event" ];
"SpeechSynthesis" = [ "EventTarget" ];
"SpeechSynthesisErrorEvent" = [ "Event" "SpeechSynthesisEvent" ];
"SpeechSynthesisEvent" = [ "Event" ];
"SpeechSynthesisUtterance" = [ "EventTarget" ];
"StereoPannerNode" = [ "AudioNode" "EventTarget" ];
"StorageEvent" = [ "Event" ];
"SubmitEvent" = [ "Event" ];
"SvgAnimateElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ];
"SvgAnimateMotionElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ];
"SvgAnimateTransformElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ];
"SvgAnimationElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgCircleElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
"SvgClipPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgComponentTransferFunctionElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgDefsElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgDescElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgElement" = [ "Element" "EventTarget" "Node" ];
"SvgEllipseElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
"SvgFilterElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgForeignObjectElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgGeometryElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgGraphicsElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgImageElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgLineElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
"SvgLinearGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGradientElement" ];
"SvgMarkerElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgMaskElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgMetadataElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
"SvgPathSegArcAbs" = [ "SvgPathSeg" ];
"SvgPathSegArcRel" = [ "SvgPathSeg" ];
"SvgPathSegClosePath" = [ "SvgPathSeg" ];
"SvgPathSegCurvetoCubicAbs" = [ "SvgPathSeg" ];
"SvgPathSegCurvetoCubicRel" = [ "SvgPathSeg" ];
"SvgPathSegCurvetoCubicSmoothAbs" = [ "SvgPathSeg" ];
"SvgPathSegCurvetoCubicSmoothRel" = [ "SvgPathSeg" ];
"SvgPathSegCurvetoQuadraticAbs" = [ "SvgPathSeg" ];
"SvgPathSegCurvetoQuadraticRel" = [ "SvgPathSeg" ];
"SvgPathSegCurvetoQuadraticSmoothAbs" = [ "SvgPathSeg" ];
"SvgPathSegCurvetoQuadraticSmoothRel" = [ "SvgPathSeg" ];
"SvgPathSegLinetoAbs" = [ "SvgPathSeg" ];
"SvgPathSegLinetoHorizontalAbs" = [ "SvgPathSeg" ];
"SvgPathSegLinetoHorizontalRel" = [ "SvgPathSeg" ];
"SvgPathSegLinetoRel" = [ "SvgPathSeg" ];
"SvgPathSegLinetoVerticalAbs" = [ "SvgPathSeg" ];
"SvgPathSegLinetoVerticalRel" = [ "SvgPathSeg" ];
"SvgPathSegMovetoAbs" = [ "SvgPathSeg" ];
"SvgPathSegMovetoRel" = [ "SvgPathSeg" ];
"SvgPatternElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgPolygonElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
"SvgPolylineElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
"SvgRadialGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGradientElement" ];
"SvgRectElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
"SvgScriptElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgSetElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ];
"SvgStopElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgStyleElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgSwitchElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgSymbolElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgTextContentElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgTextElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" "SvgTextPositioningElement" ];
"SvgTextPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" ];
"SvgTextPositioningElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" ];
"SvgTitleElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgUseElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgViewElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgaElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgfeBlendElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeColorMatrixElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeComponentTransferElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeCompositeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeConvolveMatrixElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeDiffuseLightingElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeDisplacementMapElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeDistantLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeDropShadowElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeFloodElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeFuncAElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ];
"SvgfeFuncBElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ];
"SvgfeFuncGElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ];
"SvgfeFuncRElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ];
"SvgfeGaussianBlurElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeImageElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeMergeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeMergeNodeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeMorphologyElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeOffsetElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfePointLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeSpecularLightingElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeSpotLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeTileElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgfeTurbulenceElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvggElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgmPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
"SvgsvgElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
"SvgtSpanElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" "SvgTextPositioningElement" ];
"TcpServerSocket" = [ "EventTarget" ];
"TcpServerSocketEvent" = [ "Event" ];
"TcpSocket" = [ "EventTarget" ];
"TcpSocketErrorEvent" = [ "Event" ];
"TcpSocketEvent" = [ "Event" ];
"Text" = [ "CharacterData" "EventTarget" "Node" ];
"TextTrack" = [ "EventTarget" ];
"TextTrackCue" = [ "EventTarget" ];
"TextTrackList" = [ "EventTarget" ];
"TimeEvent" = [ "Event" ];
"TouchEvent" = [ "Event" "UiEvent" ];
"TrackEvent" = [ "Event" ];
"TransitionEvent" = [ "Event" ];
"UiEvent" = [ "Event" ];
"Usb" = [ "EventTarget" ];
"UsbConnectionEvent" = [ "Event" ];
"UsbPermissionResult" = [ "EventTarget" "PermissionStatus" ];
"UserProximityEvent" = [ "Event" ];
"ValueEvent" = [ "Event" ];
"VideoStreamTrack" = [ "EventTarget" "MediaStreamTrack" ];
"VideoTrackList" = [ "EventTarget" ];
"VrDisplay" = [ "EventTarget" ];
"VttCue" = [ "EventTarget" "TextTrackCue" ];
"WakeLockSentinel" = [ "EventTarget" ];
"WaveShaperNode" = [ "AudioNode" "EventTarget" ];
"WebGlContextEvent" = [ "Event" ];
"WebKitCssMatrix" = [ "DomMatrix" "DomMatrixReadOnly" ];
"WebSocket" = [ "EventTarget" ];
"WheelEvent" = [ "Event" "MouseEvent" "UiEvent" ];
"Window" = [ "EventTarget" ];
"WindowClient" = [ "Client" ];
"Worker" = [ "EventTarget" ];
"WorkerDebuggerGlobalScope" = [ "EventTarget" ];
"WorkerGlobalScope" = [ "EventTarget" ];
"XmlDocument" = [ "Document" "EventTarget" "Node" ];
"XmlHttpRequest" = [ "EventTarget" "XmlHttpRequestEventTarget" ];
"XmlHttpRequestEventTarget" = [ "EventTarget" ];
"XmlHttpRequestUpload" = [ "EventTarget" "XmlHttpRequestEventTarget" ];
"XrBoundedReferenceSpace" = [ "EventTarget" "XrReferenceSpace" "XrSpace" ];
"XrHand" = [ "XrHandJoint" ];
"XrInputSourceEvent" = [ "Event" ];
"XrInputSourcesChangeEvent" = [ "Event" ];
"XrLayer" = [ "EventTarget" ];
"XrPermissionStatus" = [ "EventTarget" "PermissionStatus" ];
"XrReferenceSpace" = [ "EventTarget" "XrSpace" ];
"XrReferenceSpaceEvent" = [ "Event" ];
"XrSession" = [ "EventTarget" ];
"XrSessionEvent" = [ "Event" ];
"XrSpace" = [ "EventTarget" ];
"XrSystem" = [ "EventTarget" ];
"XrViewerPose" = [ "XrPose" ];
"XrWebGlLayer" = [ "EventTarget" "XrLayer" ];
};
resolvedDefaultFeatures = [ "CanvasRenderingContext2d" "Document" "DomRect" "DomRectReadOnly" "Element" "EventTarget" "HtmlCanvasElement" "HtmlElement" "Node" "Window" ];
};
"which" = rec {
crateName = "which";
version = "4.4.0";
edition = "2018";
sha256 = "0sd24r17q4j3hc2yjjrg9q4qya1y4n9zq0bj9c2rla1bqn2cfh94";
authors = [
"Harry Fei <tiziyuanfang@gmail.com>"
];
dependencies = [
{
name = "either";
packageId = "either";
}
{
name = "libc";
packageId = "libc";
}
{
name = "once_cell";
packageId = "once_cell";
target = { target, features }: (target."windows" or false);
}
];
features = {
"regex" = [ "dep:regex" ];
};
};
"winapi" = rec {
crateName = "winapi";
version = "0.3.9";
edition = "2015";
sha256 = "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw";
authors = [
"Peter Atashian <retep998@gmail.com>"
];
dependencies = [
{
name = "winapi-i686-pc-windows-gnu";
packageId = "winapi-i686-pc-windows-gnu";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "i686-pc-windows-gnu");
}
{
name = "winapi-x86_64-pc-windows-gnu";
packageId = "winapi-x86_64-pc-windows-gnu";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnu");
}
];
features = {
"debug" = [ "impl-debug" ];
};
resolvedDefaultFeatures = [ "basetsd" "consoleapi" "errhandlingapi" "fileapi" "handleapi" "knownfolders" "minwinbase" "minwindef" "ntsecapi" "ntstatus" "objbase" "processenv" "processthreadsapi" "profileapi" "shellapi" "shlobj" "std" "stringapiset" "synchapi" "sysinfoapi" "winbase" "wincon" "winerror" "winnt" "winuser" "ws2ipdef" "ws2tcpip" ];
};
"winapi-i686-pc-windows-gnu" = rec {
crateName = "winapi-i686-pc-windows-gnu";
version = "0.4.0";
edition = "2015";
sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc";
authors = [
"Peter Atashian <retep998@gmail.com>"
];
};
"winapi-util" = rec {
crateName = "winapi-util";
version = "0.1.5";
edition = "2018";
sha256 = "0y71bp7f6d536czj40dhqk0d55wfbbwqfp2ymqf1an5ibgl6rv3h";
authors = [
"Andrew Gallant <jamslam@gmail.com>"
];
dependencies = [
{
name = "winapi";
packageId = "winapi";
target = { target, features }: (target."windows" or false);
features = [ "std" "consoleapi" "errhandlingapi" "fileapi" "minwindef" "processenv" "winbase" "wincon" "winerror" "winnt" ];
}
];
};
"winapi-x86_64-pc-windows-gnu" = rec {
crateName = "winapi-x86_64-pc-windows-gnu";
version = "0.4.0";
edition = "2015";
sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki";
authors = [
"Peter Atashian <retep998@gmail.com>"
];
};
"windows-sys 0.45.0" = rec {
crateName = "windows-sys";
version = "0.45.0";
edition = "2018";
sha256 = "1l36bcqm4g89pknfp8r9rl1w4bn017q6a8qlx8viv0xjxzjkna3m";
authors = [
"Microsoft"
];
dependencies = [
{
name = "windows-targets";
packageId = "windows-targets 0.42.2";
target = { target, features }: (!(target."windows_raw_dylib" or false));
}
];
features = {
"Win32_Data" = [ "Win32" ];
"Win32_Data_HtmlHelp" = [ "Win32_Data" ];
"Win32_Data_RightsManagement" = [ "Win32_Data" ];
"Win32_Data_Xml" = [ "Win32_Data" ];
"Win32_Data_Xml_MsXml" = [ "Win32_Data_Xml" ];
"Win32_Data_Xml_XmlLite" = [ "Win32_Data_Xml" ];
"Win32_Devices" = [ "Win32" ];
"Win32_Devices_AllJoyn" = [ "Win32_Devices" ];
"Win32_Devices_BiometricFramework" = [ "Win32_Devices" ];
"Win32_Devices_Bluetooth" = [ "Win32_Devices" ];
"Win32_Devices_Communication" = [ "Win32_Devices" ];
"Win32_Devices_DeviceAccess" = [ "Win32_Devices" ];
"Win32_Devices_DeviceAndDriverInstallation" = [ "Win32_Devices" ];
"Win32_Devices_DeviceQuery" = [ "Win32_Devices" ];
"Win32_Devices_Display" = [ "Win32_Devices" ];
"Win32_Devices_Enumeration" = [ "Win32_Devices" ];
"Win32_Devices_Enumeration_Pnp" = [ "Win32_Devices_Enumeration" ];
"Win32_Devices_Fax" = [ "Win32_Devices" ];
"Win32_Devices_FunctionDiscovery" = [ "Win32_Devices" ];
"Win32_Devices_Geolocation" = [ "Win32_Devices" ];
"Win32_Devices_HumanInterfaceDevice" = [ "Win32_Devices" ];
"Win32_Devices_ImageAcquisition" = [ "Win32_Devices" ];
"Win32_Devices_PortableDevices" = [ "Win32_Devices" ];
"Win32_Devices_Properties" = [ "Win32_Devices" ];
"Win32_Devices_Pwm" = [ "Win32_Devices" ];
"Win32_Devices_Sensors" = [ "Win32_Devices" ];
"Win32_Devices_SerialCommunication" = [ "Win32_Devices" ];
"Win32_Devices_Tapi" = [ "Win32_Devices" ];
"Win32_Devices_Usb" = [ "Win32_Devices" ];
"Win32_Devices_WebServicesOnDevices" = [ "Win32_Devices" ];
"Win32_Foundation" = [ "Win32" ];
"Win32_Gaming" = [ "Win32" ];
"Win32_Globalization" = [ "Win32" ];
"Win32_Graphics" = [ "Win32" ];
"Win32_Graphics_Dwm" = [ "Win32_Graphics" ];
"Win32_Graphics_Gdi" = [ "Win32_Graphics" ];
"Win32_Graphics_Hlsl" = [ "Win32_Graphics" ];
"Win32_Graphics_OpenGL" = [ "Win32_Graphics" ];
"Win32_Graphics_Printing" = [ "Win32_Graphics" ];
"Win32_Graphics_Printing_PrintTicket" = [ "Win32_Graphics_Printing" ];
"Win32_Management" = [ "Win32" ];
"Win32_Management_MobileDeviceManagementRegistration" = [ "Win32_Management" ];
"Win32_Media" = [ "Win32" ];
"Win32_Media_Audio" = [ "Win32_Media" ];
"Win32_Media_Audio_Apo" = [ "Win32_Media_Audio" ];
"Win32_Media_Audio_DirectMusic" = [ "Win32_Media_Audio" ];
"Win32_Media_Audio_Endpoints" = [ "Win32_Media_Audio" ];
"Win32_Media_Audio_XAudio2" = [ "Win32_Media_Audio" ];
"Win32_Media_DeviceManager" = [ "Win32_Media" ];
"Win32_Media_DxMediaObjects" = [ "Win32_Media" ];
"Win32_Media_KernelStreaming" = [ "Win32_Media" ];
"Win32_Media_LibrarySharingServices" = [ "Win32_Media" ];
"Win32_Media_MediaPlayer" = [ "Win32_Media" ];
"Win32_Media_Multimedia" = [ "Win32_Media" ];
"Win32_Media_Speech" = [ "Win32_Media" ];
"Win32_Media_Streaming" = [ "Win32_Media" ];
"Win32_Media_WindowsMediaFormat" = [ "Win32_Media" ];
"Win32_NetworkManagement" = [ "Win32" ];
"Win32_NetworkManagement_Dhcp" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Dns" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_InternetConnectionWizard" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_IpHelper" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_MobileBroadband" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Multicast" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Ndis" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetBios" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetManagement" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetShell" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetworkDiagnosticsFramework" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetworkPolicyServer" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_P2P" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_QoS" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Rras" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Snmp" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WNet" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WebDav" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WiFi" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsConnectNow" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsConnectionManager" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsFilteringPlatform" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsFirewall" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsNetworkVirtualization" = [ "Win32_NetworkManagement" ];
"Win32_Networking" = [ "Win32" ];
"Win32_Networking_ActiveDirectory" = [ "Win32_Networking" ];
"Win32_Networking_BackgroundIntelligentTransferService" = [ "Win32_Networking" ];
"Win32_Networking_Clustering" = [ "Win32_Networking" ];
"Win32_Networking_HttpServer" = [ "Win32_Networking" ];
"Win32_Networking_Ldap" = [ "Win32_Networking" ];
"Win32_Networking_NetworkListManager" = [ "Win32_Networking" ];
"Win32_Networking_RemoteDifferentialCompression" = [ "Win32_Networking" ];
"Win32_Networking_WebSocket" = [ "Win32_Networking" ];
"Win32_Networking_WinHttp" = [ "Win32_Networking" ];
"Win32_Networking_WinInet" = [ "Win32_Networking" ];
"Win32_Networking_WinSock" = [ "Win32_Networking" ];
"Win32_Networking_WindowsWebServices" = [ "Win32_Networking" ];
"Win32_Security" = [ "Win32" ];
"Win32_Security_AppLocker" = [ "Win32_Security" ];
"Win32_Security_Authentication" = [ "Win32_Security" ];
"Win32_Security_Authentication_Identity" = [ "Win32_Security_Authentication" ];
"Win32_Security_Authentication_Identity_Provider" = [ "Win32_Security_Authentication_Identity" ];
"Win32_Security_Authorization" = [ "Win32_Security" ];
"Win32_Security_Authorization_UI" = [ "Win32_Security_Authorization" ];
"Win32_Security_ConfigurationSnapin" = [ "Win32_Security" ];
"Win32_Security_Credentials" = [ "Win32_Security" ];
"Win32_Security_Cryptography" = [ "Win32_Security" ];
"Win32_Security_Cryptography_Catalog" = [ "Win32_Security_Cryptography" ];
"Win32_Security_Cryptography_Certificates" = [ "Win32_Security_Cryptography" ];
"Win32_Security_Cryptography_Sip" = [ "Win32_Security_Cryptography" ];
"Win32_Security_Cryptography_UI" = [ "Win32_Security_Cryptography" ];
"Win32_Security_DiagnosticDataQuery" = [ "Win32_Security" ];
"Win32_Security_DirectoryServices" = [ "Win32_Security" ];
"Win32_Security_EnterpriseData" = [ "Win32_Security" ];
"Win32_Security_ExtensibleAuthenticationProtocol" = [ "Win32_Security" ];
"Win32_Security_Isolation" = [ "Win32_Security" ];
"Win32_Security_LicenseProtection" = [ "Win32_Security" ];
"Win32_Security_NetworkAccessProtection" = [ "Win32_Security" ];
"Win32_Security_Tpm" = [ "Win32_Security" ];
"Win32_Security_WinTrust" = [ "Win32_Security" ];
"Win32_Security_WinWlx" = [ "Win32_Security" ];
"Win32_Storage" = [ "Win32" ];
"Win32_Storage_Cabinets" = [ "Win32_Storage" ];
"Win32_Storage_CloudFilters" = [ "Win32_Storage" ];
"Win32_Storage_Compression" = [ "Win32_Storage" ];
"Win32_Storage_DataDeduplication" = [ "Win32_Storage" ];
"Win32_Storage_DistributedFileSystem" = [ "Win32_Storage" ];
"Win32_Storage_EnhancedStorage" = [ "Win32_Storage" ];
"Win32_Storage_FileHistory" = [ "Win32_Storage" ];
"Win32_Storage_FileServerResourceManager" = [ "Win32_Storage" ];
"Win32_Storage_FileSystem" = [ "Win32_Storage" ];
"Win32_Storage_Imapi" = [ "Win32_Storage" ];
"Win32_Storage_IndexServer" = [ "Win32_Storage" ];
"Win32_Storage_InstallableFileSystems" = [ "Win32_Storage" ];
"Win32_Storage_IscsiDisc" = [ "Win32_Storage" ];
"Win32_Storage_Jet" = [ "Win32_Storage" ];
"Win32_Storage_OfflineFiles" = [ "Win32_Storage" ];
"Win32_Storage_OperationRecorder" = [ "Win32_Storage" ];
"Win32_Storage_Packaging" = [ "Win32_Storage" ];
"Win32_Storage_Packaging_Appx" = [ "Win32_Storage_Packaging" ];
"Win32_Storage_Packaging_Opc" = [ "Win32_Storage_Packaging" ];
"Win32_Storage_ProjectedFileSystem" = [ "Win32_Storage" ];
"Win32_Storage_StructuredStorage" = [ "Win32_Storage" ];
"Win32_Storage_Vhd" = [ "Win32_Storage" ];
"Win32_Storage_VirtualDiskService" = [ "Win32_Storage" ];
"Win32_Storage_Vss" = [ "Win32_Storage" ];
"Win32_Storage_Xps" = [ "Win32_Storage" ];
"Win32_Storage_Xps_Printing" = [ "Win32_Storage_Xps" ];
"Win32_System" = [ "Win32" ];
"Win32_System_AddressBook" = [ "Win32_System" ];
"Win32_System_Antimalware" = [ "Win32_System" ];
"Win32_System_ApplicationInstallationAndServicing" = [ "Win32_System" ];
"Win32_System_ApplicationVerifier" = [ "Win32_System" ];
"Win32_System_AssessmentTool" = [ "Win32_System" ];
"Win32_System_Com" = [ "Win32_System" ];
"Win32_System_Com_CallObj" = [ "Win32_System_Com" ];
"Win32_System_Com_ChannelCredentials" = [ "Win32_System_Com" ];
"Win32_System_Com_Events" = [ "Win32_System_Com" ];
"Win32_System_Com_Marshal" = [ "Win32_System_Com" ];
"Win32_System_Com_StructuredStorage" = [ "Win32_System_Com" ];
"Win32_System_Com_UI" = [ "Win32_System_Com" ];
"Win32_System_Com_Urlmon" = [ "Win32_System_Com" ];
"Win32_System_ComponentServices" = [ "Win32_System" ];
"Win32_System_Console" = [ "Win32_System" ];
"Win32_System_Contacts" = [ "Win32_System" ];
"Win32_System_CorrelationVector" = [ "Win32_System" ];
"Win32_System_DataExchange" = [ "Win32_System" ];
"Win32_System_DeploymentServices" = [ "Win32_System" ];
"Win32_System_DesktopSharing" = [ "Win32_System" ];
"Win32_System_DeveloperLicensing" = [ "Win32_System" ];
"Win32_System_Diagnostics" = [ "Win32_System" ];
"Win32_System_Diagnostics_Ceip" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_Debug" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_Etw" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_ProcessSnapshotting" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_ToolHelp" = [ "Win32_System_Diagnostics" ];
"Win32_System_DistributedTransactionCoordinator" = [ "Win32_System" ];
"Win32_System_Environment" = [ "Win32_System" ];
"Win32_System_ErrorReporting" = [ "Win32_System" ];
"Win32_System_EventCollector" = [ "Win32_System" ];
"Win32_System_EventLog" = [ "Win32_System" ];
"Win32_System_EventNotificationService" = [ "Win32_System" ];
"Win32_System_GroupPolicy" = [ "Win32_System" ];
"Win32_System_HostCompute" = [ "Win32_System" ];
"Win32_System_HostComputeNetwork" = [ "Win32_System" ];
"Win32_System_HostComputeSystem" = [ "Win32_System" ];
"Win32_System_Hypervisor" = [ "Win32_System" ];
"Win32_System_IO" = [ "Win32_System" ];
"Win32_System_Iis" = [ "Win32_System" ];
"Win32_System_Ioctl" = [ "Win32_System" ];
"Win32_System_JobObjects" = [ "Win32_System" ];
"Win32_System_Js" = [ "Win32_System" ];
"Win32_System_Kernel" = [ "Win32_System" ];
"Win32_System_LibraryLoader" = [ "Win32_System" ];
"Win32_System_Mailslots" = [ "Win32_System" ];
"Win32_System_Mapi" = [ "Win32_System" ];
"Win32_System_Memory" = [ "Win32_System" ];
"Win32_System_Memory_NonVolatile" = [ "Win32_System_Memory" ];
"Win32_System_MessageQueuing" = [ "Win32_System" ];
"Win32_System_MixedReality" = [ "Win32_System" ];
"Win32_System_Mmc" = [ "Win32_System" ];
"Win32_System_Ole" = [ "Win32_System" ];
"Win32_System_ParentalControls" = [ "Win32_System" ];
"Win32_System_PasswordManagement" = [ "Win32_System" ];
"Win32_System_Performance" = [ "Win32_System" ];
"Win32_System_Performance_HardwareCounterProfiling" = [ "Win32_System_Performance" ];
"Win32_System_Pipes" = [ "Win32_System" ];
"Win32_System_Power" = [ "Win32_System" ];
"Win32_System_ProcessStatus" = [ "Win32_System" ];
"Win32_System_RealTimeCommunications" = [ "Win32_System" ];
"Win32_System_Recovery" = [ "Win32_System" ];
"Win32_System_Registry" = [ "Win32_System" ];
"Win32_System_RemoteAssistance" = [ "Win32_System" ];
"Win32_System_RemoteDesktop" = [ "Win32_System" ];
"Win32_System_RemoteManagement" = [ "Win32_System" ];
"Win32_System_RestartManager" = [ "Win32_System" ];
"Win32_System_Restore" = [ "Win32_System" ];
"Win32_System_Rpc" = [ "Win32_System" ];
"Win32_System_Search" = [ "Win32_System" ];
"Win32_System_Search_Common" = [ "Win32_System_Search" ];
"Win32_System_SecurityCenter" = [ "Win32_System" ];
"Win32_System_ServerBackup" = [ "Win32_System" ];
"Win32_System_Services" = [ "Win32_System" ];
"Win32_System_SettingsManagementInfrastructure" = [ "Win32_System" ];
"Win32_System_SetupAndMigration" = [ "Win32_System" ];
"Win32_System_Shutdown" = [ "Win32_System" ];
"Win32_System_StationsAndDesktops" = [ "Win32_System" ];
"Win32_System_SubsystemForLinux" = [ "Win32_System" ];
"Win32_System_SystemInformation" = [ "Win32_System" ];
"Win32_System_SystemServices" = [ "Win32_System" ];
"Win32_System_TaskScheduler" = [ "Win32_System" ];
"Win32_System_Threading" = [ "Win32_System" ];
"Win32_System_Time" = [ "Win32_System" ];
"Win32_System_TpmBaseServices" = [ "Win32_System" ];
"Win32_System_UpdateAgent" = [ "Win32_System" ];
"Win32_System_UpdateAssessment" = [ "Win32_System" ];
"Win32_System_UserAccessLogging" = [ "Win32_System" ];
"Win32_System_VirtualDosMachines" = [ "Win32_System" ];
"Win32_System_WindowsProgramming" = [ "Win32_System" ];
"Win32_System_WindowsSync" = [ "Win32_System" ];
"Win32_System_Wmi" = [ "Win32_System" ];
"Win32_UI" = [ "Win32" ];
"Win32_UI_Accessibility" = [ "Win32_UI" ];
"Win32_UI_Animation" = [ "Win32_UI" ];
"Win32_UI_ColorSystem" = [ "Win32_UI" ];
"Win32_UI_Controls" = [ "Win32_UI" ];
"Win32_UI_Controls_Dialogs" = [ "Win32_UI_Controls" ];
"Win32_UI_Controls_RichEdit" = [ "Win32_UI_Controls" ];
"Win32_UI_HiDpi" = [ "Win32_UI" ];
"Win32_UI_Input" = [ "Win32_UI" ];
"Win32_UI_Input_Ime" = [ "Win32_UI_Input" ];
"Win32_UI_Input_Ink" = [ "Win32_UI_Input" ];
"Win32_UI_Input_KeyboardAndMouse" = [ "Win32_UI_Input" ];
"Win32_UI_Input_Pointer" = [ "Win32_UI_Input" ];
"Win32_UI_Input_Radial" = [ "Win32_UI_Input" ];
"Win32_UI_Input_Touch" = [ "Win32_UI_Input" ];
"Win32_UI_Input_XboxController" = [ "Win32_UI_Input" ];
"Win32_UI_InteractionContext" = [ "Win32_UI" ];
"Win32_UI_LegacyWindowsEnvironmentFeatures" = [ "Win32_UI" ];
"Win32_UI_Magnification" = [ "Win32_UI" ];
"Win32_UI_Notifications" = [ "Win32_UI" ];
"Win32_UI_Ribbon" = [ "Win32_UI" ];
"Win32_UI_Shell" = [ "Win32_UI" ];
"Win32_UI_Shell_Common" = [ "Win32_UI_Shell" ];
"Win32_UI_Shell_PropertiesSystem" = [ "Win32_UI_Shell" ];
"Win32_UI_TabletPC" = [ "Win32_UI" ];
"Win32_UI_TextServices" = [ "Win32_UI" ];
"Win32_UI_WindowsAndMessaging" = [ "Win32_UI" ];
"Win32_UI_Wpf" = [ "Win32_UI" ];
};
resolvedDefaultFeatures = [ "Win32" "Win32_Foundation" "Win32_Networking" "Win32_Networking_WinSock" "Win32_Security" "Win32_Storage" "Win32_Storage_FileSystem" "Win32_System" "Win32_System_IO" "Win32_System_Pipes" "Win32_System_WindowsProgramming" "default" ];
};
"windows-sys 0.48.0" = rec {
crateName = "windows-sys";
version = "0.48.0";
edition = "2018";
sha256 = "1aan23v5gs7gya1lc46hqn9mdh8yph3fhxmhxlw36pn6pqc28zb7";
authors = [
"Microsoft"
];
dependencies = [
{
name = "windows-targets";
packageId = "windows-targets 0.48.0";
}
];
features = {
"Wdk_System" = [ "Wdk" ];
"Wdk_System_OfflineRegistry" = [ "Wdk_System" ];
"Win32_Data" = [ "Win32" ];
"Win32_Data_HtmlHelp" = [ "Win32_Data" ];
"Win32_Data_RightsManagement" = [ "Win32_Data" ];
"Win32_Data_Xml" = [ "Win32_Data" ];
"Win32_Data_Xml_MsXml" = [ "Win32_Data_Xml" ];
"Win32_Data_Xml_XmlLite" = [ "Win32_Data_Xml" ];
"Win32_Devices" = [ "Win32" ];
"Win32_Devices_AllJoyn" = [ "Win32_Devices" ];
"Win32_Devices_BiometricFramework" = [ "Win32_Devices" ];
"Win32_Devices_Bluetooth" = [ "Win32_Devices" ];
"Win32_Devices_Communication" = [ "Win32_Devices" ];
"Win32_Devices_DeviceAccess" = [ "Win32_Devices" ];
"Win32_Devices_DeviceAndDriverInstallation" = [ "Win32_Devices" ];
"Win32_Devices_DeviceQuery" = [ "Win32_Devices" ];
"Win32_Devices_Display" = [ "Win32_Devices" ];
"Win32_Devices_Enumeration" = [ "Win32_Devices" ];
"Win32_Devices_Enumeration_Pnp" = [ "Win32_Devices_Enumeration" ];
"Win32_Devices_Fax" = [ "Win32_Devices" ];
"Win32_Devices_FunctionDiscovery" = [ "Win32_Devices" ];
"Win32_Devices_Geolocation" = [ "Win32_Devices" ];
"Win32_Devices_HumanInterfaceDevice" = [ "Win32_Devices" ];
"Win32_Devices_ImageAcquisition" = [ "Win32_Devices" ];
"Win32_Devices_PortableDevices" = [ "Win32_Devices" ];
"Win32_Devices_Properties" = [ "Win32_Devices" ];
"Win32_Devices_Pwm" = [ "Win32_Devices" ];
"Win32_Devices_Sensors" = [ "Win32_Devices" ];
"Win32_Devices_SerialCommunication" = [ "Win32_Devices" ];
"Win32_Devices_Tapi" = [ "Win32_Devices" ];
"Win32_Devices_Usb" = [ "Win32_Devices" ];
"Win32_Devices_WebServicesOnDevices" = [ "Win32_Devices" ];
"Win32_Foundation" = [ "Win32" ];
"Win32_Gaming" = [ "Win32" ];
"Win32_Globalization" = [ "Win32" ];
"Win32_Graphics" = [ "Win32" ];
"Win32_Graphics_Dwm" = [ "Win32_Graphics" ];
"Win32_Graphics_Gdi" = [ "Win32_Graphics" ];
"Win32_Graphics_Hlsl" = [ "Win32_Graphics" ];
"Win32_Graphics_OpenGL" = [ "Win32_Graphics" ];
"Win32_Graphics_Printing" = [ "Win32_Graphics" ];
"Win32_Graphics_Printing_PrintTicket" = [ "Win32_Graphics_Printing" ];
"Win32_Management" = [ "Win32" ];
"Win32_Management_MobileDeviceManagementRegistration" = [ "Win32_Management" ];
"Win32_Media" = [ "Win32" ];
"Win32_Media_Audio" = [ "Win32_Media" ];
"Win32_Media_Audio_Apo" = [ "Win32_Media_Audio" ];
"Win32_Media_Audio_DirectMusic" = [ "Win32_Media_Audio" ];
"Win32_Media_Audio_Endpoints" = [ "Win32_Media_Audio" ];
"Win32_Media_Audio_XAudio2" = [ "Win32_Media_Audio" ];
"Win32_Media_DeviceManager" = [ "Win32_Media" ];
"Win32_Media_DxMediaObjects" = [ "Win32_Media" ];
"Win32_Media_KernelStreaming" = [ "Win32_Media" ];
"Win32_Media_LibrarySharingServices" = [ "Win32_Media" ];
"Win32_Media_MediaPlayer" = [ "Win32_Media" ];
"Win32_Media_Multimedia" = [ "Win32_Media" ];
"Win32_Media_Speech" = [ "Win32_Media" ];
"Win32_Media_Streaming" = [ "Win32_Media" ];
"Win32_Media_WindowsMediaFormat" = [ "Win32_Media" ];
"Win32_NetworkManagement" = [ "Win32" ];
"Win32_NetworkManagement_Dhcp" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Dns" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_InternetConnectionWizard" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_IpHelper" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_MobileBroadband" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Multicast" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Ndis" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetBios" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetManagement" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetShell" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetworkDiagnosticsFramework" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_NetworkPolicyServer" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_P2P" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_QoS" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Rras" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_Snmp" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WNet" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WebDav" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WiFi" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsConnectNow" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsConnectionManager" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsFilteringPlatform" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsFirewall" = [ "Win32_NetworkManagement" ];
"Win32_NetworkManagement_WindowsNetworkVirtualization" = [ "Win32_NetworkManagement" ];
"Win32_Networking" = [ "Win32" ];
"Win32_Networking_ActiveDirectory" = [ "Win32_Networking" ];
"Win32_Networking_BackgroundIntelligentTransferService" = [ "Win32_Networking" ];
"Win32_Networking_Clustering" = [ "Win32_Networking" ];
"Win32_Networking_HttpServer" = [ "Win32_Networking" ];
"Win32_Networking_Ldap" = [ "Win32_Networking" ];
"Win32_Networking_NetworkListManager" = [ "Win32_Networking" ];
"Win32_Networking_RemoteDifferentialCompression" = [ "Win32_Networking" ];
"Win32_Networking_WebSocket" = [ "Win32_Networking" ];
"Win32_Networking_WinHttp" = [ "Win32_Networking" ];
"Win32_Networking_WinInet" = [ "Win32_Networking" ];
"Win32_Networking_WinSock" = [ "Win32_Networking" ];
"Win32_Networking_WindowsWebServices" = [ "Win32_Networking" ];
"Win32_Security" = [ "Win32" ];
"Win32_Security_AppLocker" = [ "Win32_Security" ];
"Win32_Security_Authentication" = [ "Win32_Security" ];
"Win32_Security_Authentication_Identity" = [ "Win32_Security_Authentication" ];
"Win32_Security_Authentication_Identity_Provider" = [ "Win32_Security_Authentication_Identity" ];
"Win32_Security_Authorization" = [ "Win32_Security" ];
"Win32_Security_Authorization_UI" = [ "Win32_Security_Authorization" ];
"Win32_Security_ConfigurationSnapin" = [ "Win32_Security" ];
"Win32_Security_Credentials" = [ "Win32_Security" ];
"Win32_Security_Cryptography" = [ "Win32_Security" ];
"Win32_Security_Cryptography_Catalog" = [ "Win32_Security_Cryptography" ];
"Win32_Security_Cryptography_Certificates" = [ "Win32_Security_Cryptography" ];
"Win32_Security_Cryptography_Sip" = [ "Win32_Security_Cryptography" ];
"Win32_Security_Cryptography_UI" = [ "Win32_Security_Cryptography" ];
"Win32_Security_DiagnosticDataQuery" = [ "Win32_Security" ];
"Win32_Security_DirectoryServices" = [ "Win32_Security" ];
"Win32_Security_EnterpriseData" = [ "Win32_Security" ];
"Win32_Security_ExtensibleAuthenticationProtocol" = [ "Win32_Security" ];
"Win32_Security_Isolation" = [ "Win32_Security" ];
"Win32_Security_LicenseProtection" = [ "Win32_Security" ];
"Win32_Security_NetworkAccessProtection" = [ "Win32_Security" ];
"Win32_Security_Tpm" = [ "Win32_Security" ];
"Win32_Security_WinTrust" = [ "Win32_Security" ];
"Win32_Security_WinWlx" = [ "Win32_Security" ];
"Win32_Storage" = [ "Win32" ];
"Win32_Storage_Cabinets" = [ "Win32_Storage" ];
"Win32_Storage_CloudFilters" = [ "Win32_Storage" ];
"Win32_Storage_Compression" = [ "Win32_Storage" ];
"Win32_Storage_DataDeduplication" = [ "Win32_Storage" ];
"Win32_Storage_DistributedFileSystem" = [ "Win32_Storage" ];
"Win32_Storage_EnhancedStorage" = [ "Win32_Storage" ];
"Win32_Storage_FileHistory" = [ "Win32_Storage" ];
"Win32_Storage_FileServerResourceManager" = [ "Win32_Storage" ];
"Win32_Storage_FileSystem" = [ "Win32_Storage" ];
"Win32_Storage_Imapi" = [ "Win32_Storage" ];
"Win32_Storage_IndexServer" = [ "Win32_Storage" ];
"Win32_Storage_InstallableFileSystems" = [ "Win32_Storage" ];
"Win32_Storage_IscsiDisc" = [ "Win32_Storage" ];
"Win32_Storage_Jet" = [ "Win32_Storage" ];
"Win32_Storage_OfflineFiles" = [ "Win32_Storage" ];
"Win32_Storage_OperationRecorder" = [ "Win32_Storage" ];
"Win32_Storage_Packaging" = [ "Win32_Storage" ];
"Win32_Storage_Packaging_Appx" = [ "Win32_Storage_Packaging" ];
"Win32_Storage_Packaging_Opc" = [ "Win32_Storage_Packaging" ];
"Win32_Storage_ProjectedFileSystem" = [ "Win32_Storage" ];
"Win32_Storage_StructuredStorage" = [ "Win32_Storage" ];
"Win32_Storage_Vhd" = [ "Win32_Storage" ];
"Win32_Storage_VirtualDiskService" = [ "Win32_Storage" ];
"Win32_Storage_Vss" = [ "Win32_Storage" ];
"Win32_Storage_Xps" = [ "Win32_Storage" ];
"Win32_Storage_Xps_Printing" = [ "Win32_Storage_Xps" ];
"Win32_System" = [ "Win32" ];
"Win32_System_AddressBook" = [ "Win32_System" ];
"Win32_System_Antimalware" = [ "Win32_System" ];
"Win32_System_ApplicationInstallationAndServicing" = [ "Win32_System" ];
"Win32_System_ApplicationVerifier" = [ "Win32_System" ];
"Win32_System_AssessmentTool" = [ "Win32_System" ];
"Win32_System_ClrHosting" = [ "Win32_System" ];
"Win32_System_Com" = [ "Win32_System" ];
"Win32_System_Com_CallObj" = [ "Win32_System_Com" ];
"Win32_System_Com_ChannelCredentials" = [ "Win32_System_Com" ];
"Win32_System_Com_Events" = [ "Win32_System_Com" ];
"Win32_System_Com_Marshal" = [ "Win32_System_Com" ];
"Win32_System_Com_StructuredStorage" = [ "Win32_System_Com" ];
"Win32_System_Com_UI" = [ "Win32_System_Com" ];
"Win32_System_Com_Urlmon" = [ "Win32_System_Com" ];
"Win32_System_ComponentServices" = [ "Win32_System" ];
"Win32_System_Console" = [ "Win32_System" ];
"Win32_System_Contacts" = [ "Win32_System" ];
"Win32_System_CorrelationVector" = [ "Win32_System" ];
"Win32_System_DataExchange" = [ "Win32_System" ];
"Win32_System_DeploymentServices" = [ "Win32_System" ];
"Win32_System_DesktopSharing" = [ "Win32_System" ];
"Win32_System_DeveloperLicensing" = [ "Win32_System" ];
"Win32_System_Diagnostics" = [ "Win32_System" ];
"Win32_System_Diagnostics_Ceip" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_ClrProfiling" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_Debug" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_Debug_ActiveScript" = [ "Win32_System_Diagnostics_Debug" ];
"Win32_System_Diagnostics_Debug_Extensions" = [ "Win32_System_Diagnostics_Debug" ];
"Win32_System_Diagnostics_Etw" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_ProcessSnapshotting" = [ "Win32_System_Diagnostics" ];
"Win32_System_Diagnostics_ToolHelp" = [ "Win32_System_Diagnostics" ];
"Win32_System_DistributedTransactionCoordinator" = [ "Win32_System" ];
"Win32_System_Environment" = [ "Win32_System" ];
"Win32_System_ErrorReporting" = [ "Win32_System" ];
"Win32_System_EventCollector" = [ "Win32_System" ];
"Win32_System_EventLog" = [ "Win32_System" ];
"Win32_System_EventNotificationService" = [ "Win32_System" ];
"Win32_System_GroupPolicy" = [ "Win32_System" ];
"Win32_System_HostCompute" = [ "Win32_System" ];
"Win32_System_HostComputeNetwork" = [ "Win32_System" ];
"Win32_System_HostComputeSystem" = [ "Win32_System" ];
"Win32_System_Hypervisor" = [ "Win32_System" ];
"Win32_System_IO" = [ "Win32_System" ];
"Win32_System_Iis" = [ "Win32_System" ];
"Win32_System_Ioctl" = [ "Win32_System" ];
"Win32_System_JobObjects" = [ "Win32_System" ];
"Win32_System_Js" = [ "Win32_System" ];
"Win32_System_Kernel" = [ "Win32_System" ];
"Win32_System_LibraryLoader" = [ "Win32_System" ];
"Win32_System_Mailslots" = [ "Win32_System" ];
"Win32_System_Mapi" = [ "Win32_System" ];
"Win32_System_Memory" = [ "Win32_System" ];
"Win32_System_Memory_NonVolatile" = [ "Win32_System_Memory" ];
"Win32_System_MessageQueuing" = [ "Win32_System" ];
"Win32_System_MixedReality" = [ "Win32_System" ];
"Win32_System_Mmc" = [ "Win32_System" ];
"Win32_System_Ole" = [ "Win32_System" ];
"Win32_System_ParentalControls" = [ "Win32_System" ];
"Win32_System_PasswordManagement" = [ "Win32_System" ];
"Win32_System_Performance" = [ "Win32_System" ];
"Win32_System_Performance_HardwareCounterProfiling" = [ "Win32_System_Performance" ];
"Win32_System_Pipes" = [ "Win32_System" ];
"Win32_System_Power" = [ "Win32_System" ];
"Win32_System_ProcessStatus" = [ "Win32_System" ];
"Win32_System_RealTimeCommunications" = [ "Win32_System" ];
"Win32_System_Recovery" = [ "Win32_System" ];
"Win32_System_Registry" = [ "Win32_System" ];
"Win32_System_RemoteAssistance" = [ "Win32_System" ];
"Win32_System_RemoteDesktop" = [ "Win32_System" ];
"Win32_System_RemoteManagement" = [ "Win32_System" ];
"Win32_System_RestartManager" = [ "Win32_System" ];
"Win32_System_Restore" = [ "Win32_System" ];
"Win32_System_Rpc" = [ "Win32_System" ];
"Win32_System_Search" = [ "Win32_System" ];
"Win32_System_Search_Common" = [ "Win32_System_Search" ];
"Win32_System_SecurityCenter" = [ "Win32_System" ];
"Win32_System_ServerBackup" = [ "Win32_System" ];
"Win32_System_Services" = [ "Win32_System" ];
"Win32_System_SettingsManagementInfrastructure" = [ "Win32_System" ];
"Win32_System_SetupAndMigration" = [ "Win32_System" ];
"Win32_System_Shutdown" = [ "Win32_System" ];
"Win32_System_StationsAndDesktops" = [ "Win32_System" ];
"Win32_System_SubsystemForLinux" = [ "Win32_System" ];
"Win32_System_SystemInformation" = [ "Win32_System" ];
"Win32_System_SystemServices" = [ "Win32_System" ];
"Win32_System_TaskScheduler" = [ "Win32_System" ];
"Win32_System_Threading" = [ "Win32_System" ];
"Win32_System_Time" = [ "Win32_System" ];
"Win32_System_TpmBaseServices" = [ "Win32_System" ];
"Win32_System_UpdateAgent" = [ "Win32_System" ];
"Win32_System_UpdateAssessment" = [ "Win32_System" ];
"Win32_System_UserAccessLogging" = [ "Win32_System" ];
"Win32_System_VirtualDosMachines" = [ "Win32_System" ];
"Win32_System_WindowsProgramming" = [ "Win32_System" ];
"Win32_System_WindowsSync" = [ "Win32_System" ];
"Win32_System_Wmi" = [ "Win32_System" ];
"Win32_UI" = [ "Win32" ];
"Win32_UI_Accessibility" = [ "Win32_UI" ];
"Win32_UI_Animation" = [ "Win32_UI" ];
"Win32_UI_ColorSystem" = [ "Win32_UI" ];
"Win32_UI_Controls" = [ "Win32_UI" ];
"Win32_UI_Controls_Dialogs" = [ "Win32_UI_Controls" ];
"Win32_UI_Controls_RichEdit" = [ "Win32_UI_Controls" ];
"Win32_UI_HiDpi" = [ "Win32_UI" ];
"Win32_UI_Input" = [ "Win32_UI" ];
"Win32_UI_Input_Ime" = [ "Win32_UI_Input" ];
"Win32_UI_Input_Ink" = [ "Win32_UI_Input" ];
"Win32_UI_Input_KeyboardAndMouse" = [ "Win32_UI_Input" ];
"Win32_UI_Input_Pointer" = [ "Win32_UI_Input" ];
"Win32_UI_Input_Radial" = [ "Win32_UI_Input" ];
"Win32_UI_Input_Touch" = [ "Win32_UI_Input" ];
"Win32_UI_Input_XboxController" = [ "Win32_UI_Input" ];
"Win32_UI_InteractionContext" = [ "Win32_UI" ];
"Win32_UI_LegacyWindowsEnvironmentFeatures" = [ "Win32_UI" ];
"Win32_UI_Magnification" = [ "Win32_UI" ];
"Win32_UI_Notifications" = [ "Win32_UI" ];
"Win32_UI_Ribbon" = [ "Win32_UI" ];
"Win32_UI_Shell" = [ "Win32_UI" ];
"Win32_UI_Shell_Common" = [ "Win32_UI_Shell" ];
"Win32_UI_Shell_PropertiesSystem" = [ "Win32_UI_Shell" ];
"Win32_UI_TabletPC" = [ "Win32_UI" ];
"Win32_UI_TextServices" = [ "Win32_UI" ];
"Win32_UI_WindowsAndMessaging" = [ "Win32_UI" ];
"Win32_UI_Wpf" = [ "Win32_UI" ];
"Win32_Web" = [ "Win32" ];
"Win32_Web_InternetExplorer" = [ "Win32_Web" ];
};
refactor(tvix/store/blobsvc): make BlobStore async We previously kept the trait of a BlobService sync. This however had some annoying consequences: - It became more and more complicated to track when we're in a context with an async runtime in the context or not, producing bugs like https://b.tvl.fyi/issues/304 - The sync trait shielded away async clients from async worloads, requiring manual block_on code inside the gRPC client code, and spawn_blocking calls in consumers of the trait, even if they were async (like the gRPC server) - We had to write our own custom glue code (SyncReadIntoAsyncRead) to convert a sync io::Read into a tokio::io::AsyncRead, which already existed in tokio internally, but upstream ia hesitant to expose. This now makes the BlobService trait async (via the async_trait macro, like we already do in various gRPC parts), and replaces the sync readers and writers with their async counterparts. Tests interacting with a BlobService now need to have an async runtime available, the easiest way for this is to mark the test functions with the tokio::test macro, allowing us to directly .await in the test function. In places where we don't have an async runtime available from context (like tvix-cli), we can pass one down explicitly. Now that we don't provide a sync interface anymore, the (sync) FUSE library now holds a pointer to a tokio runtime handle, and needs to at least have 2 threads available when talking to a blob service (which is why some of the tests now use the multi_thread flavor). The FUSE tests got a bit more verbose, as we couldn't use the setup_and_mount function accepting a callback anymore. We can hopefully move some of the test fixture setup to rstest in the future to make this less repetitive. Co-Authored-By: Connor Brewster <cbrewster@hey.com> Change-Id: Ia0501b606e32c852d0108de9c9016b21c94a3c05 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9329 Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
2023-09-13 14:20:21 +02:00
resolvedDefaultFeatures = [ "Win32" "Win32_Foundation" "Win32_NetworkManagement" "Win32_NetworkManagement_IpHelper" "Win32_Networking" "Win32_Networking_WinSock" "Win32_Security" "Win32_Storage" "Win32_Storage_FileSystem" "Win32_System" "Win32_System_Console" "Win32_System_Diagnostics" "Win32_System_Diagnostics_Debug" "Win32_System_IO" "Win32_System_Pipes" "Win32_System_SystemServices" "Win32_System_Threading" "Win32_System_WindowsProgramming" "default" ];
};
"windows-targets 0.42.2" = rec {
crateName = "windows-targets";
version = "0.42.2";
edition = "2018";
sha256 = "0wfhnib2fisxlx8c507dbmh97kgij4r6kcxdi0f9nk6l1k080lcf";
authors = [
"Microsoft"
];
dependencies = [
{
name = "windows_aarch64_gnullvm";
packageId = "windows_aarch64_gnullvm 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-pc-windows-gnullvm");
}
{
name = "windows_aarch64_msvc";
packageId = "windows_aarch64_msvc 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-pc-windows-msvc");
}
{
name = "windows_aarch64_msvc";
packageId = "windows_aarch64_msvc 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-uwp-windows-msvc");
}
{
name = "windows_i686_gnu";
packageId = "windows_i686_gnu 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "i686-pc-windows-gnu");
}
{
name = "windows_i686_gnu";
packageId = "windows_i686_gnu 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "i686-uwp-windows-gnu");
}
{
name = "windows_i686_msvc";
packageId = "windows_i686_msvc 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "i686-pc-windows-msvc");
}
{
name = "windows_i686_msvc";
packageId = "windows_i686_msvc 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "i686-uwp-windows-msvc");
}
{
name = "windows_x86_64_gnu";
packageId = "windows_x86_64_gnu 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnu");
}
{
name = "windows_x86_64_gnu";
packageId = "windows_x86_64_gnu 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-uwp-windows-gnu");
}
{
name = "windows_x86_64_gnullvm";
packageId = "windows_x86_64_gnullvm 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnullvm");
}
{
name = "windows_x86_64_msvc";
packageId = "windows_x86_64_msvc 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-msvc");
}
{
name = "windows_x86_64_msvc";
packageId = "windows_x86_64_msvc 0.42.2";
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-uwp-windows-msvc");
}
];
};
"windows-targets 0.48.0" = rec {
crateName = "windows-targets";
version = "0.48.0";
edition = "2018";
sha256 = "1mfzg94w0c8h4ya9sva7rra77f3iy1712af9b6bwg03wrpqbc7kv";
authors = [
"Microsoft"
];
dependencies = [
{
name = "windows_aarch64_gnullvm";
packageId = "windows_aarch64_gnullvm 0.48.0";
target = { target, features }: (("aarch64" == target."arch") && ("gnu" == target."env") && ("llvm" == target."abi") && (!(target."windows_raw_dylib" or false)));
}
{
name = "windows_aarch64_msvc";
packageId = "windows_aarch64_msvc 0.48.0";
target = { target, features }: (("aarch64" == target."arch") && ("msvc" == target."env") && (!(target."windows_raw_dylib" or false)));
}
{
name = "windows_i686_gnu";
packageId = "windows_i686_gnu 0.48.0";
target = { target, features }: (("x86" == target."arch") && ("gnu" == target."env") && (!(target."windows_raw_dylib" or false)));
}
{
name = "windows_i686_msvc";
packageId = "windows_i686_msvc 0.48.0";
target = { target, features }: (("x86" == target."arch") && ("msvc" == target."env") && (!(target."windows_raw_dylib" or false)));
}
{
name = "windows_x86_64_gnu";
packageId = "windows_x86_64_gnu 0.48.0";
target = { target, features }: (("x86_64" == target."arch") && ("gnu" == target."env") && (!("llvm" == target."abi")) && (!(target."windows_raw_dylib" or false)));
}
{
name = "windows_x86_64_gnullvm";
packageId = "windows_x86_64_gnullvm 0.48.0";
target = { target, features }: (("x86_64" == target."arch") && ("gnu" == target."env") && ("llvm" == target."abi") && (!(target."windows_raw_dylib" or false)));
}
{
name = "windows_x86_64_msvc";
packageId = "windows_x86_64_msvc 0.48.0";
target = { target, features }: (("x86_64" == target."arch") && ("msvc" == target."env") && (!(target."windows_raw_dylib" or false)));
}
];
};
"windows_aarch64_gnullvm 0.42.2" = rec {
crateName = "windows_aarch64_gnullvm";
version = "0.42.2";
edition = "2018";
sha256 = "1y4q0qmvl0lvp7syxvfykafvmwal5hrjb4fmv04bqs0bawc52yjr";
authors = [
"Microsoft"
];
};
"windows_aarch64_gnullvm 0.48.0" = rec {
crateName = "windows_aarch64_gnullvm";
version = "0.48.0";
edition = "2018";
sha256 = "1g71yxi61c410pwzq05ld7si4p9hyx6lf5fkw21sinvr3cp5gbli";
authors = [
"Microsoft"
];
};
"windows_aarch64_msvc 0.42.2" = rec {
crateName = "windows_aarch64_msvc";
version = "0.42.2";
edition = "2018";
sha256 = "0hsdikjl5sa1fva5qskpwlxzpc5q9l909fpl1w6yy1hglrj8i3p0";
authors = [
"Microsoft"
];
};
"windows_aarch64_msvc 0.48.0" = rec {
crateName = "windows_aarch64_msvc";
version = "0.48.0";
edition = "2018";
sha256 = "1wvwipchhywcjaw73h998vzachf668fpqccbhrxzrz5xszh2gvxj";
authors = [
"Microsoft"
];
};
"windows_i686_gnu 0.42.2" = rec {
crateName = "windows_i686_gnu";
version = "0.42.2";
edition = "2018";
sha256 = "0kx866dfrby88lqs9v1vgmrkk1z6af9lhaghh5maj7d4imyr47f6";
authors = [
"Microsoft"
];
};
"windows_i686_gnu 0.48.0" = rec {
crateName = "windows_i686_gnu";
version = "0.48.0";
edition = "2018";
sha256 = "0hd2v9kp8fss0rzl83wzhw0s5z8q1b4875m6s1phv0yvlxi1jak2";
authors = [
"Microsoft"
];
};
"windows_i686_msvc 0.42.2" = rec {
crateName = "windows_i686_msvc";
version = "0.42.2";
edition = "2018";
sha256 = "0q0h9m2aq1pygc199pa5jgc952qhcnf0zn688454i7v4xjv41n24";
authors = [
"Microsoft"
];
};
"windows_i686_msvc 0.48.0" = rec {
crateName = "windows_i686_msvc";
version = "0.48.0";
edition = "2018";
sha256 = "004fkyqv3if178xx9ksqc4qqv8sz8n72mpczsr2vy8ffckiwchj5";
authors = [
"Microsoft"
];
};
"windows_x86_64_gnu 0.42.2" = rec {
crateName = "windows_x86_64_gnu";
version = "0.42.2";
edition = "2018";
sha256 = "0dnbf2xnp3xrvy8v9mgs3var4zq9v9yh9kv79035rdgyp2w15scd";
authors = [
"Microsoft"
];
};
"windows_x86_64_gnu 0.48.0" = rec {
crateName = "windows_x86_64_gnu";
version = "0.48.0";
edition = "2018";
sha256 = "1cblz5m6a8q6ha09bz4lz233dnq5sw2hpra06k9cna3n3xk8laya";
authors = [
"Microsoft"
];
};
"windows_x86_64_gnullvm 0.42.2" = rec {
crateName = "windows_x86_64_gnullvm";
version = "0.42.2";
edition = "2018";
sha256 = "18wl9r8qbsl475j39zvawlidp1bsbinliwfymr43fibdld31pm16";
authors = [
"Microsoft"
];
};
"windows_x86_64_gnullvm 0.48.0" = rec {
crateName = "windows_x86_64_gnullvm";
version = "0.48.0";
edition = "2018";
sha256 = "0lxryz3ysx0145bf3i38jkr7f9nxiym8p3syklp8f20yyk0xp5kq";
authors = [
"Microsoft"
];
};
"windows_x86_64_msvc 0.42.2" = rec {
crateName = "windows_x86_64_msvc";
version = "0.42.2";
edition = "2018";
sha256 = "1w5r0q0yzx827d10dpjza2ww0j8iajqhmb54s735hhaj66imvv4s";
authors = [
"Microsoft"
];
};
"windows_x86_64_msvc 0.48.0" = rec {
crateName = "windows_x86_64_msvc";
version = "0.48.0";
edition = "2018";
sha256 = "12ipr1knzj2rwjygyllfi5mkd0ihnbi3r61gag5n2jgyk5bmyl8s";
authors = [
"Microsoft"
];
refactor(tvix/cli): use Wu-Manber string scanning for drv references Switch out the string-scanning algorithm used in the reference scanner. The construction of aho-corasick automata made up the vast majority of runtime when evaluating nixpkgs previously. While the actual scanning with a constructed automaton is relatively fast, we almost never scan for the same set of strings twice and the cost is not worth it. An algorithm that better matches our needs is the Wu-Manber multiple string match algorithm, which works efficiently on *long* and *random* strings of the *same length*, which describes store paths (up to their hash component). This switches the refscanner crate to a Rust implementation[0][1] of this algorithm. This has several implications: 1. This crate does not provide a way to scan streams. I'm not sure if this is an inherent problem with the algorithm (probably not, but it would need buffering). Either way, related functions and tests (which were actually unused) have been removed. 2. All strings need to be of the same length. For this reason, we truncate the known paths after their hash part (they are still unique, of course). 3. Passing an empty set of matches, or a match that is shorter than the length of a store path, causes the crate to panic. We safeguard against this by completely skipping the refscanning if there are no known paths (i.e. when evaluating the first derivation of an eval), and by bailing out of scanning a string that is shorter than a store path. On the upside, this reduces overall runtime to less 1/5 of what it was before when evaluating `pkgs.stdenv.drvPath`. [0]: Frankly, it's a random, research-grade MIT-licensed crate that I found on Github: https://github.com/jneem/wu-manber [1]: We probably want to rewrite or at least fork the above crate, and add things like a three-byte wide scanner. Evaluating large portions of nixpkgs can easily lead to more than 65k derivations being scanned for. Change-Id: I08926778e1e5d5a87fc9ac26e0437aed8bbd9eb0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8017 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2023-02-02 13:51:59 +01:00
};
"wu-manber" = rec {
crateName = "wu-manber";
version = "0.1.0";
edition = "2015";
workspace_member = null;
src = pkgs.fetchgit {
url = "https://github.com/tvlfyi/wu-manber.git";
rev = "0d5b22bea136659f7de60b102a7030e0daaa503d";
sha256 = "1zhk83lbq99xzyjwphv2qrb8f8qgfqwa5bbbvyzm0z0bljsjv0pd";
refactor(tvix/cli): use Wu-Manber string scanning for drv references Switch out the string-scanning algorithm used in the reference scanner. The construction of aho-corasick automata made up the vast majority of runtime when evaluating nixpkgs previously. While the actual scanning with a constructed automaton is relatively fast, we almost never scan for the same set of strings twice and the cost is not worth it. An algorithm that better matches our needs is the Wu-Manber multiple string match algorithm, which works efficiently on *long* and *random* strings of the *same length*, which describes store paths (up to their hash component). This switches the refscanner crate to a Rust implementation[0][1] of this algorithm. This has several implications: 1. This crate does not provide a way to scan streams. I'm not sure if this is an inherent problem with the algorithm (probably not, but it would need buffering). Either way, related functions and tests (which were actually unused) have been removed. 2. All strings need to be of the same length. For this reason, we truncate the known paths after their hash part (they are still unique, of course). 3. Passing an empty set of matches, or a match that is shorter than the length of a store path, causes the crate to panic. We safeguard against this by completely skipping the refscanning if there are no known paths (i.e. when evaluating the first derivation of an eval), and by bailing out of scanning a string that is shorter than a store path. On the upside, this reduces overall runtime to less 1/5 of what it was before when evaluating `pkgs.stdenv.drvPath`. [0]: Frankly, it's a random, research-grade MIT-licensed crate that I found on Github: https://github.com/jneem/wu-manber [1]: We probably want to rewrite or at least fork the above crate, and add things like a three-byte wide scanner. Evaluating large portions of nixpkgs can easily lead to more than 65k derivations being scanned for. Change-Id: I08926778e1e5d5a87fc9ac26e0437aed8bbd9eb0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8017 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2023-02-02 13:51:59 +01:00
};
authors = [
"Joe Neeman <joeneeman@gmail.com>"
];
};
"xml-rs" = rec {
crateName = "xml-rs";
version = "0.8.18";
edition = "2021";
crateBin = [ ];
sha256 = "02jgfy3l25kx5lph8264lcflsfzls1yfwb0z8gd97vhannbpxdxs";
libName = "xml";
authors = [
"Vladimir Matveev <vmatveev@citrine.cc>"
];
};
"yansi" = rec {
crateName = "yansi";
version = "0.5.1";
edition = "2015";
sha256 = "1v4qljgzh73knr7291cgwrf56zrvhmpn837n5n5pypzq1kciq109";
authors = [
"Sergio Benitez <sb@sergio.bz>"
];
};
"zstd" = rec {
crateName = "zstd";
version = "0.9.2+zstd.1.5.1";
edition = "2018";
sha256 = "0m5aik2jy2w1g68i4isa0c3gq9a7avq9abgjfjbc6f60yqdym413";
authors = [
"Alexandre Bury <alexandre.bury@gmail.com>"
];
dependencies = [
{
name = "zstd-safe";
packageId = "zstd-safe";
usesDefaultFeatures = false;
features = [ "std" ];
}
];
features = {
"arrays" = [ "zstd-safe/arrays" ];
"bindgen" = [ "zstd-safe/bindgen" ];
"debug" = [ "zstd-safe/debug" ];
"default" = [ "legacy" "arrays" ];
"experimental" = [ "zstd-safe/experimental" ];
"legacy" = [ "zstd-safe/legacy" ];
"no_asm" = [ "zstd-safe/no_asm" ];
"pkg-config" = [ "zstd-safe/pkg-config" ];
"thin" = [ "zstd-safe/thin" ];
"zstdmt" = [ "zstd-safe/zstdmt" ];
};
resolvedDefaultFeatures = [ "arrays" "default" "legacy" ];
};
"zstd-safe" = rec {
crateName = "zstd-safe";
version = "4.1.3+zstd.1.5.1";
edition = "2018";
sha256 = "0yfvqzzkbj871f2vaikal5rm2gf60p1mdzp3jk3w5hmkkywq37g9";
authors = [
"Alexandre Bury <alexandre.bury@gmail.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
}
{
name = "zstd-sys";
packageId = "zstd-sys";
usesDefaultFeatures = false;
}
];
features = {
"bindgen" = [ "zstd-sys/bindgen" ];
"debug" = [ "zstd-sys/debug" ];
"default" = [ "legacy" "arrays" ];
"experimental" = [ "zstd-sys/experimental" ];
"legacy" = [ "zstd-sys/legacy" ];
"no_asm" = [ "zstd-sys/no_asm" ];
"pkg-config" = [ "zstd-sys/pkg-config" ];
"std" = [ "zstd-sys/std" ];
"thin" = [ "zstd-sys/thin" ];
"zstdmt" = [ "zstd-sys/zstdmt" ];
};
resolvedDefaultFeatures = [ "arrays" "legacy" "std" ];
};
"zstd-sys" = rec {
crateName = "zstd-sys";
version = "1.6.2+zstd.1.5.1";
edition = "2018";
sha256 = "17xcr0mw8ps9hlc8m0dzj7yd52lb9r9ic9fbpxa4994yilj2zbrd";
authors = [
"Alexandre Bury <alexandre.bury@gmail.com>"
];
dependencies = [
{
name = "libc";
packageId = "libc";
}
];
buildDependencies = [
{
name = "cc";
packageId = "cc";
features = [ "parallel" ];
}
];
features = {
"bindgen" = [ "dep:bindgen" ];
"default" = [ "legacy" ];
"pkg-config" = [ "dep:pkg-config" ];
};
resolvedDefaultFeatures = [ "legacy" "std" ];
};
};
#
# crate2nix/default.nix (excerpt start)
#
/* Target (platform) data for conditional dependencies.
This corresponds roughly to what buildRustCrate is setting.
*/
makeDefaultTarget = platform: {
unix = platform.isUnix;
windows = platform.isWindows;
fuchsia = true;
test = false;
/* We are choosing an arbitrary rust version to grab `lib` from,
which is unfortunate, but `lib` has been version-agnostic the
whole time so this is good enough for now.
*/
os = pkgs.rust.lib.toTargetOs platform;
arch = pkgs.rust.lib.toTargetArch platform;
family = pkgs.rust.lib.toTargetFamily platform;
env = "gnu";
endian =
if platform.parsed.cpu.significantByte.name == "littleEndian"
then "little" else "big";
pointer_width = toString platform.parsed.cpu.bits;
vendor = platform.parsed.vendor.name;
debug_assertions = false;
};
/* Filters common temp files and build files. */
# TODO(pkolloch): Substitute with gitignore filter
sourceFilter = name: type:
let
baseName = builtins.baseNameOf (builtins.toString name);
in
! (
# Filter out git
baseName == ".gitignore"
|| (type == "directory" && baseName == ".git")
# Filter out build results
|| (
type == "directory" && (
baseName == "target"
|| baseName == "_site"
|| baseName == ".sass-cache"
|| baseName == ".jekyll-metadata"
|| baseName == "build-artifacts"
)
)
# Filter out nix-build result symlinks
|| (
type == "symlink" && lib.hasPrefix "result" baseName
)
# Filter out IDE config
|| (
type == "directory" && (
baseName == ".idea" || baseName == ".vscode"
)
) || lib.hasSuffix ".iml" baseName
# Filter out nix build files
|| baseName == "Cargo.nix"
# Filter out editor backup / swap files.
|| lib.hasSuffix "~" baseName
|| builtins.match "^\\.sw[a-z]$$" baseName != null
|| builtins.match "^\\..*\\.sw[a-z]$$" baseName != null
|| lib.hasSuffix ".tmp" baseName
|| lib.hasSuffix ".bak" baseName
|| baseName == "tests.nix"
);
/* Returns a crate which depends on successful test execution
of crate given as the second argument.
testCrateFlags: list of flags to pass to the test exectuable
testInputs: list of packages that should be available during test execution
*/
crateWithTest = { crate, testCrate, testCrateFlags, testInputs, testPreRun, testPostRun }:
assert builtins.typeOf testCrateFlags == "list";
assert builtins.typeOf testInputs == "list";
assert builtins.typeOf testPreRun == "string";
assert builtins.typeOf testPostRun == "string";
let
# override the `crate` so that it will build and execute tests instead of
# building the actual lib and bin targets We just have to pass `--test`
# to rustc and it will do the right thing. We execute the tests and copy
# their log and the test executables to $out for later inspection.
test =
let
drv = testCrate.override
(
_: {
buildTests = true;
}
);
# If the user hasn't set any pre/post commands, we don't want to
# insert empty lines. This means that any existing users of crate2nix
# don't get a spurious rebuild unless they set these explicitly.
testCommand = pkgs.lib.concatStringsSep "\n"
(pkgs.lib.filter (s: s != "") [
testPreRun
"$f $testCrateFlags 2>&1 | tee -a $out"
testPostRun
]);
in
pkgs.runCommand "run-tests-${testCrate.name}"
{
inherit testCrateFlags;
buildInputs = testInputs;
} ''
set -ex
export RUST_BACKTRACE=1
# recreate a file hierarchy as when running tests with cargo
# the source for test data
${pkgs.xorg.lndir}/bin/lndir ${crate.src}
# build outputs
testRoot=target/debug
mkdir -p $testRoot
# executables of the crate
# we copy to prevent std::env::current_exe() to resolve to a store location
for i in ${crate}/bin/*; do
cp "$i" "$testRoot"
done
chmod +w -R .
# test harness executables are suffixed with a hash, like cargo does
# this allows to prevent name collision with the main
# executables of the crate
hash=$(basename $out)
for file in ${drv}/tests/*; do
f=$testRoot/$(basename $file)-$hash
cp $file $f
${testCommand}
done
'';
in
pkgs.runCommand "${crate.name}-linked"
{
inherit (crate) outputs crateName;
passthru = (crate.passthru or { }) // {
inherit test;
};
} ''
echo tested by ${test}
${lib.concatMapStringsSep "\n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs}
'';
/* A restricted overridable version of builtRustCratesWithFeatures. */
buildRustCrateWithFeatures =
{ packageId
, features ? rootFeatures
, crateOverrides ? defaultCrateOverrides
, buildRustCrateForPkgsFunc ? null
, runTests ? false
, testCrateFlags ? [ ]
, testInputs ? [ ]
# Any command to run immediatelly before a test is executed.
, testPreRun ? ""
# Any command run immediatelly after a test is executed.
, testPostRun ? ""
}:
lib.makeOverridable
(
{ features
, crateOverrides
, runTests
, testCrateFlags
, testInputs
, testPreRun
, testPostRun
}:
let
buildRustCrateForPkgsFuncOverriden =
if buildRustCrateForPkgsFunc != null
then buildRustCrateForPkgsFunc
else
(
if crateOverrides == pkgs.defaultCrateOverrides
then buildRustCrateForPkgs
else
pkgs: (buildRustCrateForPkgs pkgs).override {
defaultCrateOverrides = crateOverrides;
}
);
builtRustCrates = builtRustCratesWithFeatures {
inherit packageId features;
buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden;
runTests = false;
};
builtTestRustCrates = builtRustCratesWithFeatures {
inherit packageId features;
buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden;
runTests = true;
};
drv = builtRustCrates.crates.${packageId};
testDrv = builtTestRustCrates.crates.${packageId};
derivation =
if runTests then
crateWithTest
{
crate = drv;
testCrate = testDrv;
inherit testCrateFlags testInputs testPreRun testPostRun;
}
else drv;
in
derivation
)
{ inherit features crateOverrides runTests testCrateFlags testInputs testPreRun testPostRun; };
/* Returns an attr set with packageId mapped to the result of buildRustCrateForPkgsFunc
for the corresponding crate.
*/
builtRustCratesWithFeatures =
{ packageId
, features
, crateConfigs ? crates
, buildRustCrateForPkgsFunc
, runTests
, makeTarget ? makeDefaultTarget
} @ args:
assert (builtins.isAttrs crateConfigs);
assert (builtins.isString packageId);
assert (builtins.isList features);
assert (builtins.isAttrs (makeTarget stdenv.hostPlatform));
assert (builtins.isBool runTests);
let
rootPackageId = packageId;
mergedFeatures = mergePackageFeatures
(
args // {
inherit rootPackageId;
target = makeTarget stdenv.hostPlatform // { test = runTests; };
}
);
# Memoize built packages so that reappearing packages are only built once.
builtByPackageIdByPkgs = mkBuiltByPackageIdByPkgs pkgs;
mkBuiltByPackageIdByPkgs = pkgs:
let
self = {
crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs;
target = makeTarget pkgs.stdenv.hostPlatform;
build = mkBuiltByPackageIdByPkgs pkgs.buildPackages;
};
in
self;
buildByPackageIdForPkgsImpl = self: pkgs: packageId:
let
features = mergedFeatures."${packageId}" or [ ];
crateConfig' = crateConfigs."${packageId}";
crateConfig =
builtins.removeAttrs crateConfig' [ "resolvedDefaultFeatures" "devDependencies" ];
devDependencies =
lib.optionals
(runTests && packageId == rootPackageId)
(crateConfig'.devDependencies or [ ]);
dependencies =
dependencyDerivations {
inherit features;
inherit (self) target;
buildByPackageId = depPackageId:
# proc_macro crates must be compiled for the build architecture
if crateConfigs.${depPackageId}.procMacro or false
then self.build.crates.${depPackageId}
else self.crates.${depPackageId};
dependencies =
(crateConfig.dependencies or [ ])
++ devDependencies;
};
buildDependencies =
dependencyDerivations {
inherit features;
inherit (self.build) target;
buildByPackageId = depPackageId:
self.build.crates.${depPackageId};
dependencies = crateConfig.buildDependencies or [ ];
};
dependenciesWithRenames =
let
buildDeps = filterEnabledDependencies {
inherit features;
inherit (self) target;
dependencies = crateConfig.dependencies or [ ] ++ devDependencies;
};
hostDeps = filterEnabledDependencies {
inherit features;
inherit (self.build) target;
dependencies = crateConfig.buildDependencies or [ ];
};
in
lib.filter (d: d ? "rename") (hostDeps ++ buildDeps);
# Crate renames have the form:
#
# {
# crate_name = [
# { version = "1.2.3"; rename = "crate_name01"; }
# ];
# # ...
# }
crateRenames =
let
grouped =
lib.groupBy
(dependency: dependency.name)
dependenciesWithRenames;
versionAndRename = dep:
let
package = crateConfigs."${dep.packageId}";
in
{ inherit (dep) rename; version = package.version; };
in
lib.mapAttrs (name: choices: builtins.map versionAndRename choices) grouped;
in
buildRustCrateForPkgsFunc pkgs
(
crateConfig // {
src = crateConfig.src or (
pkgs.fetchurl rec {
name = "${crateConfig.crateName}-${crateConfig.version}.tar.gz";
# https://www.pietroalbini.org/blog/downloading-crates-io/
# Not rate-limited, CDN URL.
url = "https://static.crates.io/crates/${crateConfig.crateName}/${crateConfig.crateName}-${crateConfig.version}.crate";
sha256 =
assert (lib.assertMsg (crateConfig ? sha256) "Missing sha256 for ${name}");
crateConfig.sha256;
}
);
extraRustcOpts = lib.lists.optional (targetFeatures != [ ]) "-C target-feature=${lib.concatMapStringsSep "," (x: "+${x}") targetFeatures}";
inherit features dependencies buildDependencies crateRenames release;
}
);
in
builtByPackageIdByPkgs;
/* Returns the actual derivations for the given dependencies. */
dependencyDerivations =
{ buildByPackageId
, features
, dependencies
, target
}:
assert (builtins.isList features);
assert (builtins.isList dependencies);
assert (builtins.isAttrs target);
let
enabledDependencies = filterEnabledDependencies {
inherit dependencies features target;
};
depDerivation = dependency: buildByPackageId dependency.packageId;
in
map depDerivation enabledDependencies;
/* Returns a sanitized version of val with all values substituted that cannot
be serialized as JSON.
*/
sanitizeForJson = val:
if builtins.isAttrs val
then lib.mapAttrs (n: v: sanitizeForJson v) val
else if builtins.isList val
then builtins.map sanitizeForJson val
else if builtins.isFunction val
then "function"
else val;
/* Returns various tools to debug a crate. */
debugCrate = { packageId, target ? makeDefaultTarget stdenv.hostPlatform }:
assert (builtins.isString packageId);
let
debug = rec {
# The built tree as passed to buildRustCrate.
buildTree = buildRustCrateWithFeatures {
buildRustCrateForPkgsFunc = _: lib.id;
inherit packageId;
};
sanitizedBuildTree = sanitizeForJson buildTree;
dependencyTree = sanitizeForJson
(
buildRustCrateWithFeatures {
buildRustCrateForPkgsFunc = _: crate: {
"01_crateName" = crate.crateName or false;
"02_features" = crate.features or [ ];
"03_dependencies" = crate.dependencies or [ ];
};
inherit packageId;
}
);
mergedPackageFeatures = mergePackageFeatures {
features = rootFeatures;
inherit packageId target;
};
diffedDefaultPackageFeatures = diffDefaultPackageFeatures {
inherit packageId target;
};
};
in
{ internal = debug; };
/* Returns differences between cargo default features and crate2nix default
features.
This is useful for verifying the feature resolution in crate2nix.
*/
diffDefaultPackageFeatures =
{ crateConfigs ? crates
, packageId
, target
}:
assert (builtins.isAttrs crateConfigs);
let
prefixValues = prefix: lib.mapAttrs (n: v: { "${prefix}" = v; });
mergedFeatures =
prefixValues
"crate2nix"
(mergePackageFeatures { inherit crateConfigs packageId target; features = [ "default" ]; });
configs = prefixValues "cargo" crateConfigs;
combined = lib.foldAttrs (a: b: a // b) { } [ mergedFeatures configs ];
onlyInCargo =
builtins.attrNames
(lib.filterAttrs (n: v: !(v ? "crate2nix") && (v ? "cargo")) combined);
onlyInCrate2Nix =
builtins.attrNames
(lib.filterAttrs (n: v: (v ? "crate2nix") && !(v ? "cargo")) combined);
differentFeatures = lib.filterAttrs
(
n: v:
(v ? "crate2nix")
&& (v ? "cargo")
&& (v.crate2nix.features or [ ]) != (v."cargo".resolved_default_features or [ ])
)
combined;
in
builtins.toJSON {
inherit onlyInCargo onlyInCrate2Nix differentFeatures;
};
/* Returns an attrset mapping packageId to the list of enabled features.
If multiple paths to a dependency enable different features, the
corresponding feature sets are merged. Features in rust are additive.
*/
mergePackageFeatures =
{ crateConfigs ? crates
, packageId
, rootPackageId ? packageId
, features ? rootFeatures
, dependencyPath ? [ crates.${packageId}.crateName ]
, featuresByPackageId ? { }
, target
# Adds devDependencies to the crate with rootPackageId.
, runTests ? false
, ...
} @ args:
assert (builtins.isAttrs crateConfigs);
assert (builtins.isString packageId);
assert (builtins.isString rootPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencyPath);
assert (builtins.isAttrs featuresByPackageId);
assert (builtins.isAttrs target);
assert (builtins.isBool runTests);
let
crateConfig = crateConfigs."${packageId}" or (builtins.throw "Package not found: ${packageId}");
expandedFeatures = expandFeatures (crateConfig.features or { }) features;
enabledFeatures = enableFeatures (crateConfig.dependencies or [ ]) expandedFeatures;
depWithResolvedFeatures = dependency:
let
packageId = dependency.packageId;
features = dependencyFeatures enabledFeatures dependency;
in
{ inherit packageId features; };
resolveDependencies = cache: path: dependencies:
assert (builtins.isAttrs cache);
assert (builtins.isList dependencies);
let
enabledDependencies = filterEnabledDependencies {
inherit dependencies target;
features = enabledFeatures;
};
directDependencies = map depWithResolvedFeatures enabledDependencies;
foldOverCache = op: lib.foldl op cache directDependencies;
in
foldOverCache
(
cache: { packageId, features }:
let
cacheFeatures = cache.${packageId} or [ ];
combinedFeatures = sortedUnique (cacheFeatures ++ features);
in
if cache ? ${packageId} && cache.${packageId} == combinedFeatures
then cache
else
mergePackageFeatures {
features = combinedFeatures;
featuresByPackageId = cache;
inherit crateConfigs packageId target runTests rootPackageId;
}
);
cacheWithSelf =
let
cacheFeatures = featuresByPackageId.${packageId} or [ ];
combinedFeatures = sortedUnique (cacheFeatures ++ enabledFeatures);
in
featuresByPackageId // {
"${packageId}" = combinedFeatures;
};
cacheWithDependencies =
resolveDependencies cacheWithSelf "dep"
(
crateConfig.dependencies or [ ]
++ lib.optionals
(runTests && packageId == rootPackageId)
(crateConfig.devDependencies or [ ])
);
cacheWithAll =
resolveDependencies
cacheWithDependencies "build"
(crateConfig.buildDependencies or [ ]);
in
cacheWithAll;
/* Returns the enabled dependencies given the enabled features. */
filterEnabledDependencies = { dependencies, features, target }:
assert (builtins.isList dependencies);
assert (builtins.isList features);
assert (builtins.isAttrs target);
lib.filter
(
dep:
let
targetFunc = dep.target or (features: true);
in
targetFunc { inherit features target; }
&& (
!(dep.optional or false)
|| builtins.any (doesFeatureEnableDependency dep) features
)
)
dependencies;
/* Returns whether the given feature should enable the given dependency. */
doesFeatureEnableDependency = dependency: feature:
let
name = dependency.rename or dependency.name;
prefix = "${name}/";
len = builtins.stringLength prefix;
startsWithPrefix = builtins.substring 0 len feature == prefix;
in
feature == name || feature == "dep:" + name || startsWithPrefix;
/* Returns the expanded features for the given inputFeatures by applying the
rules in featureMap.
featureMap is an attribute set which maps feature names to lists of further
feature names to enable in case this feature is selected.
*/
expandFeatures = featureMap: inputFeatures:
assert (builtins.isAttrs featureMap);
assert (builtins.isList inputFeatures);
let
expandFeature = feature:
assert (builtins.isString feature);
[ feature ] ++ (expandFeatures featureMap (featureMap."${feature}" or [ ]));
outFeatures = lib.concatMap expandFeature inputFeatures;
in
sortedUnique outFeatures;
/* This function adds optional dependencies as features if they are enabled
indirectly by dependency features. This function mimics Cargo's behavior
described in a note at:
https://doc.rust-lang.org/nightly/cargo/reference/features.html#dependency-features
*/
enableFeatures = dependencies: features:
assert (builtins.isList features);
assert (builtins.isList dependencies);
let
additionalFeatures = lib.concatMap
(
dependency:
assert (builtins.isAttrs dependency);
let
enabled = builtins.any (doesFeatureEnableDependency dependency) features;
in
if (dependency.optional or false) && enabled
then [ (dependency.rename or dependency.name) ]
else [ ]
)
dependencies;
in
sortedUnique (features ++ additionalFeatures);
/*
Returns the actual features for the given dependency.
features: The features of the crate that refers this dependency.
*/
dependencyFeatures = features: dependency:
assert (builtins.isList features);
assert (builtins.isAttrs dependency);
let
defaultOrNil =
if dependency.usesDefaultFeatures or true
then [ "default" ]
else [ ];
explicitFeatures = dependency.features or [ ];
additionalDependencyFeatures =
let
dependencyPrefix = (dependency.rename or dependency.name) + "/";
dependencyFeatures =
builtins.filter (f: lib.hasPrefix dependencyPrefix f) features;
in
builtins.map (lib.removePrefix dependencyPrefix) dependencyFeatures;
in
defaultOrNil ++ explicitFeatures ++ additionalDependencyFeatures;
/* Sorts and removes duplicates from a list of strings. */
sortedUnique = features:
assert (builtins.isList features);
assert (builtins.all builtins.isString features);
let
outFeaturesSet = lib.foldl (set: feature: set // { "${feature}" = 1; }) { } features;
outFeaturesUnique = builtins.attrNames outFeaturesSet;
in
builtins.sort (a: b: a < b) outFeaturesUnique;
deprecationWarning = message: value:
if strictDeprecation
then builtins.throw "strictDeprecation enabled, aborting: ${message}"
else builtins.trace message value;
#
# crate2nix/default.nix (excerpt end)
#
};
}