Swallow.Validation
7.0.0
dotnet add package Swallow.Validation --version 7.0.0
NuGet\Install-Package Swallow.Validation -Version 7.0.0
<PackageReference Include="Swallow.Validation" Version="7.0.0" />
paket add Swallow.Validation --version 7.0.0
#r "nuget: Swallow.Validation, 7.0.0"
// Install Swallow.Validation as a Cake Addin #addin nuget:?package=Swallow.Validation&version=7.0.0 // Install Swallow.Validation as a Cake Tool #tool nuget:?package=Swallow.Validation&version=7.0.0
Swallow.Validation
Package | Version | Comment |
---|---|---|
Swallow.Validation.Core | Core validation library. Use this if you want to define all assertions and errors yourself. | |
Swallow.Validation | "Batteries included" version with a handful of assertions and errors. | |
Swallow.Validation.ServiceCollection | Extension for registering a ValidationContainer and its asserters in an IServiceCollection |
Swallow.Validation
is a lightweight, fluent-style validation library for C#. But what does that mean? It means minimal dependencies (none, actually)
and great developer experience. If you've seen
Fluent Assertions, you might find some similarities.
Standout features
Swallow.Validation
does not require a separate class to contain the validation logic - you can just drop it right into your code without problems.
This allows you to enforce invariants rather than validate the state of entities; instead of constructing a person and checking whether it is correct,
you can make sure that no person created can ever be in an invalid state - without needing to remember
calling new PersonValidator().Validate(myPerson)
.
The library is also "natively extensible", meaning you can create custom validation rules that perfectly blend in together with the predefined validation rules and the fluent style. You can create rules matched for your problem domain and use your own ubiquitous language. With the fluent style of the library, you can formulate validation rules directly in your domain language.
Validator.Check()
.That(Country).IsValidIsoCode()
.That(DeliveryDate).IsAfter(DateTime.UtcNow)
.That(Items).IsNotNull().IsNotEmpty()
.ElseThrow()
Additionally, the validation errors are strongly typed. Instead of throwing around strings everywhere, you have meaningful errors containing properties to describe the problem in an exact manner. You also need not worry about wording your error messages when doing your validation. You can also easily test validation logic this way; instead of comparing strings, you can just check if the error is of the correct type. You can even localize the error messages if you'd like; that way, the validation errors can even be given directly to the user.
Licensing
Swallow.Validation
is licensed under the MIT license. That means you can do whatever you like with it, as long as you give credit by including the
library's license when distributing your software.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- Swallow.Validation.Core (>= 7.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Swallow.Validation:
Package | Downloads |
---|---|
Swallow.Validation.ServiceCollection
A lightweight, fluent-style validation library |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
7.0.0 | 2,079 | 1/20/2024 |
6.0.1 | 1,097 | 7/2/2023 |
6.0.0 | 2,123 | 1/22/2023 |
5.0.1 | 742 | 11/13/2022 |
4.2.0 | 868 | 6/20/2022 |
4.1.1 | 613 | 5/29/2022 |
4.1.0 | 798 | 2/13/2022 |
4.0.0 | 545 | 2/13/2022 |
3.1.0 | 22,355 | 6/5/2021 |
3.0.0 | 461 | 5/20/2021 |
2.0.0 | 483 | 3/6/2021 |
1.5.0 | 2,255 | 11/23/2020 |
1.4.0 | 442 | 9/4/2020 |
1.3.0 | 616 | 7/20/2020 |
1.2.0 | 1,403 | 6/4/2020 |
1.1.1 | 491 | 5/9/2020 |
1.1.0 | 468 | 5/5/2020 |
1.0.0 | 575 | 4/29/2020 |
0.12.3 | 510 | 4/5/2020 |
0.12.2 | 473 | 4/3/2020 |
0.12.1 | 11,273 | 3/16/2020 |
0.12.0 | 503 | 3/14/2020 |
0.11.2 | 580 | 2/29/2020 |
0.11.1 | 552 | 2/16/2020 |
0.11.0 | 530 | 2/13/2020 |
0.10.3 | 521 | 2/12/2020 |
0.10.2 | 575 | 1/31/2020 |
0.10.1 | 530 | 1/27/2020 |
0.10.0 | 535 | 1/5/2020 |
0.9.1 | 483 | 1/3/2020 |
0.8.0 | 481 | 12/21/2019 |
0.7.3 | 4,949 | 11/27/2019 |
0.7.2 | 488 | 11/9/2019 |
0.7.1 | 478 | 11/9/2019 |
0.7.0 | 502 | 11/9/2019 |
0.6.1 | 485 | 10/27/2019 |
0.5.3 | 489 | 10/23/2019 |
0.5.2 | 479 | 10/21/2019 |
0.5.1 | 477 | 10/20/2019 |
0.4.2 | 512 | 9/14/2019 |
0.4.1 | 506 | 9/7/2019 |
0.3.3 | 512 | 9/7/2019 |
0.3.2 | 557 | 8/28/2019 |
0.3.1 | 531 | 8/24/2019 |
0.2.4 | 502 | 8/24/2019 |
0.2.3 | 578 | 8/24/2019 |
See https://gitlab.com/phkiener/swallow.validation/-/blob/master/RELEASE_NOTES.md for release notes