Home / Function/ setByForm() — gin Function Reference

setByForm() — gin Function Reference

Architecture documentation for the setByForm() function in form_mapping.go from the gin codebase.

Function go DataBinding Validators calls 6 called by 1

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

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