field_level.go (4924B)
1 package validator 2 3 import "reflect" 4 5 // FieldLevel contains all the information and helper functions 6 // to validate a field 7 type FieldLevel interface { 8 9 // Top returns the top level struct, if any 10 Top() reflect.Value 11 12 // Parent returns the current fields parent struct, if any or 13 // the comparison value if called 'VarWithValue' 14 Parent() reflect.Value 15 16 // Field returns current field for validation 17 Field() reflect.Value 18 19 // FieldName returns the field's name with the tag 20 // name taking precedence over the fields actual name. 21 FieldName() string 22 23 // StructFieldName returns the struct field's name 24 StructFieldName() string 25 26 // Param returns param for validation against current field 27 Param() string 28 29 // GetTag returns the current validations tag name 30 GetTag() string 31 32 // ExtractType gets the actual underlying type of field value. 33 // It will dive into pointers, customTypes and return you the 34 // underlying value and it's kind. 35 ExtractType(field reflect.Value) (value reflect.Value, kind reflect.Kind, nullable bool) 36 37 // GetStructFieldOK traverses the parent struct to retrieve a specific field denoted by the provided namespace 38 // in the param and returns the field, field kind and whether is was successful in retrieving 39 // the field at all. 40 // 41 // NOTE: when not successful ok will be false, this can happen when a nested struct is nil and so the field 42 // could not be retrieved because it didn't exist. 43 // 44 // Deprecated: Use GetStructFieldOK2() instead which also return if the value is nullable. 45 GetStructFieldOK() (reflect.Value, reflect.Kind, bool) 46 47 // GetStructFieldOKAdvanced is the same as GetStructFieldOK except that it accepts the parent struct to start looking for 48 // the field and namespace allowing more extensibility for validators. 49 // 50 // Deprecated: Use GetStructFieldOKAdvanced2() instead which also return if the value is nullable. 51 GetStructFieldOKAdvanced(val reflect.Value, namespace string) (reflect.Value, reflect.Kind, bool) 52 53 // GetStructFieldOK2 traverses the parent struct to retrieve a specific field denoted by the provided namespace 54 // in the param and returns the field, field kind, if it's a nullable type and whether is was successful in retrieving 55 // the field at all. 56 // 57 // NOTE: when not successful ok will be false, this can happen when a nested struct is nil and so the field 58 // could not be retrieved because it didn't exist. 59 GetStructFieldOK2() (reflect.Value, reflect.Kind, bool, bool) 60 61 // GetStructFieldOKAdvanced2 is the same as GetStructFieldOK except that it accepts the parent struct to start looking for 62 // the field and namespace allowing more extensibility for validators. 63 GetStructFieldOKAdvanced2(val reflect.Value, namespace string) (reflect.Value, reflect.Kind, bool, bool) 64 } 65 66 var _ FieldLevel = new(validate) 67 68 // Field returns current field for validation 69 func (v *validate) Field() reflect.Value { 70 return v.flField 71 } 72 73 // FieldName returns the field's name with the tag 74 // name taking precedence over the fields actual name. 75 func (v *validate) FieldName() string { 76 return v.cf.altName 77 } 78 79 // GetTag returns the current validations tag name 80 func (v *validate) GetTag() string { 81 return v.ct.tag 82 } 83 84 // StructFieldName returns the struct field's name 85 func (v *validate) StructFieldName() string { 86 return v.cf.name 87 } 88 89 // Param returns param for validation against current field 90 func (v *validate) Param() string { 91 return v.ct.param 92 } 93 94 // GetStructFieldOK returns Param returns param for validation against current field 95 // 96 // Deprecated: Use GetStructFieldOK2() instead which also return if the value is nullable. 97 func (v *validate) GetStructFieldOK() (reflect.Value, reflect.Kind, bool) { 98 current, kind, _, found := v.getStructFieldOKInternal(v.slflParent, v.ct.param) 99 return current, kind, found 100 } 101 102 // GetStructFieldOKAdvanced is the same as GetStructFieldOK except that it accepts the parent struct to start looking for 103 // the field and namespace allowing more extensibility for validators. 104 // 105 // Deprecated: Use GetStructFieldOKAdvanced2() instead which also return if the value is nullable. 106 func (v *validate) GetStructFieldOKAdvanced(val reflect.Value, namespace string) (reflect.Value, reflect.Kind, bool) { 107 current, kind, _, found := v.GetStructFieldOKAdvanced2(val, namespace) 108 return current, kind, found 109 } 110 111 // GetStructFieldOK2 returns Param returns param for validation against current field 112 func (v *validate) GetStructFieldOK2() (reflect.Value, reflect.Kind, bool, bool) { 113 return v.getStructFieldOKInternal(v.slflParent, v.ct.param) 114 } 115 116 // GetStructFieldOKAdvanced2 is the same as GetStructFieldOK except that it accepts the parent struct to start looking for 117 // the field and namespace allowing more extensibility for validators. 118 func (v *validate) GetStructFieldOKAdvanced2(val reflect.Value, namespace string) (reflect.Value, reflect.Kind, bool, bool) { 119 return v.getStructFieldOKInternal(val, namespace) 120 }