fix(tvix/castore): use bstr for formatting names in errors

Much friendlier than either Base64 or raw byte slices.

Change-Id: I9b4cdd57c83ddc76c0be8103da4320207657a72b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9622
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
This commit is contained in:
edef 2023-10-10 22:06:45 +00:00
parent baae5ce473
commit 930edb69d7
4 changed files with 10 additions and 4 deletions

1
tvix/Cargo.lock generated
View file

@ -2713,6 +2713,7 @@ version = "0.1.0"
dependencies = [ dependencies = [
"async-stream", "async-stream",
"blake3", "blake3",
"bstr",
"bytes", "bytes",
"data-encoding", "data-encoding",
"futures", "futures",

View file

@ -8116,6 +8116,10 @@ rec {
packageId = "blake3"; packageId = "blake3";
features = [ "rayon" "std" ]; features = [ "rayon" "std" ];
} }
{
name = "bstr";
packageId = "bstr";
}
{ {
name = "bytes"; name = "bytes";
packageId = "bytes"; packageId = "bytes";

View file

@ -22,6 +22,7 @@ tower = "0.4.13"
tracing = "0.1.37" tracing = "0.1.37"
url = "2.4.0" url = "2.4.0"
walkdir = "2.4.0" walkdir = "2.4.0"
bstr = "1.6.0"
[dependencies.tonic-reflection] [dependencies.tonic-reflection]
optional = true optional = true

View file

@ -1,6 +1,6 @@
#![allow(clippy::derive_partial_eq_without_eq, non_snake_case)] #![allow(clippy::derive_partial_eq_without_eq, non_snake_case)]
// https://github.com/hyperium/tonic/issues/1056 // https://github.com/hyperium/tonic/issues/1056
use data_encoding::BASE64; use bstr::ByteSlice;
use std::{collections::HashSet, iter::Peekable}; use std::{collections::HashSet, iter::Peekable};
use thiserror::Error; use thiserror::Error;
@ -29,13 +29,13 @@ mod tests;
#[derive(Debug, PartialEq, Eq, Error)] #[derive(Debug, PartialEq, Eq, Error)]
pub enum ValidateDirectoryError { pub enum ValidateDirectoryError {
/// Elements are not in sorted order /// Elements are not in sorted order
#[error("{} is not sorted", std::str::from_utf8(.0).unwrap_or(&BASE64.encode(.0)))] #[error("{:?} is not sorted", .0.as_bstr())]
WrongSorting(Vec<u8>), WrongSorting(Vec<u8>),
/// Multiple elements with the same name encountered /// Multiple elements with the same name encountered
#[error("{0:?} is a duplicate name")] #[error("{:?} is a duplicate name", .0.as_bstr())]
DuplicateName(Vec<u8>), DuplicateName(Vec<u8>),
/// Invalid name encountered /// Invalid name encountered
#[error("Invalid name in {0:?}")] #[error("Invalid name in {:?}", .0.as_bstr())]
InvalidName(Vec<u8>), InvalidName(Vec<u8>),
/// Invalid digest length encountered /// Invalid digest length encountered
#[error("Invalid Digest length: {0}")] #[error("Invalid Digest length: {0}")]