func()

in resources/resources.go [36:75]


func (ks *KernelSpecs) UnmarshalJSON(b []byte) error {
	rawFields := make(map[string]any)
	if err := json.Unmarshal(b, &rawFields); err != nil {
		return err
	}
	if len(rawFields) == 0 {
		// The JSON object was empty; leave the structured object empty too.
		return nil
	}
	if defaultVal, ok := rawFields["default"]; ok {
		defaultString, ok := defaultVal.(string)
		if !ok {
			return fmt.Errorf("invalid value for the field 'default': %+v: %w", defaultVal, util.HTTPError(http.StatusBadRequest))
		}
		ks.Default = defaultString
	}
	specs, ok := rawFields["kernelspecs"]
	if !ok {
		ks.rawFields = rawFields
		return nil
	}
	ksMap, ok := specs.(map[string]any)
	if !ok {
		return fmt.Errorf("invalid value for the field 'kernelspecs': %+v: %w", specs, util.HTTPError(http.StatusBadRequest))
	}
	ks.KernelSpecs = make(map[string]*KernelSpec)
	for name, specObj := range ksMap {
		specBytes, err := json.Marshal(specObj)
		if err != nil {
			return fmt.Errorf("failure unmarshalling a nested `spec` field: %w", err)
		}
		var spec KernelSpec
		if err := json.Unmarshal(specBytes, &spec); err != nil {
			return fmt.Errorf("failure unmarshalling a nested `spec` field: %w", err)
		}
		ks.KernelSpecs[name] = &spec
	}
	ks.rawFields = rawFields
	return nil
}