feat(tvix/nix-compat/wire): introduce BytesWriter

This deals with writing byte packets of larger sizes to an underlying
AsyncWrite.

Its constructor receives the expected size. It also deals with writing
padding if flush/shutdown is called after writing all the payload.

Change-Id: I8acbf992467f3862ffb8c7d669e8c0c8eced14c1
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11355
Reviewed-by: picnoir picnoir <picnoir@alternativebit.fr>
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: Brian Olsen <me@griff.name>
Tested-by: BuildkiteCI
This commit is contained in:
Florian Klink 2024-04-04 19:03:44 +03:00 committed by clbot
parent 39276dc5b4
commit f3d8c633f2
7 changed files with 555 additions and 7 deletions

View file

@ -763,6 +763,7 @@ dependencies = [
"glob",
"nom",
"num-traits",
"pin-project-lite",
"serde",
"serde_json",
"sha2",

View file

@ -1,5 +1,5 @@
# This file was @generated by crate2nix 0.12.0 with the command:
# "generate"
# This file was @generated by crate2nix 0.13.0 with the command:
# "generate" "--all-features"
# See https://github.com/kolloch/crate2nix for more info.
{ nixpkgs ? <nixpkgs>
@ -2372,6 +2372,11 @@ rec {
name = "num-traits";
packageId = "num-traits";
}
{
name = "pin-project-lite";
packageId = "pin-project-lite";
optional = true;
}
{
name = "serde";
packageId = "serde";
@ -2403,11 +2408,12 @@ rec {
}
];
features = {
"async" = [ "futures-util" "tokio" ];
"async" = [ "futures-util" "tokio" "pin-project-lite" ];
"futures-util" = [ "dep:futures-util" ];
"pin-project-lite" = [ "dep:pin-project-lite" ];
"tokio" = [ "dep:tokio" ];
};
resolvedDefaultFeatures = [ "async" "futures-util" "tokio" ];
resolvedDefaultFeatures = [ "async" "futures-util" "pin-project-lite" "tokio" ];
};
"nom" = rec {
crateName = "nom";
@ -5205,6 +5211,7 @@ rec {
(
_: {
buildTests = true;
release = false;
}
);
# If the user hasn't set any pre/post commands, we don't want to
@ -5229,6 +5236,16 @@ rec {
# recreate a file hierarchy as when running tests with cargo
# the source for test data
# It's necessary to locate the source in $NIX_BUILD_TOP/source/
# instead of $NIX_BUILD_TOP/
# because we compiled those test binaries in the former and not the latter.
# So all paths will expect source tree to be there and not in the build top directly.
# For example: $NIX_BUILD_TOP := /build in general, if you ask yourself.
# TODO(raitobezarius): I believe there could be more edge cases if `crate.sourceRoot`
# do exist but it's very hard to reason about them, so let's wait until the first bug report.
mkdir -p source/
cd source/
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
# build outputs