generated from sapphiredev/sapphire-template
/
BooleanValidator.ts
29 lines (24 loc) · 1.14 KB
/
BooleanValidator.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import type { IConstraint } from '../constraints/base/IConstraint';
import { booleanFalse, booleanTrue } from '../constraints/BooleanConstraints';
import { ValidationError } from '../lib/errors/ValidationError';
import { Result } from '../lib/Result';
import { BaseValidator } from './imports';
export class BooleanValidator<T extends boolean = boolean> extends BaseValidator<T> {
public get true(): BooleanValidator<true> {
return this.addConstraint(booleanTrue as IConstraint<T>) as BooleanValidator<true>;
}
public get false(): BooleanValidator<false> {
return this.addConstraint(booleanFalse as IConstraint<T>) as BooleanValidator<false>;
}
public equal<R extends true | false>(value: R): BooleanValidator<R> {
return (value ? this.true : this.false) as BooleanValidator<R>;
}
public notEqual<R extends true | false>(value: R): BooleanValidator<R> {
return (value ? this.false : this.true) as BooleanValidator<R>;
}
protected handle(value: unknown): Result<T, ValidationError> {
return typeof value === 'boolean' //
? Result.ok(value as T)
: Result.err(new ValidationError('s.boolean', 'Expected a boolean primitive', value));
}
}