app/models/Methodology.scala (28 lines of code) (raw):

package models import io.circe.generic.extras.Configuration import io.circe.generic.extras.auto._ import io.circe.{Decoder, Encoder} sealed trait Methodology { val testName: Option[String] } case class ABTest( name: String = "ABTest", testName: Option[String] = None ) extends Methodology case class EpsilonGreedyBandit( name: String = "EpsilonGreedyBandit", epsilon: Double, testName: Option[String] = None, sampleCount: Option[Int] = None ) extends Methodology case class Roulette( name: String = "Roulette", testName: Option[String] = None, sampleCount: Option[Int] = None ) extends Methodology case object Methodology { val defaultMethodologies = List(ABTest()) implicit val customConfig: Configuration = Configuration.default.withDiscriminator("name") implicit val secondaryCtaDecoder = Decoder[Methodology] implicit val secondaryCtaEncoder = Encoder[Methodology] }