Tiny guard library for fluent precondition assertion. Current it is implemented for use with .net standard / core. Maybe a support for TypeScript and Java may be added.
You can follow my assumptions on this topic on my blog post.
Feel free to fork !
Offers a fluent way for making preconditions in a guard style. The idea is to have preconditions always in the same syntax and have less code.
Preconditions
.For(DomainObjectId, nameof(DomainObjectId))
.NotNull();
Preconditions
.For(()=> DomainObjectId)
.NotNull();
Multiple checks
Preconditions
.For(DomainObjectId, nameof(DomainObjectId))
.NotNull()
.MinLength(3);
In .net you can annotate your dtos with attributes from System.ComponentModel.DataAnnotations
These classes can look like this:
public class MyValueObject
{
[Required]
[MinLength(2)]
public string Text { get; set; }
[Range(1,20)]
public int Value { get; set; }
}
FluentGuard offers the ability to validate that all defined conditions are met
Preconditions
.For(()=>myDto)
.ValidateModel();
You can also pass a custom message which will be used for the exceprion message.
Preconditions
.For(DomainObjectId, nameof(DomainObjectId))
.NotNull(message:"DomainObject has to be not null");
When you want to add a new validation rule without extending this repository you can just create ExtensionMethods for the given Validation rule. See for example the StringValidationExtensions
public static ValidationRule<string> MinLength(this ValidationRule<string> rule, int length)
{
if (string.IsNullOrWhiteSpace(rule.Value) || rule.Value.Length < length)
{
throw new ArgumentOutOfRangeException(rule.Name, rule.Value.Length, $"The value should be at least {length} characters long!");
}
return rule;
}
- Implement TypeScript
#Nuget Package https://www.nuget.org/packages/FluentGuard