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

tasks.queue.Serializer.scala Maven / Gradle / Ivy

The newest version!
package tasks.queue

import tasks.spore

trait Serializer[A] {
  def apply(a: A): Array[Byte]
  def hash(a: A): String
}

trait Deserializer[A] {
  def apply(in: Array[Byte]): Either[String, A]
}

object Serializer {
  val nothing: Serializer[Nothing] = new Serializer[Nothing] {
    def apply(a: Nothing): Array[Byte] = Array.empty
    def hash(a: Nothing): String = "nothing"
  }
}
object Deserializer {
  val nothing = new Deserializer[Nothing] {
    def apply(in: Array[Byte]) = Left("deserializing into nothing?")
  }
}

case class SerDe[AA](
    ser: Spore[Unit, Serializer[AA]],
    deser: Spore[Unit, Deserializer[AA]]
)

object SerDe {
  import com.github.plokhotnyuk.jsoniter_scala.macros._
  import com.github.plokhotnyuk.jsoniter_scala.core._

  implicit def codec[A]: JsonValueCodec[SerDe[A]] = JsonCodecMaker.make

  implicit def makeFromComponents[A](implicit
      r: tasks.SDeserializer[A],
      w: tasks.SSerializer[A]
  ): SerDe[A] =
    SerDe(w, r)

  val ns: Spore[Unit, Serializer[Nothing]] =
    spore((_: Unit) => Serializer.nothing)

  // val nothing = SerDe[Nothing](
  //   ser = ns,
  //   deser = spore((_:Unit) => Deserializer.nothing)
  // )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy