feat(tvix/eval): Implement Display for io::FileType

In newer versions of Nix there's a builtins.readFileType builtin, we
should try to avoid duplicating the enum -> string conversion by
implementating Display before we implement builtins.readFileType.

Change-Id: I579e95949a76eb33d2e7bda0000ed84859df765e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12129
Reviewed-by: flokli <flokli@flokli.de>
Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com>
Tested-by: BuildkiteCI
This commit is contained in:
Ilan Joselevich 2024-08-04 00:48:20 +03:00 committed by clbot
parent 591c5ffe53
commit c554c1c1c0
2 changed files with 14 additions and 7 deletions

View file

@ -9,7 +9,6 @@ use std::{
use crate::{
self as tvix_eval,
errors::ErrorKind,
io::FileType,
value::NixAttrs,
vm::generators::{self, GenCo},
NixString, Value,
@ -60,12 +59,7 @@ mod impure_builtins {
NixString::from(
String::from_utf8(name.to_vec()).expect("parsing file name as string"),
),
Value::from(match ftype {
FileType::Directory => "directory",
FileType::Regular => "regular",
FileType::Symlink => "symlink",
FileType::Unknown => "unknown",
}),
Value::from(ftype.to_string()),
)
});

View file

@ -35,6 +35,19 @@ pub enum FileType {
Unknown,
}
impl std::fmt::Display for FileType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let type_as_str = match &self {
FileType::Directory => "directory",
FileType::Regular => "regular",
FileType::Symlink => "symlink",
FileType::Unknown => "unknown",
};
write!(f, "{}", type_as_str)
}
}
/// Represents all possible filesystem interactions that exist in the Nix
/// language, and that need to be executed somehow.
///