private def parseEnum()

in tools/src/main/scala/magnolify/tools/AvroParser.scala [41:109]


  private def parseEnum(schema: avro.Schema): Primitive.Enum =
    Primitive.Enum(
      Some(schema.getName),
      Option(schema.getDoc),
      schema.getEnumSymbols.asScala.toList
    )

  private def parseSchema(schema: avro.Schema): Schema = schema.getType match {
    // Composite types
    case Type.RECORD =>
      parseRecord(schema)
    case Type.UNION =>
      val types = schema.getTypes.asScala
      if (types.size != 2 || !types.exists(_.getType == Type.NULL)) {
        throw new IllegalArgumentException(s"Unsupported union $schema")
      } else {
        val s = types.find(_.getType != Type.NULL).get
        Optional(parseSchema(s))
      }
    case Type.ARRAY =>
      Repeated(parseSchema(schema.getElementType))
    case Type.MAP =>
      Mapped(Primitive.String, parseSchema(schema.getValueType))

    // Logical types
    case Type.STRING if isLogical(schema, LogicalTypes.uuid().getName) =>
      Primitive.UUID
    case Type.BYTES if schema.getLogicalType.isInstanceOf[LogicalTypes.Decimal] =>
      Primitive.BigDecimal
    case Type.INT if schema.getLogicalType.isInstanceOf[LogicalTypes.Date] =>
      Primitive.LocalDate

    // Millis
    case Type.LONG if schema.getLogicalType.isInstanceOf[LogicalTypes.TimestampMillis] =>
      Primitive.Instant
    case Type.INT if schema.getLogicalType.isInstanceOf[LogicalTypes.TimeMillis] =>
      Primitive.LocalTime
    // `LogicalTypes.LocalTimestampMillis` is Avro 1.10.0+
    case Type.LONG if isLogical(schema, "local-timestamp-millis") =>
      Primitive.LocalDateTime

    // Micros
    case Type.LONG if schema.getLogicalType.isInstanceOf[LogicalTypes.TimestampMicros] =>
      Primitive.Instant
    case Type.LONG if schema.getLogicalType.isInstanceOf[LogicalTypes.TimeMicros] =>
      Primitive.LocalTime
    // `LogicalTypes.LocalTimestampMicros` is Avro 1.10.0+
    case Type.LONG if isLogical(schema, "local-timestamp-micros") =>
      Primitive.LocalDateTime

    // BigQuery sqlType: DATETIME
    case Type.STRING if isLogical(schema, "datetime") =>
      Primitive.LocalDateTime

    // Primitive types
    case Type.ENUM    => parseEnum(schema)
    case Type.FIXED   => Primitive.Bytes
    case Type.STRING  => Primitive.String
    case Type.BYTES   => Primitive.Bytes
    case Type.INT     => Primitive.Int
    case Type.LONG    => Primitive.Long
    case Type.FLOAT   => Primitive.Float
    case Type.DOUBLE  => Primitive.Double
    case Type.BOOLEAN => Primitive.Boolean
    case Type.NULL    => Primitive.Null

    case _ =>
      throw new IllegalArgumentException(s"Unsupported schema $schema")
  }