implicit def rfEnum[T]()

in beam/src/main/scala/magnolify/beam/RowType.scala [218:240]


  implicit def rfEnum[T](implicit et: EnumType[T], lp: shapeless.LowPriority): RowField[T] =
    new RowField[T] {
      type FromT = logicaltypes.EnumerationType.Value
      type ToT = logicaltypes.EnumerationType.Value

      @transient private lazy val enumTypeCache: concurrent.Map[ju.UUID, EnumType[T]] =
        concurrent.TrieMap.empty
      @transient private lazy val beamEnumTypeCache
        : concurrent.Map[ju.UUID, logicaltypes.EnumerationType] =
        concurrent.TrieMap.empty

      private def enumType(cm: CaseMapper): EnumType[T] =
        enumTypeCache.getOrElseUpdate(cm.uuid, et.map(cm))
      private def beamEnumType(cm: CaseMapper): logicaltypes.EnumerationType =
        beamEnumTypeCache.getOrElseUpdate(
          cm.uuid,
          logicaltypes.EnumerationType.create(enumType(cm).values.asJava)
        )
      override def fieldType(cm: CaseMapper): FieldType = FieldType.logicalType(beamEnumType(cm))
      override def to(v: T)(cm: CaseMapper): ToT = beamEnumType(cm).valueOf(enumType(cm).to(v))
      override def from(v: FromT)(cm: CaseMapper): T =
        enumType(cm).from(beamEnumType(cm).toString(v))
    }