feat(tvix/store): improve error message formatting

WrongSorting(Vec<u8>) actually encodes the name of a node, so if we can,
we want this to display it as a string (and fall back to the base64
encoding if we can't).

Before:

> rpc error: code = InvalidArgument desc = directory b3:yfwNlpPm8MkrRvshGHfgMtKLoSDtX2pKliVuVWmUt5g= failed validation: [108, 111, 99, 97, 108, 101] is not sorted

After:

> rpc error: code = InvalidArgument desc = directory b3:yfwNlpPm8MkrRvshGHfgMtKLoSDtX2pKliVuVWmUt5g= failed validation: locale is not sorted

Change-Id: I68420c53a89cb1aa96e4bdce414366cebcb7915f
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9350
Tested-by: BuildkiteCI
Reviewed-by: Connor Brewster <cbrewster@hey.com>
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
This commit is contained in:
Florian Klink 2023-09-17 14:59:35 +03:00 committed by flokli
parent 54bb63dea3
commit 51b8571c48

View file

@ -1,5 +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 std::{collections::HashSet, iter::Peekable}; use std::{collections::HashSet, iter::Peekable};
use thiserror::Error; use thiserror::Error;
@ -34,7 +35,7 @@ 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("{0:?} is not sorted")] #[error("{} is not sorted", std::str::from_utf8(.0).unwrap_or(&BASE64.encode(.0)))]
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("{0:?} is a duplicate name")]