1 /*
2 * Hunt - A data validation for DLang based on hunt library.
3 *
4 * Copyright (C) 2015-2019, HuntLabs
5 *
6 * Website: https://www.huntlabs.net
7 *
8 * Licensed under the Apache-2.0 License.
9 *
10 */
11 module hunt.validation.validators.SizeValidator;
12
13 import hunt.validation.constraints.Size;
14 import hunt.validation.ConstraintValidator;
15 import hunt.validation.ConstraintValidatorContext;
16 import std.exception;
17 import hunt.validation.Validator;
18
19 import hunt.logging;
20 import std.string;
21
22 public class SizeValidator(T) : AbstractValidator , ConstraintValidator!(Size, T) {
23
24 private Size _size;
25
26 override void initialize(Size constraintAnnotation){
27 _size = constraintAnnotation;
28 }
29
30 override
31 public bool isValid(T data, ConstraintValidatorContext constraintValidatorContext) {
32 scope(exit) constraintValidatorContext.append(this);
33
34 static if(isArray!(T) || isAssociativeArray!(T))
35 {
36 if( data.length < _size.min || data.length > _size.max)
37 {
38 _isValid = false;
39 }
40 else
41 {
42 _isValid = true;
43 }
44 return _isValid;
45 }
46 else
47 {
48 throw new Exception("not support type : ",T.stringof);
49 _isValid = false;
50 return false;
51 }
52
53 }
54
55 override string getMessage()
56 {
57 import hunt.text.FormatterWrapper;
58 import hunt.util.Serialize;
59
60 return new FormatterWrapper("{{","}}").format(_size.message,toJSON(_size));
61 }
62 }