{"id":17339605,"url":"https://github.com/fiseni/pozitron.validations","last_synced_at":"2025-07-05T20:13:37.014Z","repository":{"id":143351645,"uuid":"224441757","full_name":"fiseni/Pozitron.Validations","owner":"fiseni","description":"Nuget package for validating various inputs against invalid values. If validation fails appropriate exception is thrown.","archived":false,"fork":false,"pushed_at":"2021-02-15T17:08:00.000Z","size":91,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-04T11:19:23.328Z","etag":null,"topics":["inline-validation","invalid-argument","pozitrondev","validations"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fiseni.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-27T13:52:11.000Z","updated_at":"2024-08-30T08:31:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"c73c77c6-65ca-436e-a16f-31e73921270d","html_url":"https://github.com/fiseni/Pozitron.Validations","commit_stats":null,"previous_names":["fiseni/pozitrondev.validations"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/fiseni/Pozitron.Validations","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fiseni%2FPozitron.Validations","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fiseni%2FPozitron.Validations/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fiseni%2FPozitron.Validations/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fiseni%2FPozitron.Validations/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fiseni","download_url":"https://codeload.github.com/fiseni/Pozitron.Validations/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fiseni%2FPozitron.Validations/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259456603,"owners_count":22860581,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["inline-validation","invalid-argument","pozitrondev","validations"],"created_at":"2024-10-15T15:42:22.168Z","updated_at":"2025-06-12T11:38:59.197Z","avatar_url":"https://github.com/fiseni.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg align=\"left\" src=\"pozitronlogo.png\" width=\"120\" height=\"120\"\u003e\n\n\u0026nbsp; [![NuGet](https://img.shields.io/nuget/v/PozitronDev.Validations.svg)](https://www.nuget.org/packages/PozitronDev.Validations)[![NuGet](https://img.shields.io/nuget/dt/PozitronDev.Validations.svg)](https://www.nuget.org/packages/PozitronDev.Validations)\n\n\u0026nbsp; [![Build Status](https://dev.azure.com/pozitrondev/PozitronDev.Validations/_apis/build/status/fiseni.PozitronDev.Validations?branchName=master)](https://dev.azure.com/pozitrondev/PozitronDev.Validations/_build/latest?definitionId=4\u0026branchName=master)\n\n\u0026nbsp; [![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/pozitrondev/PozitronDev.Validations/4.svg)](https://dev.azure.com/pozitrondev/PozitronDev.Validations/_build/latest?definitionId=4\u0026branchName=master)\n\n# PozitronDev Validations\n\nNuget package for validating various inputs against invalid values. If validation fails appropriate exception is thrown.\n\n## Usage\n\nValidation rules are implemented as extension methods to `ValidateFor` (`IValidate\u003cT\u003e`) clause. Therefore, distinct validation methods are available based on the type of the object being extended.\n\nAll validation methods accept optional `parameterName` argument. If the argument is ommited, the name of the underlying type is used to construct the exception messages.\n\nInline usages are possible too, since all extensions return the input object. \n\n- Argument validation example\n\n```c#\n    public void CreateCart(Customer customer)\n    {\n        customer.ValidateFor().Null();\n\n        // create cart here\n    }\n```\n\n- Inline usage example:\n\n```c#\n    public async Task\u003cIEnumerable\u003cCompany\u003e\u003e GetCompanies()\n    {\n        return (await dbContext.Companies\n                                .Where(x =\u003e x.Name == \"MyCompany\")\n                                .OrderBy(x =\u003e x.Name)\n                                .ToListAsync())\n                                .ValidateFor().NullOrEmpty();\n    }\n```\n\n```c#\n    public Address GetCustomerAddress(Customer customer)\n    {\n        return customer.ValidateFor().Null().Address;\n    }\n```\n\n- Various validations based on the type:\n\n```c#\n    object myObject;\n    myObject.ValidateFor().Null();\n    myObject.ValidateFor().Null(nameof(myObject));\n\n    string myString;\n    myString.ValidateFor().NullOrEmpty();\n    myString.ValidateFor().NullOrWhiteSpace();\n    myString.ValidateFor().NullOrEmpty(nameof(myString));\n    myString.ValidateFor().NullOrWhiteSpace(nameof(myString));\n\n    int myInt;\n    myInt.ValidateFor().Default();\n    myInt.ValidateFor().Default(nameof(myInt));\n\n    IEnumerable\u003cT\u003e myList;\n    myList.ValidateFor().NullOrEmpty();\n    myList.ValidateFor().NullOrEmpty(nameof(myList));\n\n    Customer myCustomer = repo.GetByID(1);\n    myCustomer.ValidateFor().NotFound(1);\n    myCustomer.ValidateFor().NotFound(1, nameof(myCustomer));\n\n```\n\n\n\n\n## Supported Validation Rules\n\n- `T.IValidate\u003cT\u003e.Null\u003cT\u003e(string parameterName = null)`\n  - For T as class or nullable ValueType\n  - Throws if input is null\n\n- `T.IValidate\u003cT\u003e.NullOrEmpty\u003cT\u003e(string parameterName = null)`\n  - For T as string\n  - Throws if input is null or empty string\n\n- `T.IValidate\u003cT\u003e.NullOrWhiteSpace\u003cT\u003e(string parameterName = null)`\n  - For T as string\n  - Throws if input is null, empty string or whitespace only\n\n- `T.IValidate\u003cT\u003e.Default\u003cT\u003e(string parameterName = null)`\n  - Throws if input is default value for type T\n\n- `IEnumerable\u003cT\u003e.IValidate\u003cIEnumerable\u003cT\u003e\u003e.NullOrEmpty\u003cT\u003e(string parameterName = null)`\n  - Throws if input is null or empty collection\n\n- `T.IValidate\u003cT\u003e.NotFound\u003cT, TKey\u003e(TKey key, string parameterName = null)`\n  - For T as class, TKey as not nullable struct\n  - Throws if input (the queried object by key value) is null.\n  - Throws NotFoundException, custom exception defined in this package.\n\n## Extending with your own validation rules\n\nTo extend IValidate with your own rules, you can do the following:\n\n```c#\nnamespace PozitronDev.Validations\n{\n    public static class MyExtension\n    {\n        public static int MinQuantity(this IValidate\u003cint\u003e validateClause)\n        {\n            if (validateClause.Input \u003c 1)\n            {\n                throw new ArgumentException($\"Required quantity should not be less than 1.\");\n            }\n\n            return validateClause.Input;\n        }\n    }\n}\n```\n```c#\n// Usage\npublic void Buy(int quantity, decimal price)\n{\n    quantity.ValidateFor().MinQuantity();\n\n    var total = price * quantity;\n    \n    // Some processing\n}\n```\n```c#\n// Inline usage\npublic void Buy(int quantity, decimal price)\n{\n    var total = price * quantity.ValidateFor().MinQuantity();\n    \n    // Some processing\n}\n```\n\n## Give a Star! :star:\nIf you like or are using this project please give it a star. Thanks!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffiseni%2Fpozitron.validations","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffiseni%2Fpozitron.validations","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffiseni%2Fpozitron.validations/lists"}