Skip to content

Commit 6ed62cd

Browse files
committed
Added overload for "TryCreate" with validation error.
1 parent 3f8cf27 commit 6ed62cd

File tree

6 files changed

+346
-93
lines changed

6 files changed

+346
-93
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<Copyright>(c) $([System.DateTime]::Now.Year), Pawel Gerr. All rights reserved.</Copyright>
5-
<VersionPrefix>7.4.0</VersionPrefix>
5+
<VersionPrefix>7.5.0</VersionPrefix>
66
<Authors>Pawel Gerr</Authors>
77
<GenerateDocumentationFile>true</GenerateDocumentationFile>
88
<PackageProjectUrl>https://github.com/PawelGerr/Thinktecture.Runtime.Extensions</PackageProjectUrl>

samples/Thinktecture.Runtime.Extensions.Samples/ValueObjects/ValueObjectDemos.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ private static void DemoForSimpleValueObjects(ILogger logger)
5151
if (ProductName.TryCreate("Milk", out milk))
5252
logger.Information("Product name '{Name}' created with 'TryCreate'.", milk);
5353

54+
if (!ProductName.TryCreate("X", out _, out var error))
55+
logger.Information("Failed to create a product with name 'X'. Error: {Error}", error.Message);
56+
5457
// Thanks to setting "NullInFactoryMethodsYieldsNull = true" the method "Create" returns null
5558
var nullProduct = ProductName.Create(null);
5659
logger.Information("Null-Product name: {NullProduct}", nullProduct);
@@ -181,6 +184,9 @@ private static void DemoForComplexValueObjects(ILogger logger)
181184
if (Boundary.TryCreate(lower: 1, upper: 2, out var boundaryWithTryCreate))
182185
logger.Information("Boundary with TryCreate: {Boundary}", boundaryWithTryCreate);
183186

187+
if (!Boundary.TryCreate(lower: 2, upper: 1, out _, out var error))
188+
logger.Information("Failed to create Boundary (2, 1). Error: {Error}", error.Message);
189+
184190
var validationError = Boundary.Validate(lower: 1, upper: 2, out var boundaryWithValidate);
185191

186192
if (validationError is null)

src/Thinktecture.Runtime.Extensions.SourceGenerator/CodeAnalysis/ValueObjects/ComplexValueObjectCodeGenerator.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,28 @@ private void GenerateTryCreateMethod()
180180
_sb.Append(@"
181181
[global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out ").Append(_state.TypeFullyQualifiedNullAnnotated).Append(@" obj)
182182
{
183-
var validationError = Validate(");
183+
return ").Append(_state.Settings.TryCreateFactoryMethodName).Append("(");
184+
185+
_sb.RenderArguments(fieldsAndProperties);
186+
187+
if (fieldsAndProperties.Count > 0)
188+
_sb.Append(", ");
189+
190+
_sb.Append(@"out obj, out _);
191+
}");
192+
193+
_sb.Append(@"
194+
195+
public static bool ").Append(_state.Settings.TryCreateFactoryMethodName).Append("(");
196+
197+
_sb.RenderArgumentsWithType(fieldsAndProperties, @"
198+
", ",", trailingComma: true);
199+
200+
_sb.Append(@"
201+
[global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out ").Append(_state.TypeFullyQualifiedNullAnnotated).Append(@" obj,
202+
[global::System.Diagnostics.CodeAnalysis.NotNullWhen(false)] out ").Append(_state.ValidationError.TypeFullyQualified).Append(@"? validationError)
203+
{
204+
validationError = Validate(");
184205

185206
_sb.RenderArguments(fieldsAndProperties);
186207

src/Thinktecture.Runtime.Extensions.SourceGenerator/CodeAnalysis/ValueObjects/KeyedValueObjectCodeGenerator.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,17 @@ private void GenerateTryCreateMethod(bool allowNullOutput, bool emptyStringYield
323323
324324
public static bool ").Append(_state.Settings.TryCreateFactoryMethodName).Append("(").RenderArgumentWithType(_state.KeyMember, useNullableTypes: allowNullOutput).Append(emptyStringYieldsNull ? "," : ", [global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)]").Append(" out ").Append(_state.TypeFullyQualifiedNullAnnotated).Append(@" obj)
325325
{
326-
var validationError = Validate(").RenderArgument(_state.KeyMember).Append(@", null, out obj);
326+
return ").Append(_state.Settings.TryCreateFactoryMethodName).Append("(").RenderArgument(_state.KeyMember).Append(@", out obj, out _);
327+
}");
328+
329+
_sb.Append(@"
330+
331+
public static bool ").Append(_state.Settings.TryCreateFactoryMethodName).Append(@"(
332+
").RenderArgumentWithType(_state.KeyMember, useNullableTypes: allowNullOutput).Append(@",
333+
").Append(emptyStringYieldsNull ? null : "[global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] ").Append("out ").Append(_state.TypeFullyQualifiedNullAnnotated).Append(@" obj,
334+
[global::System.Diagnostics.CodeAnalysis.NotNullWhen(false)] out ").Append(_state.ValidationError.TypeFullyQualified).Append(@"? validationError)
335+
{
336+
validationError = Validate(").RenderArgument(_state.KeyMember).Append(@", null, out obj);
327337
328338
return validationError is null;
329339
}");

0 commit comments

Comments
 (0)