From 7b609ea781c0f849118025772e6558af141a1e09 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sun, 23 Aug 2026 08:39:35 +0000 Subject: [PATCH] Parse primitive defaults through record wire types --- node-graph/graph-craft/src/document/value.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/node-graph/graph-craft/src/document/value.rs b/node-graph/graph-craft/src/document/value.rs index 3397fdee92..583cc760d3 100644 --- a/node-graph/graph-craft/src/document/value.rs +++ b/node-graph/graph-craft/src/document/value.rs @@ -723,7 +723,8 @@ impl TaggedValue { match ty { Type::Generic(_) => None, - Type::Record(_) => None, + // A leveled wire's default is its element's default, as in `from_type`. + Type::Record(inner) => TaggedValue::from_primitive_string(string, inner), Type::Concrete(concrete_type) => { let ty = concrete_type.id?; use std::any::TypeId; @@ -974,3 +975,19 @@ mod leveled_edges { } } } + +#[cfg(test)] +mod record_defaults { + use super::*; + use core_types::registry::record_edge_type; + + // The registry can present a record row first (wasm registration order), + // so primitive defaults must parse through the record wrapping. + #[test] + fn primitive_defaults_parse_through_record_wires() { + let leveled = core_types::registry::record_type::(); + assert_eq!(TaggedValue::from_primitive_string("2.", &leveled), Some(TaggedValue::F64(2.))); + assert_eq!(TaggedValue::from_primitive_string("5", &record_edge_type::()), Some(TaggedValue::U32(5))); + assert_eq!(TaggedValue::from_primitive_string("true", &record_edge_type::()), Some(TaggedValue::Bool(true))); + } +}