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
}