From a88e60ff498bb13671e562e9c5d59ca32f114cc8 Mon Sep 17 00:00:00 2001 From: Louis van der Walt Date: Tue, 12 May 2026 13:28:49 +0200 Subject: [PATCH 1/2] Overload filters to accept Option[Type] --- .../main/scala/flatgraph/codegen/CodeSnippets.scala | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala b/domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala index c2c23f2a..485ad6c2 100644 --- a/domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala +++ b/domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala @@ -251,6 +251,12 @@ object CodeSnippets { | traversal.filter{_.$nameCamelCase == value} | |/** + | * Traverse to nodes where the $nameCamelCase equals the given `value`, or no results if `value` is None + | * */ + |def $nameCamelCase(value: Option[$baseType]): Iterator[NodeType] = + | value match { case Some(_val) => $nameCamelCase(_val); case None => Iterator.empty } + | + |/** | * Traverse to nodes where the $nameCamelCase equals at least one of the given `values` | * */ |def $nameCamelCase(values: $baseType*): Iterator[NodeType] = { @@ -307,6 +313,13 @@ object CodeSnippets { | traversal.filter{node => val tmp = node.$nameCamelCase; tmp.isDefined && tmp.get == value} | |/** + | * Traverse to nodes where the $nameCamelCase equals the given `value`. + | * If `value` is None, only nodes where $nameCamelCase is not set are included. + | * */ + |def $nameCamelCase(value: Option[$baseType]): Iterator[NodeType] = + | value match { case Some(_val) => $nameCamelCase(_val); case None => traversal.filter{node => node.$nameCamelCase.isEmpty} } + | + |/** | * Traverse to nodes where the $nameCamelCase equals at least one of the given `values` | * */ |def $nameCamelCase(values: $baseType*): Iterator[NodeType] = { From 1f208556f6bee4ec383c7d243a16af61e0c0b74d Mon Sep 17 00:00:00 2001 From: Louis van der Walt Date: Mon, 18 May 2026 08:37:35 +0200 Subject: [PATCH 2/2] Update API to add IfPresent api to optional int traversal --- .../src/main/scala/flatgraph/codegen/CodeSnippets.scala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala b/domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala index 485ad6c2..56b6269c 100644 --- a/domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala +++ b/domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala @@ -320,6 +320,12 @@ object CodeSnippets { | value match { case Some(_val) => $nameCamelCase(_val); case None => traversal.filter{node => node.$nameCamelCase.isEmpty} } | |/** + | * Traverse to nodes where the $nameCamelCase equals the given `value`, or no results if `value` is None. + | * */ + |def ${nameCamelCase}IfPresent(value: Option[$baseType]): Iterator[NodeType] = + | value match { case Some(_val) => $nameCamelCase(_val); case None => Iterator.empty } + | + |/** | * Traverse to nodes where the $nameCamelCase equals at least one of the given `values` | * */ |def $nameCamelCase(values: $baseType*): Iterator[NodeType] = {