All Downloads are FREE. Search and download functionalities are using the official Maven repository.

slog4s.generic.internal.Common.scala Maven / Gradle / Ivy

There is a newer version: 0.6.5
Show newest version
package slog4s.generic.internal

import magnolia.{CaseClass, SealedTrait}
import slog4s.{StructureBuilder, LogEncoder}

private[generic] object Common {
  def combine[T](
      caseClass: CaseClass[LogEncoder, T]
  ): LogEncoder[T] = {
    new LogEncoder[T] {
      override def encode[O](
          value: T
      )(implicit structureBuilder: StructureBuilder[O]): O = {
        val params = caseClass.parameters.map { param =>
          param.label -> param.typeclass.encode(param.dereference(value))
        }
        structureBuilder.structure(caseClass.typeName.short, params.toMap)
      }
    }
  }
  def dispatch[T](
      sealedTrait: SealedTrait[LogEncoder, T]
  ): LogEncoder[T] = {
    new LogEncoder[T] {
      override def encode[O](
          value: T
      )(implicit structureBuilder: StructureBuilder[O]): O = {
        sealedTrait.dispatch(value) { subtype =>
          subtype.typeclass.encode(subtype.cast(value))
        }
      }
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy