Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-validator

Typed fluent validation rules for Pudu

0.1.1Apache-2.01

InstallClose

Number.pudu

Pudu73 lines3.9 KB

GitHub ↗
1/** @Validation.Rules.Number.Module — checks integer property bounds */2module PuduLangValidator.Rules.Number34import PuduLangValidator.Rule as Rule56/// Require a value greater than the bound.7export fn greaterThan[T](builder: Rule.RuleBuilder[T, Int], bound: Int) -> Rule.RuleBuilder[T, Int] {8  Rule.withArgument(Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value > bound),9        "Number must be greater than \{ComparisonValue\}."), "GreaterThan"), "ComparisonValue", show(bound))10}1112/// Require a value at least as large as the bound.13export fn greaterThanOrEqualTo[T](builder: Rule.RuleBuilder[T, Int], bound: Int) -> Rule.RuleBuilder[T, Int] {14  Rule.withArgument(Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value >= bound),15        "Number must be at least \{ComparisonValue\}."), "GreaterThanOrEqualTo"), "ComparisonValue", show(bound))16}1718/// Require a value below the bound.19export fn lessThan[T](builder: Rule.RuleBuilder[T, Int], bound: Int) -> Rule.RuleBuilder[T, Int] {20  Rule.withArgument(Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value < bound),21        "Number must be less than \{ComparisonValue\}."), "LessThan"), "ComparisonValue", show(bound))22}2324/// Require a value no larger than the bound.25export fn lessThanOrEqualTo[T](builder: Rule.RuleBuilder[T, Int], bound: Int) -> Rule.RuleBuilder[T, Int] {26  Rule.withArgument(Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value <= bound),27        "Number must be at most \{ComparisonValue\}."), "LessThanOrEqualTo"), "ComparisonValue", show(bound))28}2930/// Require a value within inclusive bounds.31export fn inclusiveBetween[T](builder: Rule.RuleBuilder[T, Int], low: Int, high: Int) -> Rule.RuleBuilder[T, Int] {32  let checked = Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value >= low && value <= high),33      "Number must be from \{From\} through \{To\}."), "InclusiveBetween")34  Rule.withArgument(Rule.withArgument(checked, "From", show(low)), "To", show(high))35}3637/// Require a value strictly inside the bounds.38export fn exclusiveBetween[T](builder: Rule.RuleBuilder[T, Int], low: Int, high: Int) -> Rule.RuleBuilder[T, Int] {39  let checked = Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value > low && value < high),40      "Number must be between \{From\} and \{To\}, excluding both."), "ExclusiveBetween")41  Rule.withArgument(Rule.withArgument(checked, "From", show(low)), "To", show(high))42}4344/// Require a value equal to the expected integer.45export fn equal[T](builder: Rule.RuleBuilder[T, Int], expected: Int) -> Rule.RuleBuilder[T, Int] {46  Rule.withArgument(Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value == expected),47        "Number must equal \{ComparisonValue\}."), "Equal"), "ComparisonValue", show(expected))48}4950/// Require a value different from the excluded integer.51export fn notEqual[T](builder: Rule.RuleBuilder[T, Int], excluded: Int) -> Rule.RuleBuilder[T, Int] {52  Rule.withArgument(Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value != excluded),53        "Number must differ from \{ComparisonValue\}."), "NotEqual"), "ComparisonValue", show(excluded))54}5556/// Reject the integer default value of zero.57export fn notEmpty[T](builder: Rule.RuleBuilder[T, Int]) -> Rule.RuleBuilder[T, Int] {58  Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value != 0),59      "Number must be nonzero."), "NotEmpty")60}6162/// Require the integer default value of zero.63export fn empty[T](builder: Rule.RuleBuilder[T, Int]) -> Rule.RuleBuilder[T, Int] {64  Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| value == 0),65      "Number must be zero."), "Empty")66}6768/// Require membership among explicit numeric enum discriminants.69export fn isInEnum[T](builder: Rule.RuleBuilder[T, Int], valid: Array[Int]) -> Rule.RuleBuilder[T, Int] {70  Rule.withCode(Rule.withMessage(Rule.must(builder, |value: Int| valid.contains(value)),71      "Number is outside the named cases."), "IsInEnum")72}73