Skip to content

Commit

Permalink
Fix input values encoding (#253)
Browse files Browse the repository at this point in the history
  • Loading branch information
ghostdogpr authored Mar 1, 2020
1 parent a916ad6 commit c45e05b
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 11 deletions.
6 changes: 5 additions & 1 deletion client/src/main/scala/caliban/client/Value.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ object Value {
case class NumberValue(value: BigDecimal) extends Value {
override def toString: String = s"$value"
}
case class EnumValue(value: String) extends Value {
override def toString: String = value
}
case class StringValue(value: String) extends Value {
override def toString: String = s""""${value.replace("\"", "\\\"")}""""
}
Expand All @@ -25,7 +28,7 @@ object Value {
}
case class ObjectValue(fields: List[(String, Value)]) extends Value {
override def toString: String =
fields.map { case (name, value) => s""""$name":${value.toString}""" }.mkString("{", ",", "}")
fields.map { case (name, value) => s"""$name:${value.toString}""" }.mkString("{", ",", "}")
}

private def jsonToValue(json: Json): Value =
Expand All @@ -42,6 +45,7 @@ object Value {
case NullValue => Json.Null
case NumberValue(value) => Json.fromBigDecimal(value)
case StringValue(value) => Json.fromString(value)
case EnumValue(value) => Json.fromString(value)
case BooleanValue(value) => Json.fromBoolean(value)
case ListValue(values) => Json.fromValues(values.map(valueToJson))
case ObjectValue(fields) => Json.obj(fields.map { case (k, v) => k -> valueToJson(v) }: _*)
Expand Down
2 changes: 1 addition & 1 deletion codegen/src/main/scala/caliban/codegen/ClientWriter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ object ClientWriter {
implicit val encoder: ArgEncoder[${typedef.name}] = new ArgEncoder[${typedef.name}] {
override def encode(value: ${typedef.name}): Value = value match {
${typedef.enumValuesDefinition
.map(v => s"""case ${typedef.name}.${safeName(v.enumValue)} => StringValue("${v.enumValue}")""")
.map(v => s"""case ${typedef.name}.${safeName(v.enumValue)} => EnumValue("${v.enumValue}")""")
.mkString("\n")}
}
override def typeName: String = "${typedef.name}"
Expand Down
6 changes: 3 additions & 3 deletions codegen/src/test/scala/caliban/codegen/ClientWriterSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,9 @@ object Client {
}
implicit val encoder: ArgEncoder[Origin] = new ArgEncoder[Origin] {
override def encode(value: Origin): Value = value match {
case Origin.EARTH => StringValue("EARTH")
case Origin.MARS => StringValue("MARS")
case Origin.BELT => StringValue("BELT")
case Origin.EARTH => EnumValue("EARTH")
case Origin.MARS => EnumValue("MARS")
case Origin.BELT => EnumValue("BELT")
}
override def typeName: String = "Origin"
}
Expand Down
5 changes: 2 additions & 3 deletions core/src/main/scala/caliban/schema/ArgBuilder.scala
Original file line number Diff line number Diff line change
Expand Up @@ -134,9 +134,8 @@ object ArgBuilder {

def dispatch[T](ctx: SealedTrait[ArgBuilder, T]): ArgBuilder[T] = input => {
(input match {
case StringValue(value) => Some(value)
case EnumValue(value) => Some(value)
case _ => None
case EnumValue(value) => Some(value)
case _ => None
}) match {
case Some(value) =>
ctx.subtypes
Expand Down
6 changes: 3 additions & 3 deletions examples/src/main/scala/caliban/client/Client.scala
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ object Client {
}
implicit val encoder: ArgEncoder[Origin] = new ArgEncoder[Origin] {
override def encode(value: Origin): Value = value match {
case BELT => StringValue("BELT")
case EARTH => StringValue("EARTH")
case MARS => StringValue("MARS")
case BELT => EnumValue("BELT")
case EARTH => EnumValue("EARTH")
case MARS => EnumValue("MARS")
}
override def typeName: String = "Origin"
}
Expand Down

0 comments on commit c45e05b

Please sign in to comment.