Files
mixtape/zero.Core/Validation/ZeroValidator.cs
T
2020-09-09 11:02:22 +02:00

32 lines
1.0 KiB
C#

using System;
using FluentValidation;
using FluentValidation.Results;
using System.Threading;
using System.Threading.Tasks;
using zero.Core.Api;
using Raven.Client.Documents;
namespace zero.Core.Validation
{
public abstract class ZeroValidator<TInterface, TImplementation> : AbstractValidator<TImplementation>, IValidator<TInterface> where TImplementation : TInterface
{
public ValidationResult Validate(TInterface instance)
{
if (!(instance is TImplementation))
{
throw new ArgumentException($"Parameter {nameof(instance)} has to be of type {typeof(TImplementation)}.");
}
return base.Validate((TImplementation)instance);
}
public Task<ValidationResult> ValidateAsync(TInterface instance, CancellationToken cancellation = default)
{
if (!(instance is TImplementation))
{
throw new ArgumentException($"Parameter {nameof(instance)} has to be of type {typeof(TImplementation)}.");
}
return base.ValidateAsync((TImplementation)instance, cancellation);
}
}
}