From c67747cbe126649057e47f2f4756645a553e682e Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 9 Aug 2022 17:08:10 +0300 Subject: feat(tvix/value): add runtime representation of simple lists There might be more logic in the future to encapsulate different backing implementations of lists as well. Change-Id: Ib7064fab48bf88b0c8913b0ecfa2108177c7c9fd Reviewed-on: https://cl.tvl.fyi/c/depot/+/6093 Tested-by: BuildkiteCI Reviewed-by: grfn Autosubmit: tazjin --- tvix/eval/src/value/list.rs | 14 ++++++++++++++ tvix/eval/src/value/mod.rs | 5 +++++ 2 files changed, 19 insertions(+) create mode 100644 tvix/eval/src/value/list.rs diff --git a/tvix/eval/src/value/list.rs b/tvix/eval/src/value/list.rs new file mode 100644 index 0000000000..08f56262e0 --- /dev/null +++ b/tvix/eval/src/value/list.rs @@ -0,0 +1,14 @@ +/// This module implements Nix lists. +use std::fmt::Display; + +use super::Value; + +#[derive(Clone, Debug, PartialEq)] +pub struct NixList(pub Vec); + +impl Display for NixList { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + // TODO(tazjin): format lists properly + f.write_fmt(format_args!("", self.0.len())) + } +} diff --git a/tvix/eval/src/value/mod.rs b/tvix/eval/src/value/mod.rs index 56f8620d3a..d00fc56e2a 100644 --- a/tvix/eval/src/value/mod.rs +++ b/tvix/eval/src/value/mod.rs @@ -4,10 +4,12 @@ use std::fmt::Display; use std::rc::Rc; mod attrs; +mod list; mod string; use crate::errors::{Error, EvalResult}; pub use attrs::NixAttrs; +pub use list::NixList; pub use string::NixString; #[derive(Clone, Debug, PartialEq)] @@ -18,6 +20,7 @@ pub enum Value { Float(f64), String(NixString), Attrs(Rc), + List(NixList), } impl Value { @@ -37,6 +40,7 @@ impl Value { Value::Float(_) => "float", Value::String(_) => "string", Value::Attrs(_) => "set", + Value::List(_) => "list", } } @@ -71,6 +75,7 @@ impl Display for Value { Value::Float(num) => f.write_fmt(format_args!("{}", num)), Value::String(s) => s.fmt(f), Value::Attrs(attrs) => attrs.fmt(f), + Value::List(list) => list.fmt(f), } } } -- cgit 1.4.1