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

org.scalajs.sbttestadapter.FingerprintSerializers.scala Maven / Gradle / Ivy

The newest version!
/*                     __                                               *\
**     ________ ___   / /  ___      __ ____  Scala.js sbt plugin        **
**    / __/ __// _ | / /  / _ | __ / // __/  (c) 2013, LAMP/EPFL        **
**  __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \    http://scala-js.org/       **
** /____/\___/_/ |_/____/_/ | |__/ /____/                               **
**                          |/____/                                     **
\*                                                                      */


package org.scalajs.testadapter

import sbt.testing._

import org.scalajs.core.tools.json._

private[testadapter] object FingerprintSerializers {

  implicit object FingerprintSerializer extends JSONSerializer[Fingerprint] {
    def serialize(fp: Fingerprint): JSON = {
      val bld = new JSONObjBuilder()
      fp match {
        case fp: AnnotatedFingerprint => bld
          .fld("fpType", "AnnotatedFingerprint")
          .fld("isModule", fp.isModule)
          .fld("annotationName", fp.annotationName)
        case fp: SubclassFingerprint => bld
          .fld("fpType", "SubclassFingerprint")
          .fld("isModule", fp.isModule)
          .fld("superclassName", fp.superclassName)
          .fld("requireNoArgConstructor", fp.requireNoArgConstructor)
        case _ =>
          throw new IllegalArgumentException(
              s"Unknown Fingerprint type: ${fp.getClass}")
      }
      bld.toJSON
    }
  }

  implicit object FingerprintDeserializer extends JSONDeserializer[Fingerprint] {
    def deserialize(x: JSON): Fingerprint = {
      val obj = new JSONObjExtractor(x)
      obj.fld[String]("fpType") match {
        case "AnnotatedFingerprint" =>
          new DeserializedAnnotatedFingerprint(
              obj.fld[Boolean]("isModule"),
              obj.fld[String]("annotationName"))
        case "SubclassFingerprint" =>
          new DeserializedSubclassFingerprint(
              obj.fld[Boolean]("isModule"),
              obj.fld[String]("superclassName"),
              obj.fld[Boolean]("requireNoArgConstructor"))
        case tpe =>
          throw new IllegalArgumentException(s"Unknown Fingerprint type: $tpe")
      }
    }
  }

  final class DeserializedAnnotatedFingerprint(
      val isModule: Boolean,
      val annotationName: String
  ) extends AnnotatedFingerprint

  final class DeserializedSubclassFingerprint(
      val isModule: Boolean,
      val superclassName: String,
      val requireNoArgConstructor: Boolean
  ) extends SubclassFingerprint

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy