From e24248df3bba6c4df2028a7eb9e68660b1d3b4e7 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 9 Aug 2022 16:52:01 +0300 Subject: feat(tvix/value): add some necessary helpers for strings Deriving Ord/Eq is required for the ordered BTreeMaps. Once interning is implemented this will require some extra magic for the sort order, but that's fine. Change-Id: I0c654648eb3609a4a01d84868c25f43a4d35bc2e Reviewed-on: https://cl.tvl.fyi/c/depot/+/6089 Tested-by: BuildkiteCI Reviewed-by: grfn --- tvix/eval/src/value/mod.rs | 14 ++++++++++++-- tvix/eval/src/value/string.rs | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tvix/eval/src/value/mod.rs b/tvix/eval/src/value/mod.rs index ea0c89e6b6..56f8620d3a 100644 --- a/tvix/eval/src/value/mod.rs +++ b/tvix/eval/src/value/mod.rs @@ -7,8 +7,8 @@ mod attrs; mod string; use crate::errors::{Error, EvalResult}; -use attrs::NixAttrs; -use string::NixString; +pub use attrs::NixAttrs; +pub use string::NixString; #[derive(Clone, Debug, PartialEq)] pub enum Value { @@ -49,6 +49,16 @@ impl Value { }), } } + + pub fn as_string(self) -> EvalResult { + match self { + Value::String(s) => Ok(s), + other => Err(Error::TypeError { + expected: "string", + actual: other.type_of(), + }), + } + } } impl Display for Value { diff --git a/tvix/eval/src/value/string.rs b/tvix/eval/src/value/string.rs index 7e6f5ecf3b..531bcf547b 100644 --- a/tvix/eval/src/value/string.rs +++ b/tvix/eval/src/value/string.rs @@ -3,8 +3,8 @@ use std::fmt::Display; /// This module implements Nix language strings and their different /// backing implementations. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct NixString(String); +#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct NixString(pub String); impl Display for NixString { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { -- cgit 1.4.1