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))
}