37 lines
1.1 KiB
Nim
37 lines
1.1 KiB
Nim
|
import std/strformat
|
||
|
import pkg/questionable
|
||
|
import pkg/questionable/results
|
||
|
|
||
|
type
|
||
|
ValidationGroups* = range[2..65535]
|
||
|
MaxSlots* = int
|
||
|
ValidationConfig* = object
|
||
|
maxSlots: MaxSlots
|
||
|
groups: ?ValidationGroups
|
||
|
groupIndex: uint16
|
||
|
|
||
|
func init*(
|
||
|
_: type ValidationConfig,
|
||
|
maxSlots: MaxSlots,
|
||
|
groups: ?ValidationGroups,
|
||
|
groupIndex: uint16 = 0): ?!ValidationConfig =
|
||
|
if maxSlots < 0:
|
||
|
return failure "The value of maxSlots must be greater than " &
|
||
|
fmt"or equal to 0! (got: {maxSlots})"
|
||
|
if validationGroups =? groups and groupIndex >= uint16(validationGroups):
|
||
|
return failure "The value of the group index must be less than " &
|
||
|
fmt"validation groups! (got: {groupIndex = }, " &
|
||
|
fmt"groups = {validationGroups})"
|
||
|
|
||
|
success ValidationConfig(
|
||
|
maxSlots: maxSlots, groups: groups, groupIndex: groupIndex)
|
||
|
|
||
|
func maxSlots*(config: ValidationConfig): MaxSlots =
|
||
|
config.maxSlots
|
||
|
|
||
|
func groups*(config: ValidationConfig): ?ValidationGroups =
|
||
|
config.groups
|
||
|
|
||
|
func groupIndex*(config: ValidationConfig): uint16 =
|
||
|
config.groupIndex
|