func()

in crlVerification/main.go [40:115]


func (i *Input) UnmarshalJSON(data []byte) error {
	intermediate := make(map[string]interface{})
	err := json.Unmarshal(data, &intermediate)
	if err != nil {
		i.errs = append(i.errs, err)
		return nil
	}
	if c, ok := intermediate["crl"]; ok {
		switch t := c.(type) {
		case []interface{}:
			for _, crlInterface := range t {
				switch crl := crlInterface.(type) {
				case string:
					i.Crls = append(i.Crls, crl)
				default:
					i.errs = append(i.errs, errors.New(fmt.Sprintf(`unexpected type for "crl", got %T from value "%v"`, crl, crl)))
				}
			}
		case string:
			// The old interface was built for
			// only one CRL, so let's honor that just in case
			i.Crls = append(i.Crls, t)
		case nil:
			// The old interface allowed for a null entry
			// so let's leave that in place by leaving the array empty.
		default:
			i.errs = append(i.errs, errors.New(fmt.Sprintf(`unexpected type for "crl", got %T from value "%v"`, t, t)))
		}
	}
	if s, ok := intermediate["serial"]; ok {
		switch t := s.(type) {
		case string:
			serial, err := utils.BigIntFromHexString(t)
			if err != nil {
				i.errs = append(i.errs, err)
			} else {
				i.Serial = serial
			}
		default:
			i.errs = append(i.errs, errors.New(fmt.Sprintf(`unexpected type for "serial", got %T from value "%v"`, t, t)))
		}
	} else {
		i.errs = append(i.errs, errors.New(`"serial" is a required field`))
	}
	if d, ok := intermediate["revocationDate"]; ok {
		switch t := d.(type) {
		case string:
			date, err := utils.TimeFromString(t)
			if err != nil {
				i.errs = append(i.errs, err)
			} else {
				i.Date = date
			}
		default:
			i.errs = append(i.errs, errors.New(fmt.Sprintf(`unexpected type for "revocationData", got %T from value "%v"`, t, t)))
		}
	} else {
		i.errs = append(i.errs, errors.New(`"revocationDate" is a required field`))
	}
	if r, ok := intermediate["revocationReason"]; ok {
		switch t := r.(type) {
		case string:
			reason, err := utils.FromString(&t)
			if err != nil {
				i.errs = append(i.errs, err)
			} else {
				i.Reason = reason
			}
		default:
			i.errs = append(i.errs, errors.New(fmt.Sprintf(`unexpected type for "revocationReason", got %T from value "%v"`, t, t)))
		}
	} else {
		i.Reason = utils.NOT_GIVEN
	}
	return nil
}