setByForm() — gin Function Reference
Architecture documentation for the setByForm() function in form_mapping.go from the gin codebase.
Entity Profile
Dependency Diagram
graph TD 12913085_e498_18b3_5bda_a23669e608df["setByForm()"] 28f27f7b_98e3_2633_4756_5d59d361ff59["TrySet()"] 28f27f7b_98e3_2633_4756_5d59d361ff59 -->|calls| 12913085_e498_18b3_5bda_a23669e608df 9a0c6acf_21a1_ed4a_350b_8832b3710523["trySetUsingParser()"] 12913085_e498_18b3_5bda_a23669e608df -->|calls| 9a0c6acf_21a1_ed4a_350b_8832b3710523 755f0ebb_80c7_2e63_6a74_f8404f6a04ec["trySetCustom()"] 12913085_e498_18b3_5bda_a23669e608df -->|calls| 755f0ebb_80c7_2e63_6a74_f8404f6a04ec 7c65b0b2_d5e8_8f89_a812_ae590c42c654["trySplit()"] 12913085_e498_18b3_5bda_a23669e608df -->|calls| 7c65b0b2_d5e8_8f89_a812_ae590c42c654 6b6874ca_bbc3_8edc_0208_bb68474ed06f["setSlice()"] 12913085_e498_18b3_5bda_a23669e608df -->|calls| 6b6874ca_bbc3_8edc_0208_bb68474ed06f b4cdd2d0_54e2_6218_cda2_fbabf067d202["setArray()"] 12913085_e498_18b3_5bda_a23669e608df -->|calls| b4cdd2d0_54e2_6218_cda2_fbabf067d202 6153aa3f_ed0b_2237_43a1_5d4f68982dd7["setWithProperType()"] 12913085_e498_18b3_5bda_a23669e608df -->|calls| 6153aa3f_ed0b_2237_43a1_5d4f68982dd7 style 12913085_e498_18b3_5bda_a23669e608df fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
binding/form_mapping.go lines 245–321
func setByForm(value reflect.Value, field reflect.StructField, form map[string][]string, tagValue string, opt setOptions) (isSet bool, err error) {
vs, ok := form[tagValue]
if !ok && !opt.isDefaultExists {
return false, nil
}
switch value.Kind() {
case reflect.Slice:
if len(vs) == 0 {
if !opt.isDefaultExists {
return false, nil
}
vs = []string{opt.defaultValue}
// pre-process the default value for multi if present
cfTag := field.Tag.Get("collection_format")
if cfTag == "" || cfTag == "multi" {
vs = strings.Split(opt.defaultValue, ",")
}
}
if ok, err = trySetUsingParser(vs[0], value, opt.parser); ok {
return ok, err
} else if ok, err = trySetCustom(vs[0], value); ok {
return ok, err
}
if vs, err = trySplit(vs, field); err != nil {
return false, err
}
return true, setSlice(vs, value, field, opt)
case reflect.Array:
if len(vs) == 0 {
if !opt.isDefaultExists {
return false, nil
}
vs = []string{opt.defaultValue}
// pre-process the default value for multi if present
cfTag := field.Tag.Get("collection_format")
if cfTag == "" || cfTag == "multi" {
vs = strings.Split(opt.defaultValue, ",")
}
}
if ok, err = trySetUsingParser(vs[0], value, opt.parser); ok {
return ok, err
} else if ok, err = trySetCustom(vs[0], value); ok {
return ok, err
}
if vs, err = trySplit(vs, field); err != nil {
return false, err
}
if len(vs) != value.Len() {
return false, fmt.Errorf("%q is not valid value for %s", vs, value.Type().String())
}
return true, setArray(vs, value, field, opt)
default:
var val string
if !ok || len(vs) == 0 || (len(vs) > 0 && vs[0] == "") {
val = opt.defaultValue
} else if len(vs) > 0 {
val = vs[0]
}
if ok, err = trySetUsingParser(val, value, opt.parser); ok {
return ok, err
} else if ok, err = trySetCustom(val, value); ok {
return ok, err
}
return true, setWithProperType(val, value, field, opt)
}
}
Domain
Subdomains
Called By
Source
Frequently Asked Questions
What does setByForm() do?
setByForm() is a function in the gin codebase.
What does setByForm() call?
setByForm() calls 6 function(s): setArray, setSlice, setWithProperType, trySetCustom, trySetUsingParser, trySplit.
What calls setByForm()?
setByForm() is called by 1 function(s): TrySet.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free