code: private List<TableFieldSchema> getSchema(Class<?> type) {
      List<TableFieldSchema> toRet = new ArrayList<>();
      Set<Field> fieldsToMap = getFieldsToSerialize(type);
      for (Field field : fieldsToMap) {
        BigqueryFieldMarshaller marshaller = findMarshaller(field, marshallers);
        if (marshaller != null) {
          toRet.add(getFieldSchema(field, marshaller.getSchemaType()));
        } else if (isCollectionOrArray(field.getType())) {
          toRet.add(getSchemaOfRepeatedFields(field));
        } else {
          toRet.add(getFieldSchema(field, field.getType()));
        }
      }
      return toRet;
    }
docs: Returns a list of bigquery {@link TableFieldSchema} corresponding to each {@link Field} in the
  class. It uses annotations ({@link BigQueryIgnore} and {@link BigQueryDataField}) and
  reflection to infer information needed to define the fields in the way bigquery expects.