func newMetafieldAccessor()

in pkg/cloud/api/metafields.go [29:44]


func newMetafieldAccessor(v reflect.Value) (*metafieldAccessor, error) {
	if v.Type().Kind() != reflect.Struct {
		return nil, fmt.Errorf("invalid type: %s", v.Type())
	}
	ret := &metafieldAccessor{}
	if t, ok := v.Type().FieldByName(nullFieldsName); ok && t.Type.Kind() == reflect.Slice && t.Type.Elem().Kind() == reflect.String {
		ret.nullFields = v.FieldByName(nullFieldsName)
	}
	if t, ok := v.Type().FieldByName(forceSendFieldsName); ok && t.Type.Kind() == reflect.Slice && t.Type.Elem().Kind() == reflect.String {
		ret.forceSendFields = v.FieldByName(forceSendFieldsName)
	}
	if !ret.nullFields.IsValid() || !ret.forceSendFields.IsValid() {
		return nil, fmt.Errorf("struct does not have NullField or ForceSendFields")
	}
	return ret, nil
}