From 050ded4da2ab4daf747c1937e1c8b2a5d33a328f Mon Sep 17 00:00:00 2001 From: Nasr Date: Wed, 26 Feb 2025 10:53:32 +0800 Subject: [PATCH 1/6] fix(torii-graphql): option enums in arrays --- crates/torii/graphql/src/query/mod.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/torii/graphql/src/query/mod.rs b/crates/torii/graphql/src/query/mod.rs index cca7ee8816..43b48882ae 100644 --- a/crates/torii/graphql/src/query/mod.rs +++ b/crates/torii/graphql/src/query/mod.rs @@ -190,6 +190,12 @@ pub fn value_mapping_from_row( match value { Value::Object(obj) => { for (field_name, field_value) in obj.iter_mut() { + if type_data.type_mapping().unwrap().contains_key("option") + && field_value == &Value::List(vec![]) + { + continue; + } + populate_value( field_value, &type_data.type_mapping().unwrap()[field_name], From 0d9a2c5f8dc1b0780af620a4d59afeecceb826f4 Mon Sep 17 00:00:00 2001 From: Nasr Date: Wed, 26 Feb 2025 12:43:34 +0800 Subject: [PATCH 2/6] fix nullable json data --- crates/torii/graphql/src/object/model_data.rs | 2 +- crates/torii/graphql/src/query/mod.rs | 20 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/crates/torii/graphql/src/object/model_data.rs b/crates/torii/graphql/src/object/model_data.rs index c1d2a89150..d4574daa45 100644 --- a/crates/torii/graphql/src/object/model_data.rs +++ b/crates/torii/graphql/src/object/model_data.rs @@ -216,7 +216,7 @@ pub fn object(type_name: &str, type_mapping: &TypeMapping, path_array: Vec { - Ok(Some(value_mapping.get(&field_name).unwrap().clone())) + Ok(Some(value_mapping.get(&field_name).unwrap_or(&Value::Null).clone())) } _ => Err("Incorrect value, requires Value::Object".into()), }; diff --git a/crates/torii/graphql/src/query/mod.rs b/crates/torii/graphql/src/query/mod.rs index 43b48882ae..0f721c7f68 100644 --- a/crates/torii/graphql/src/query/mod.rs +++ b/crates/torii/graphql/src/query/mod.rs @@ -189,18 +189,16 @@ pub fn value_mapping_from_row( ) { match value { Value::Object(obj) => { - for (field_name, field_value) in obj.iter_mut() { - if type_data.type_mapping().unwrap().contains_key("option") - && field_value == &Value::List(vec![]) - { - continue; + for (field_name, field_type) in type_data.type_mapping().unwrap().iter() { + if let Some(field_value) = obj.get_mut(field_name) { + populate_value( + field_value, + field_type, + entity_id, + ); + } else { + obj.insert(field_name.clone(), Value::Null); } - - populate_value( - field_value, - &type_data.type_mapping().unwrap()[field_name], - entity_id, - ); } if type_data.type_mapping().map_or(false, |mapping| { From 39612ca77032b492e77e6f1c3695c539ec85788c Mon Sep 17 00:00:00 2001 From: Nasr Date: Wed, 26 Feb 2025 12:51:17 +0800 Subject: [PATCH 3/6] fmt --- crates/torii/graphql/src/query/mod.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/crates/torii/graphql/src/query/mod.rs b/crates/torii/graphql/src/query/mod.rs index 0f721c7f68..093b5773b8 100644 --- a/crates/torii/graphql/src/query/mod.rs +++ b/crates/torii/graphql/src/query/mod.rs @@ -189,13 +189,11 @@ pub fn value_mapping_from_row( ) { match value { Value::Object(obj) => { - for (field_name, field_type) in type_data.type_mapping().unwrap().iter() { + for (field_name, field_type) in + type_data.type_mapping().unwrap().iter() + { if let Some(field_value) = obj.get_mut(field_name) { - populate_value( - field_value, - field_type, - entity_id, - ); + populate_value(field_value, field_type, entity_id); } else { obj.insert(field_name.clone(), Value::Null); } From 3093f3a0d185348dd35051b79c2303b6e1f0d24b Mon Sep 17 00:00:00 2001 From: Nasr Date: Wed, 26 Feb 2025 14:45:33 +0800 Subject: [PATCH 4/6] simplify enum array handling case --- crates/torii/graphql/src/query/mod.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/crates/torii/graphql/src/query/mod.rs b/crates/torii/graphql/src/query/mod.rs index 093b5773b8..1522c91a3d 100644 --- a/crates/torii/graphql/src/query/mod.rs +++ b/crates/torii/graphql/src/query/mod.rs @@ -195,19 +195,14 @@ pub fn value_mapping_from_row( if let Some(field_value) = obj.get_mut(field_name) { populate_value(field_value, field_type, entity_id); } else { - obj.insert(field_name.clone(), Value::Null); + obj.insert(field_name.clone(), if field_name == "option" { + Value::String(obj.keys().next().unwrap().to_string()) + } else { + Value::Null + }); } } - - if type_data.type_mapping().map_or(false, |mapping| { - mapping.contains_key(&Name::new("option")) - }) { - obj.insert( - Name::new("option"), - Value::String(obj.keys().next().unwrap().to_string()), - ); - } - + // insert $entity_id$ relation if let Some(entity_id) = entity_id { obj.insert( From 502af292e44ff6878cb667290b9eb504a25668ee Mon Sep 17 00:00:00 2001 From: Nasr Date: Wed, 26 Feb 2025 14:51:19 +0800 Subject: [PATCH 5/6] expxlicit unwrap to catch errors --- crates/torii/graphql/src/object/model_data.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/torii/graphql/src/object/model_data.rs b/crates/torii/graphql/src/object/model_data.rs index d4574daa45..c1d2a89150 100644 --- a/crates/torii/graphql/src/object/model_data.rs +++ b/crates/torii/graphql/src/object/model_data.rs @@ -216,7 +216,7 @@ pub fn object(type_name: &str, type_mapping: &TypeMapping, path_array: Vec { - Ok(Some(value_mapping.get(&field_name).unwrap_or(&Value::Null).clone())) + Ok(Some(value_mapping.get(&field_name).unwrap().clone())) } _ => Err("Incorrect value, requires Value::Object".into()), }; From bef815131c85b63cfc477a1b1e2beb09d6f08e4f Mon Sep 17 00:00:00 2001 From: Nasr Date: Wed, 26 Feb 2025 15:32:39 +0800 Subject: [PATCH 6/6] das --- crates/torii/graphql/src/query/mod.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/crates/torii/graphql/src/query/mod.rs b/crates/torii/graphql/src/query/mod.rs index 1522c91a3d..ab2abd25e7 100644 --- a/crates/torii/graphql/src/query/mod.rs +++ b/crates/torii/graphql/src/query/mod.rs @@ -195,14 +195,19 @@ pub fn value_mapping_from_row( if let Some(field_value) = obj.get_mut(field_name) { populate_value(field_value, field_type, entity_id); } else { - obj.insert(field_name.clone(), if field_name == "option" { - Value::String(obj.keys().next().unwrap().to_string()) - } else { - Value::Null - }); + obj.insert( + field_name.clone(), + if field_name == "option" { + Value::String( + obj.keys().next().unwrap().to_string(), + ) + } else { + Value::Null + }, + ); } } - + // insert $entity_id$ relation if let Some(entity_id) = entity_id { obj.insert(