about summary refs log tree commit diff
path: root/tvix/eval/src/value
diff options
context:
space:
mode:
authorGriffin Smith <root@gws.fyi>2022-10-08T17·33-0400
committergrfn <grfn@gws.fyi>2022-10-08T19·02+0000
commit278bccc1ea3542610012177171234ad1c3c44dcf (patch)
tree029d2723a6dd1e788cc5c165e015df255c033bed /tvix/eval/src/value
parentf6bcd11cad1e370deb0580ae1a7f4d050cd75bab (diff)
refactor(tvix/eval): Encapsulate Value::Attrs construction r/5067
Factor out the construction of Value::Attrs (including the Rc) into a
new `attrs` constructor function, to abstract away the presence of the
Rc itself.

Change-Id: I42fd4c3841e1db368db999ddd651277ff995f025
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6892
Autosubmit: grfn <grfn@gws.fyi>
Reviewed-by: sterni <sternenseemann@systemli.org>
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/eval/src/value')
-rw-r--r--tvix/eval/src/value/arbitrary.rs4
-rw-r--r--tvix/eval/src/value/mod.rs8
2 files changed, 10 insertions, 2 deletions
diff --git a/tvix/eval/src/value/arbitrary.rs b/tvix/eval/src/value/arbitrary.rs
index 20be3732e0..cd7629cfb9 100644
--- a/tvix/eval/src/value/arbitrary.rs
+++ b/tvix/eval/src/value/arbitrary.rs
@@ -1,7 +1,7 @@
 //! Support for configurable generation of arbitrary nix values
 
 use proptest::{prelude::*, strategy::BoxedStrategy};
-use std::{ffi::OsString, rc::Rc};
+use std::ffi::OsString;
 
 use super::{NixAttrs, NixList, NixString, Value};
 
@@ -70,7 +70,7 @@ fn non_internal_value() -> impl Strategy<Value = Value> {
                 Default::default(),
                 Parameters::Strategy(inner.clone())
             ))
-            .prop_map(|a| Value::Attrs(Rc::new(a))),
+            .prop_map(Value::attrs),
             any_with::<NixList>((Default::default(), Parameters::Strategy(inner)))
                 .prop_map(Value::List)
         ]
diff --git a/tvix/eval/src/value/mod.rs b/tvix/eval/src/value/mod.rs
index e6a6052c21..dd61ecf0bb 100644
--- a/tvix/eval/src/value/mod.rs
+++ b/tvix/eval/src/value/mod.rs
@@ -115,6 +115,14 @@ impl<'a> Deref for ForceResult<'a> {
     }
 }
 
+/// Constructors
+impl Value {
+    /// Construct a [`Value::Attrs`] from a [`NixAttrs`].
+    pub fn attrs(attrs: NixAttrs) -> Self {
+        Self::Attrs(Rc::new(attrs))
+    }
+}
+
 impl Value {
     /// Coerce a `Value` to a string. See `CoercionKind` for a rundown of what
     /// input types are accepted under what circumstances.