Skip to content

Commit

Permalink
Finishing up threading CirceVersion
Browse files Browse the repository at this point in the history
  • Loading branch information
blast-hardcheese committed Feb 3, 2020
1 parent d09ad01 commit f67e029
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 14 deletions.
@@ -1,6 +1,7 @@
package com.twilio.guardrail
package generators

import com.twilio.guardrail.circe.CirceVersion
import com.twilio.guardrail.languages.ScalaLanguage
import cats.~>

Expand All @@ -11,7 +12,7 @@ import ScalaGenerator._
import AkkaHttpGenerator._

object AkkaHttp extends (CodegenApplication[ScalaLanguage, ?] ~> Target) {
val interpDefinitionPM: DefinitionPM[ScalaLanguage, ?] ~> Target = ProtocolSupportTermInterp or ModelProtocolTermInterp
val interpDefinitionPM: DefinitionPM[ScalaLanguage, ?] ~> Target = ProtocolSupportTermInterp or new ModelProtocolTermInterp(CirceVersion.V012)
val interpDefinitionPME: DefinitionPME[ScalaLanguage, ?] ~> Target = EnumProtocolTermInterp or interpDefinitionPM
val interpDefinitionPMEA: DefinitionPMEA[ScalaLanguage, ?] ~> Target = ArrayProtocolTermInterp or interpDefinitionPME
val interpDefinitionPMEAP: DefinitionPMEAP[ScalaLanguage, ?] ~> Target = PolyProtocolTermInterp or interpDefinitionPMEA
Expand All @@ -20,7 +21,7 @@ object AkkaHttp extends (CodegenApplication[ScalaLanguage, ?] ~> Target) {

val interpFrameworkC: FrameworkC[ScalaLanguage, ?] ~> Target = ClientTermInterp or interpModel
val interpFrameworkCS: FrameworkCS[ScalaLanguage, ?] ~> Target = ServerTermInterp or interpFrameworkC
val interpFrameworkCSF: FrameworkCSF[ScalaLanguage, ?] ~> Target = FrameworkInterp or interpFrameworkCS
val interpFrameworkCSF: FrameworkCSF[ScalaLanguage, ?] ~> Target = new FrameworkInterp(CirceVersion.V012) or interpFrameworkCS

val interpFramework: ClientServerTerms[ScalaLanguage, ?] ~> Target = interpFrameworkCSF

Expand Down
Expand Up @@ -9,7 +9,7 @@ import scala.meta._
import com.twilio.guardrail.languages.ScalaLanguage

object AkkaHttpGenerator {
class FrameworkInterp(circeVersion: CirceVersion = CirceVersion.V011) extends FunctionK[FrameworkTerm[ScalaLanguage, ?], Target] {
class FrameworkInterp(circeVersion: CirceVersion) extends FunctionK[FrameworkTerm[ScalaLanguage, ?], Target] {
def apply[T](term: FrameworkTerm[ScalaLanguage, T]): Target[T] = term match {
case FileType(format) => Target.pure(format.fold[Type](t"BodyPartEntity")(Type.Name(_)))
case ObjectType(format) => Target.pure(t"io.circe.Json")
Expand Down
@@ -1,6 +1,7 @@
package com.twilio.guardrail
package generators

import com.twilio.guardrail.circe.CirceVersion
import com.twilio.guardrail.languages.ScalaLanguage
import cats.~>

Expand All @@ -11,7 +12,7 @@ import ScalaGenerator._
import EndpointsGenerator._

object Endpoints extends (CodegenApplication[ScalaLanguage, ?] ~> Target) {
val interpDefinitionPM: DefinitionPM[ScalaLanguage, ?] ~> Target = ProtocolSupportTermInterp or ModelProtocolTermInterp
val interpDefinitionPM: DefinitionPM[ScalaLanguage, ?] ~> Target = ProtocolSupportTermInterp or new ModelProtocolTermInterp(CirceVersion.V012)
val interpDefinitionPME: DefinitionPME[ScalaLanguage, ?] ~> Target = EnumProtocolTermInterp or interpDefinitionPM
val interpDefinitionPMEA: DefinitionPMEA[ScalaLanguage, ?] ~> Target = ArrayProtocolTermInterp or interpDefinitionPME
val interpDefinitionPMEAP: DefinitionPMEAP[ScalaLanguage, ?] ~> Target = PolyProtocolTermInterp or interpDefinitionPMEA
Expand Down
@@ -1,6 +1,7 @@
package com.twilio.guardrail
package generators

import com.twilio.guardrail.circe.CirceVersion
import com.twilio.guardrail.languages.ScalaLanguage
import cats.~>

Expand All @@ -11,7 +12,7 @@ import CirceProtocolGenerator._
import ScalaGenerator._

object Http4s extends (CodegenApplication[ScalaLanguage, ?] ~> Target) {
val interpDefinitionPM: DefinitionPM[ScalaLanguage, ?] ~> Target = ProtocolSupportTermInterp or ModelProtocolTermInterp
val interpDefinitionPM: DefinitionPM[ScalaLanguage, ?] ~> Target = ProtocolSupportTermInterp or new ModelProtocolTermInterp(CirceVersion.V012)
val interpDefinitionPME: DefinitionPME[ScalaLanguage, ?] ~> Target = EnumProtocolTermInterp or interpDefinitionPM
val interpDefinitionPMEA: DefinitionPMEA[ScalaLanguage, ?] ~> Target = ArrayProtocolTermInterp or interpDefinitionPME
val interpDefinitionPMEAP: DefinitionPMEAP[ScalaLanguage, ?] ~> Target = PolyProtocolTermInterp or interpDefinitionPMEA
Expand Down
Expand Up @@ -42,14 +42,20 @@ object ScalaModule extends AbstractModule[ScalaLanguage] {
interpDefinitionPMEAP
}

def akkaHttp(interpModel: FunctionK[ModelInterpreters[ScalaLanguage, ?], Target]): FunctionK[ClientServerTerms[ScalaLanguage, ?], Target] = {
def akkaHttp(
circeVersion: CirceVersion,
interpModel: FunctionK[ModelInterpreters[ScalaLanguage, ?], Target]
): FunctionK[ClientServerTerms[ScalaLanguage, ?], Target] = {
val interpFrameworkC: FunctionK[FrameworkC[ScalaLanguage, ?], Target] = AkkaHttpClientGenerator.ClientTermInterp or interpModel
val interpFrameworkCS: FunctionK[FrameworkCS[ScalaLanguage, ?], Target] = AkkaHttpServerGenerator.ServerTermInterp or interpFrameworkC
val interpFrameworkCSF: FunctionK[FrameworkCSF[ScalaLanguage, ?], Target] = new AkkaHttpGenerator.FrameworkInterp or interpFrameworkCS
val interpFrameworkCSF: FunctionK[FrameworkCSF[ScalaLanguage, ?], Target] = new AkkaHttpGenerator.FrameworkInterp(circeVersion) or interpFrameworkCS
interpFrameworkCSF
}

def endpoints(interpModel: FunctionK[ModelInterpreters[ScalaLanguage, ?], Target]): FunctionK[ClientServerTerms[ScalaLanguage, ?], Target] = {
def endpoints(
circeVersion: CirceVersion,
interpModel: FunctionK[ModelInterpreters[ScalaLanguage, ?], Target]
): FunctionK[ClientServerTerms[ScalaLanguage, ?], Target] = {
val interpFrameworkC: FunctionK[FrameworkC[ScalaLanguage, ?], Target] = EndpointsClientGenerator.ClientTermInterp or interpModel
val interpFrameworkCS: FunctionK[FrameworkCS[ScalaLanguage, ?], Target] = EndpointsServerGenerator.ServerTermInterp or interpFrameworkC
val interpFrameworkCSF: FunctionK[FrameworkCSF[ScalaLanguage, ?], Target] = EndpointsGenerator.FrameworkInterp or interpFrameworkCS
Expand All @@ -65,17 +71,17 @@ object ScalaModule extends AbstractModule[ScalaLanguage] {

def extract(modules: NonEmptyList[String]): CoreTarget[FunctionK[CodegenApplication[ScalaLanguage, ?], Target]] =
(for {
protocolGenerator <- popModule(
(circeVersion, protocolGenerator) <- popModule(
"json",
("circe-java8", circeJava8(CirceVersion.V011)),
("circe-0.11", circe(CirceVersion.V011)),
("circe-0.12", circe(CirceVersion.V012))
("circe-java8", (CirceVersion.V011, circeJava8(CirceVersion.V011))),
("circe-0.11", (CirceVersion.V011, circe(CirceVersion.V011))),
("circe", (CirceVersion.V012, circe(CirceVersion.V012)))
)
interpFramework <- popModule(
"framework",
("akka-http", akkaHttp(protocolGenerator)),
("akka-http", akkaHttp(circeVersion, protocolGenerator)),
("http4s", http4s(protocolGenerator)),
("endpoints", endpoints(protocolGenerator))
("endpoints", endpoints(circeVersion, protocolGenerator))
)
parser = SwaggerGenerator[ScalaLanguage] or interpFramework
codegenApplication = ScalaGenerator.ScalaInterp or parser
Expand Down

0 comments on commit f67e029

Please sign in to comment.