NodePipeline/NodePipeline.Abstractions/Validators/StringLengthValidator.cs
2026-01-02 20:55:25 +03:00

36 lines
1.4 KiB
C#

using System;
using NodePipeline.Abstractions.Interfaces;
using NodePipeline.Abstractions.Interfaces.Nodes;
using NodePipeline.Abstractions.Models.Validation;
namespace NodePipeline.Abstractions.Validators;
public sealed class StringLengthValidator(IPipelineLocalizationProvider localizer, int? min, int? max)
: NodeFieldValidatorBase<string>(localizer)
{
private readonly int? _max = min.HasValue && max.HasValue
? Math.Max(min.Value, max.Value)
: max;
private readonly int? _min = min.HasValue && max.HasValue
? Math.Min(min.Value, max.Value)
: min;
public override NodeFieldValidationResult Validate(INodeField<string> nodeField)
{
var stringLength = nodeField.Value.Length;
if (_min.HasValue && _max.HasValue)
if (stringLength < _min.Value || stringLength > _max.Value)
return new NodeFieldValidationResult(ValidationResult.HasErrors,
Localizer.GetLocalizedString("StringLengthRangeError", Culture, _min, _max));
if (stringLength < _min)
return new NodeFieldValidationResult(ValidationResult.HasErrors,
Localizer.GetLocalizedString("StringLengthMinError", Culture, _min));
if (stringLength > _max)
return new NodeFieldValidationResult(ValidationResult.HasErrors,
Localizer.GetLocalizedString("StringLengthMaxError", Culture, _max));
return SuccessResult;
}
}