{"id":16331065,"url":"https://github.com/siman/scala-validation","last_synced_at":"2025-10-25T22:30:19.864Z","repository":{"id":10873740,"uuid":"13161330","full_name":"siman/scala-validation","owner":"siman","description":"Simple validation framework for Scala","archived":false,"fork":false,"pushed_at":"2015-10-09T18:28:48.000Z","size":136,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-31T10:51:15.963Z","etag":null,"topics":["error-messages","errors","scala","scala-validation","utility-library","utils","validation"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/siman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-09-27T21:11:10.000Z","updated_at":"2023-02-07T08:06:50.000Z","dependencies_parsed_at":"2022-08-31T11:52:37.218Z","dependency_job_id":null,"html_url":"https://github.com/siman/scala-validation","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siman%2Fscala-validation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siman%2Fscala-validation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siman%2Fscala-validation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siman%2Fscala-validation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/siman","download_url":"https://codeload.github.com/siman/scala-validation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238216907,"owners_count":19435614,"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":["error-messages","errors","scala","scala-validation","utility-library","utils","validation"],"created_at":"2024-10-10T23:25:26.243Z","updated_at":"2025-10-25T22:30:19.571Z","avatar_url":"https://github.com/siman.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Scala Validation\n\nA small and simple validation framework for Scala.\n\n## Features\n\n* Validates a form of fields.\n* Each field can have as many as needed validators in a list.\n* Fail-fast per field: Once some of validators of a field failed, the process of form validation proceeds \n  with a validation for a next field in a list, and so on.\n* Some basic validators are already implemented (RequiredStringValidator, MinLengthValidator, \n  MaxLengthValidator, SimpleEmailValidator, etc).\n\n## Where I can use it?\n\nWhen dealing with UI forms like in web applications.  \n\n## Usage\n\n```scala\nobject Usage extends App {\n  \n  import com.plameno.validation._\n  \n  // A data model that we want to validate\n  case class Person(\n    login: String,\n    email: String,\n    age: Int\n  )\n\n  // Custom validator\n  case class MaturePersonValidator(p: Person) extends Validator() {\n    override val defaultError = \"You should be over 18 years old\"\n    def isValid = p.age \u003e 18\n  }\n\n  // A form that validates our data model Person\n  class PersonValidator(p: Person) extends FormValidator {\n    val validators = Map(\n      \"login\" -\u003e List(\n        RequiredStringValidator(p.login),\n        MinLengthValidator(p.login, 2),\n        // Below we use a custom error message:\n        MaxLengthValidator(p.login, 6, Some(\"Login is too long\"))),\n      \"email\" -\u003e List(\n        RequiredStringValidator(p.email), \n        SimpleEmailValidator(p.email)),\n      \"age\" -\u003e List(\n        PositiveIntValidator(p.age), \n        MaturePersonValidator(p)))\n  }\n\n  val person = Person(login = \"123456xx\", email = null, age = 17)\n\n  val personForm = new PersonValidator(person)\n\n  // Here the validation performs\n  val errors = personForm.validate\n\n  val prettyErrors = errors.map{ case (f, e) =\u003e s\"  $f: $e;\" }.mkString(\"\\n\")\n\n  println(s\"Validation errors:\\n$prettyErrors\")\n}\n```\n\nOutput:\n```\nValidation errors:\n  login: Login is too long;\n  email: Field is required;\n  age: You should be over 18 years old;\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiman%2Fscala-validation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsiman%2Fscala-validation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiman%2Fscala-validation/lists"}