func()

in tools/mc2bq/pkg/schema/schema.go [70:100]


func (s *ExporterSchema) UnmarshalJSON(buf []byte) error {
	// We implement the Unmarshaller interface because bigquery.Schema doesn't
	// simply unmarshal but it is loaded by using SchemaFromJSON()

	myType := reflect.TypeOf(s).Elem()
	myValue := reflect.ValueOf(s).Elem()
	raw := map[string]json.RawMessage{}
	err := json.Unmarshal(buf, &raw)
	if err != nil {
		return err
	}
	for i := 0; i < myType.NumField(); i++ {
		key := myType.Field(i).Tag.Get("json")
		rawSchema, ok := raw[key]
		if !ok {
			// schema older than this entity
			continue
		}
		loadedSchema, err := bigquery.SchemaFromJSON(rawSchema)
		if err != nil {
			return fmt.Errorf("unmarshal %s: %w", key, err)
		}
		myValue.Field(i).Set(reflect.ValueOf(loadedSchema))
	}

	if len(s.AssetTable) == 0 {
		return messages.NewError(messages.ErrorInvalidSchema)
	}

	return nil
}