From f2f0221f767a94f4ba4d884a0d17d27381c3c296 Mon Sep 17 00:00:00 2001 From: JustFixMe Date: Sun, 11 Feb 2024 00:31:22 +0400 Subject: [PATCH] added NotEqualTo --- .../EnsureExtensionsExecutor.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Railway.SourceGenerator/EnsureExtensionsExecutor.cs b/Railway.SourceGenerator/EnsureExtensionsExecutor.cs index e1bd7ae..b49a299 100644 --- a/Railway.SourceGenerator/EnsureExtensionsExecutor.cs +++ b/Railway.SourceGenerator/EnsureExtensionsExecutor.cs @@ -70,6 +70,10 @@ public sealed class EnsureExtensionsExecutor : IGeneratorExecutor errorGenerationDefinitions.ForEach(def => GenerateEqualToExtensions(sb, def.ErrorParameterDecl, def.ErrorValueExpr)); sb.AppendLine("#endregion"); + sb.AppendLine("#region NotEqualTo"); + errorGenerationDefinitions.ForEach(def => GenerateNotEqualToExtensions(sb, def.ErrorParameterDecl, def.ErrorValueExpr)); + sb.AppendLine("#endregion"); + sb.AppendLine("#region LessThan"); errorGenerationDefinitions.ForEach(def => GenerateLessThanExtensions(sb, def.ErrorParameterDecl, def.ErrorValueExpr)); sb.AppendLine("#endregion"); @@ -393,6 +397,27 @@ public sealed class EnsureExtensionsExecutor : IGeneratorExecutor """); } + private void GenerateNotEqualToExtensions(StringBuilder sb, string errorParameterDecl, string errorValueExpr) + { + string defaultErrorExpr = "?? Error.New(DefaultErrorType, $\"Value {{{ensure.ValueExpression}}} is equal to requirement.\")"; + sb.AppendLine($$""" + [PureAttribute] + [GeneratedCodeAttribute("{{nameof(EnsureExtensionsExecutor)}}", "1.0.0.0")] + public static Ensure NotEqualTo(this in Ensure ensure, T requirement, {{errorParameterDecl}}) + where T : IEquatable + { + return ensure.State switch + { + ResultState.Success => !ensure.Value.Equals(requirement) + ? new(ensure.Value, ensure.ValueExpression) + : new({{errorValueExpr}} {{defaultErrorExpr}}, ensure.ValueExpression), + ResultState.Error => new(ensure.Error!, ensure.ValueExpression), + _ => throw new EnsureNotInitializedException(nameof(ensure)) + }; + } + """); + } + private void GenerateLessThanExtensions(StringBuilder sb, string errorParameterDecl, string errorValueExpr) { string defaultErrorExpr = "?? Error.New(DefaultErrorType, $\"Value {{{ensure.ValueExpression}}} is not less than requirement.\")";