code: func (c *schemaConverter) schema(messageName string) (schema bigquery.Schema, description string, err error) {
  	file, obj, _ := descutil.Resolve(c.desc, messageName)
  	if obj == nil {
  		return nil, "", fmt.Errorf("message %q is not found", messageName)
  	}
  	msg, isMsg := obj.(*descriptor.DescriptorProto)
  	if !isMsg {
  		return nil, "", fmt.Errorf("expected %q to be a message, but it is %T", messageName, obj)
  	}
  
  	schema = make(bigquery.Schema, 0, len(msg.Field))
  	for _, field := range msg.Field {
  		switch s, err := c.field(file, field); {
  		case err != nil:
  			return nil, "", errors.Annotate(err, "failed to derive schema for field %q in message %q", field.GetName(), msg.GetName()).Err()
  		case s != nil:
  			schema = append(schema, s)
  		}
  	}
  	return schema, c.description(file, msg), nil
  }
docs: // schema constructs a bigquery.Schema from a named message.