gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }