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

com.supersonic.main.AppState.scala Maven / Gradle / Ivy

The newest version!
package com.supersonic.main

import com.supersonic.kafka_mirror.{ExternalKafkaMirrorSettings, MirrorID}
import com.typesafe.config.{Config, ConfigFactory, ConfigRenderOptions}
import fommil.sjs.FamilyFormats
import shapeless.Typeable
import spray.json._

case class AppState[AppSettings](appVersion: String,
                                 commitHash: String,
                                 settings: AppSettings,
                                 mirrors: Either[String, List[(MirrorID, ExternalKafkaMirrorSettings)]])

object AppState extends DefaultJsonProtocol with FamilyFormats {
  // boilerplate because of bugs in implicit resolution
  // see here: https://github.com/fommil/spray-json-shapeless/issues/22
  implicit def either[A: JsonFormat, B: JsonFormat] =
    DefaultJsonProtocol.eitherFormat[A, B]

  implicit val configFormat = new JsonFormat[Config] {
    def write(config: Config): JsValue = JsonParser(config.root.render(ConfigRenderOptions.concise))

    def read(json: JsValue): Config = ConfigFactory.parseString(json.toString)
  }

  def format[AppSettings: JsonFormat : Typeable]: RootJsonFormat[AppState[AppSettings]] =
    implicitly[RootJsonFormat[AppState[AppSettings]]]
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy