summaryrefslogblamecommitdiff
path: root/scalaplugin/src/main/scala/mill/scalaplugin/Dep.scala
blob: 57c881c87f0887ae3ad97e6a72d2a7a00e9f679b (plain) (tree)

















































                                                                                                
package mill.scalaplugin

import play.api.libs.json._
import mill.util.JsonFormatters._
sealed trait Dep
object Dep{
  def apply(org: String, name: String, version: String): Dep = {
    this(coursier.Dependency(coursier.Module(org, name), version))
  }
  case class Java(dep: coursier.Dependency) extends Dep
  object Java{
    def apply(org: String, name: String, version: String): Dep = {
      Java(coursier.Dependency(coursier.Module(org, name), version))
    }
  }
  implicit def default(dep: coursier.Dependency): Dep = new Java(dep)
  def apply(dep: coursier.Dependency) = Scala(dep)
  case class Scala(dep: coursier.Dependency) extends Dep
  object Scala{
    def apply(org: String, name: String, version: String): Dep = {
      Scala(coursier.Dependency(coursier.Module(org, name), version))
    }
  }
  case class Point(dep: coursier.Dependency) extends Dep
  object Point{
    def apply(org: String, name: String, version: String): Dep = {
      Point(coursier.Dependency(coursier.Module(org, name), version))
    }
  }
  implicit def formatter: Format[Dep] = new Format[Dep]{
    def writes(o: Dep) = o match{
      case Java(dep) => Json.obj("Java" -> Json.toJson(dep))
      case Scala(dep) => Json.obj("Scala" -> Json.toJson(dep))
      case Point(dep) => Json.obj("PointScala" -> Json.toJson(dep))
    }

    def reads(json: JsValue) = json match{
      case obj: JsObject =>
        obj.fields match{
          case Seq(("Java", dep)) => Json.fromJson[coursier.Dependency](dep).map(Java(_))
          case Seq(("Scala", dep)) => Json.fromJson[coursier.Dependency](dep).map(Scala(_))
          case Seq(("PointScala", dep)) => Json.fromJson[coursier.Dependency](dep).map(Point(_))
          case _ => JsError("Invalid JSON object to parse ScalaDep")
        }


      case _ => JsError("Expected JSON object to parse ScalaDep")
    }
  }
}