public record GeoParquetSchema()

in baremaps-geoparquet/src/main/java/org/apache/baremaps/geoparquet/GeoParquetSchema.java [28:160]


public record GeoParquetSchema(String name, List<Field> fields) {

  /**
   * The type of a GeoParquet field.
   */
  public enum Type {
    BINARY,
    BOOLEAN,
    DOUBLE,
    FLOAT,
    INTEGER,
    INT96,
    LONG,
    STRING,
    GEOMETRY,
    ENVELOPE,
    GROUP
  }

  /**
   * The cardinality of a GeoParquet field.
   */
  public enum Cardinality {
    REQUIRED,
    OPTIONAL,
    REPEATED
  }

  /**
   * A sealed inteface for the fields of a GeoParquet schema.
   * <p>
   * Sealed interfaces were introduced in Java 17 and can be used with pattern matching since Java
   * 21.
   */
  public sealed
  interface Field {
    String name();

    Type type();

    Cardinality cardinality();
  }

  record BinaryField(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.BINARY;
      }
  }

  record BooleanField(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.BOOLEAN;
      }
  }

  record DoubleField(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.DOUBLE;
      }
  }

  record FloatField(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.FLOAT;
      }
  }

  record IntegerField(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.INTEGER;
      }
  }

  record Int96Field(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.INT96;
      }
  }

  record LongField(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.LONG;
      }
  }

  record StringField(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.STRING;
      }
  }

  record GeometryField(String name, Cardinality cardinality) implements Field {

    @Override
      public Type type() {
        return Type.GEOMETRY;
      }
  }

  record EnvelopeField(String name, Cardinality cardinality,
      GeoParquetSchema schema) implements Field {

    @Override
      public Type type() {
        return Type.ENVELOPE;
      }
  }

  public record GroupField(String name, Cardinality cardinality,
      GeoParquetSchema schema) implements Field {

    @Override
    public Type type() {
      return Type.GROUP;
    }
  }
}