Skip to content

Commit 1930907

Browse files
committed
Clean up of examples
1 parent 1d5309b commit 1930907

File tree

6 files changed

+135
-153
lines changed

6 files changed

+135
-153
lines changed

jsoniter-scala-examples/build.sbt

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ val `jsoniter-scala-examples` = project.in(file("."))
33
scalaVersion := "2.12.8",
44
scalacOptions ++= Seq("-Xmacro-settings:print-codecs"),
55
crossScalaVersions := Seq("2.13.0", "2.12.8", "2.11.12"),
6+
mainClass in assembly := Some("com.github.plokhotnyuk.jsoniter_scala.examples.Example01"),
67
libraryDependencies ++= Seq(
78
"com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-core" % "latest.integration",
89
"com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "latest.integration" % Provided // required only in compile-time

jsoniter-scala-examples/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/examples/EncodedExample.scala

-83
This file was deleted.

jsoniter-scala-examples/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/examples/EnumExample.scala

-65
This file was deleted.

jsoniter-scala-examples/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/examples/Examples.scala jsoniter-scala-examples/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/examples/Example01.scala

+8-5
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@ package com.github.plokhotnyuk.jsoniter_scala.examples
33
import com.github.plokhotnyuk.jsoniter_scala.macros._
44
import com.github.plokhotnyuk.jsoniter_scala.core._
55

6-
case class Device(id: Int, model: String)
6+
/**
7+
* Example of basic usage from README.md
8+
*/
9+
object Example01 {
10+
case class Device(id: Int, model: String)
711

8-
case class User(name: String, devices: Seq[Device])
12+
case class User(name: String, devices: Seq[Device])
913

10-
object Examples {
11-
def main(args: Array[String]): Unit = {
12-
implicit val codec: JsonValueCodec[User] = JsonCodecMaker.make[User](CodecMakerConfig())
14+
implicit val codec: JsonValueCodec[User] = JsonCodecMaker.make(CodecMakerConfig())
1315

16+
def main(args: Array[String]): Unit = {
1417
val user = readFromArray("""{"name":"John","devices":[{"id":1,"model":"HTC One X"}]}""".getBytes("UTF-8"))
1518
val json = writeToArray(User(name = "John", devices = Seq(Device(id = 2, model = "iPhone X"))))
1619

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.github.plokhotnyuk.jsoniter_scala.examples
2+
3+
import com.github.plokhotnyuk.jsoniter_scala.core._
4+
import com.github.plokhotnyuk.jsoniter_scala.macros._
5+
6+
/**
7+
* Example showing how to handle enums or any data that has different representation in json than in your model
8+
*/
9+
object Example02 {
10+
sealed abstract class HttpProtocol private(val value: Int)
11+
12+
case object HttpProtocol {
13+
val values: Seq[HttpProtocol] = Seq(Http, Https)
14+
15+
case object Http extends HttpProtocol(0)
16+
17+
case object Https extends HttpProtocol(1)
18+
}
19+
20+
case class Request(url: String, protocol: HttpProtocol)
21+
22+
implicit val protocolCodec: JsonValueCodec[HttpProtocol] = new JsonValueCodec[HttpProtocol] {
23+
override def decodeValue(in: JsonReader, default: HttpProtocol): HttpProtocol = {
24+
val i = in.readInt()
25+
HttpProtocol.values.find(_.value == i).getOrElse(in.decodeError("illegal protocol"))
26+
}
27+
28+
override def encodeValue(x: HttpProtocol, out: JsonWriter): Unit = out.writeVal(x.value)
29+
30+
override val nullValue: HttpProtocol = null
31+
}
32+
33+
implicit val requestCodec: JsonValueCodec[Request] = JsonCodecMaker.make(CodecMakerConfig())
34+
35+
def main(args: Array[String]): Unit = {
36+
val jsonHttp =
37+
"""{
38+
| "url": "http://google.com",
39+
| "protocol": 0
40+
|}
41+
|""".stripMargin.getBytes("UTF-8")
42+
val http = readFromArray[Request](jsonHttp)
43+
println(http)
44+
println(new String(writeToArray(http), "UTF-8"))
45+
println()
46+
val jsonHttps =
47+
"""{
48+
| "url": "http://google.com",
49+
| "protocol": 1
50+
|}
51+
|""".stripMargin.getBytes("UTF-8")
52+
val https = readFromArray[Request](jsonHttps)
53+
println(https)
54+
println(new String(writeToArray(https), "UTF-8"))
55+
}
56+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.github.plokhotnyuk.jsoniter_scala.examples
2+
3+
import com.github.plokhotnyuk.jsoniter_scala.core._
4+
import com.github.plokhotnyuk.jsoniter_scala.macros._
5+
6+
import scala.annotation.switch
7+
8+
/**
9+
* Example of decoding a field value that can be optionally encoded as JSON string
10+
*/
11+
object Example03 {
12+
case class RequestData(id: String, load: Int, important: Boolean)
13+
14+
case class Request(url: String, data: RequestData)
15+
16+
implicit val requestDataCodec: JsonValueCodec[RequestData] = new JsonValueCodec[RequestData] {
17+
val requestDataDirectCodec: JsonValueCodec[RequestData] = JsonCodecMaker.make(CodecMakerConfig())
18+
val requestDataEncodedCodec: JsonValueCodec[RequestData] = new JsonValueCodec[RequestData] {
19+
override def decodeValue(in: JsonReader, default: RequestData): RequestData = {
20+
val json = in.readString(null)
21+
readFromString(json)(requestDataDirectCodec)
22+
}
23+
24+
override def encodeValue(x: RequestData, out: JsonWriter): Unit = requestDataDirectCodec.encodeValue(x, out)
25+
26+
override val nullValue: RequestData = null
27+
}
28+
29+
override def decodeValue(in: JsonReader, default: RequestData): RequestData = (in.nextToken(): @switch) match {
30+
case '{' =>
31+
in.rollbackToken()
32+
requestDataDirectCodec.decodeValue(in, default)
33+
case '"' =>
34+
in.rollbackToken()
35+
requestDataEncodedCodec.decodeValue(in, default)
36+
case _ =>
37+
in.decodeError("""expected '{' or '"'""")
38+
}
39+
40+
override def encodeValue(x: RequestData, out: JsonWriter): Unit = requestDataDirectCodec.encodeValue(x, out)
41+
42+
override val nullValue: RequestData = null
43+
}
44+
45+
implicit val requestCodec: JsonValueCodec[Request] = JsonCodecMaker.make(CodecMakerConfig())
46+
47+
def main(args: Array[String]): Unit = {
48+
val normalJson =
49+
"""{
50+
| "url": "http://google.com",
51+
| "data": {
52+
| "id": "abcdefghijklmn",
53+
| "load": 10,
54+
| "important": true
55+
| }
56+
|}""".stripMargin.getBytes("UTF-8")
57+
val normal = readFromArray[Request](normalJson)
58+
println(normal)
59+
println(new String(writeToArray(normal), "UTF-8"))
60+
println()
61+
val escapedJson =
62+
"""{
63+
| "url": "http://google.com",
64+
| "data": "{\"id\":\"abcdefghijklmn\",\"load\":10,\"important\":true}"
65+
|}""".stripMargin.getBytes("UTF-8")
66+
val escaped = readFromArray[Request](escapedJson)
67+
println(escaped)
68+
println(new String(writeToArray(escaped), "UTF-8"))
69+
}
70+
}

0 commit comments

Comments
 (0)