Skip to content

Commit 60d5507

Browse files
committed
make it compile with Scala 3
1 parent b0d3578 commit 60d5507

File tree

2 files changed

+53
-44
lines changed

2 files changed

+53
-44
lines changed

anthropic-client/src/main/scala/io/cequence/openaiscala/anthropic/JsonFormats.scala

Lines changed: 50 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -64,43 +64,7 @@ trait JsonFormats {
6464
}
6565
}
6666

67-
implicit lazy val userMessageFormat: Format[UserMessage] = Json.format[UserMessage]
68-
implicit lazy val userMessageContentFormat: Format[UserMessageContent] =
69-
Json.format[UserMessageContent]
70-
implicit lazy val assistantMessageFormat: Format[AssistantMessage] =
71-
Json.format[AssistantMessage]
72-
implicit lazy val assistantMessageContentFormat: Format[AssistantMessageContent] =
73-
Json.format[AssistantMessageContent]
74-
75-
implicit lazy val textBlockFormat: Format[TextBlock] = Json.format[TextBlock]
76-
77-
implicit lazy val contentBlocksFormat: Format[ContentBlocks] = Json.format[ContentBlocks]
78-
79-
implicit lazy val textBlockReads: Reads[TextBlock] = {
80-
implicit val config: JsonConfiguration = JsonConfiguration(SnakeCase)
81-
Json.reads[TextBlock]
82-
}
83-
84-
implicit lazy val textBlockWrites: Writes[TextBlock] = {
85-
implicit val config: JsonConfiguration = JsonConfiguration(SnakeCase)
86-
Json.writes[TextBlock]
87-
}
88-
89-
implicit lazy val mediaBlockWrites: Writes[MediaBlock] =
90-
(block: MediaBlock) =>
91-
Json.obj(
92-
"type" -> block.`type`,
93-
"source" -> Json.obj(
94-
"type" -> block.encoding,
95-
"media_type" -> block.mediaType,
96-
"data" -> block.data
97-
)
98-
)
99-
100-
private def cacheControlToJsObject(maybeCacheControl: Option[CacheControl]): JsObject =
101-
maybeCacheControl.fold(Json.obj())(cc => writeJsObject(cc))
102-
103-
implicit lazy val contentBlockWrites: Writes[ContentBlockBase] = {
67+
implicit lazy val contentBlockBaseWrites: Writes[ContentBlockBase] = {
10468
case ContentBlockBase(textBlock @ TextBlock(_), cacheControl) =>
10569
Json.obj("type" -> "text") ++
10670
Json.toJson(textBlock)(textBlockWrites).as[JsObject] ++
@@ -111,7 +75,7 @@ trait JsonFormats {
11175

11276
}
11377

114-
implicit lazy val contentBlockReads: Reads[ContentBlockBase] =
78+
implicit lazy val contentBlockBaseReads: Reads[ContentBlockBase] =
11579
(json: JsValue) => {
11680
(json \ "type").validate[String].flatMap {
11781
case "text" =>
@@ -138,6 +102,51 @@ trait JsonFormats {
138102
}
139103
}
140104

105+
implicit lazy val contentBlockBaseFormat: Format[ContentBlockBase] = Format(
106+
contentBlockBaseReads,
107+
contentBlockBaseWrites
108+
)
109+
implicit lazy val contentBlockBaseSeqFormat: Format[Seq[ContentBlockBase]] = Format(
110+
Reads.seq(contentBlockBaseReads),
111+
Writes.seq(contentBlockBaseWrites)
112+
)
113+
114+
implicit lazy val userMessageFormat: Format[UserMessage] = Json.format[UserMessage]
115+
implicit lazy val userMessageContentFormat: Format[UserMessageContent] =
116+
Json.format[UserMessageContent]
117+
implicit lazy val assistantMessageFormat: Format[AssistantMessage] =
118+
Json.format[AssistantMessage]
119+
implicit lazy val assistantMessageContentFormat: Format[AssistantMessageContent] =
120+
Json.format[AssistantMessageContent]
121+
122+
implicit lazy val textBlockFormat: Format[TextBlock] = Json.format[TextBlock]
123+
124+
implicit lazy val contentBlocksFormat: Format[ContentBlocks] = Json.format[ContentBlocks]
125+
126+
implicit lazy val textBlockReads: Reads[TextBlock] = {
127+
implicit val config: JsonConfiguration = JsonConfiguration(SnakeCase)
128+
Json.reads[TextBlock]
129+
}
130+
131+
implicit lazy val textBlockWrites: Writes[TextBlock] = {
132+
implicit val config: JsonConfiguration = JsonConfiguration(SnakeCase)
133+
Json.writes[TextBlock]
134+
}
135+
136+
implicit lazy val mediaBlockWrites: Writes[MediaBlock] =
137+
(block: MediaBlock) =>
138+
Json.obj(
139+
"type" -> block.`type`,
140+
"source" -> Json.obj(
141+
"type" -> block.encoding,
142+
"media_type" -> block.mediaType,
143+
"data" -> block.data
144+
)
145+
)
146+
147+
private def cacheControlToJsObject(maybeCacheControl: Option[CacheControl]): JsObject =
148+
maybeCacheControl.fold(Json.obj())(cc => writeJsObject(cc))
149+
141150
implicit lazy val contentReads: Reads[Content] = new Reads[Content] {
142151
def reads(json: JsValue): JsResult[Content] = json match {
143152
case JsString(str) => JsSuccess(SingleString(str))
@@ -151,7 +160,7 @@ trait JsonFormats {
151160
case SingleString(text, cacheControl) =>
152161
Json.obj("content" -> text) ++ cacheControlToJsObject(cacheControl)
153162
case ContentBlocks(blocks) =>
154-
Json.obj("content" -> Json.toJson(blocks)(Writes.seq(contentBlockWrites)))
163+
Json.obj("content" -> Json.toJson(blocks)(Writes.seq(contentBlockBaseWrites)))
155164
}
156165
}
157166

@@ -164,7 +173,7 @@ trait JsonFormats {
164173
case UserMessageContent(content) =>
165174
Json.obj(
166175
"role" -> "user",
167-
"content" -> content.map(Json.toJson(_)(contentBlockWrites))
176+
"content" -> content.map(Json.toJson(_)(contentBlockBaseWrites))
168177
)
169178

170179
case AssistantMessage(content, cacheControl) =>
@@ -174,7 +183,7 @@ trait JsonFormats {
174183
case AssistantMessageContent(content) =>
175184
Json.obj(
176185
"role" -> "assistant",
177-
"content" -> content.map(Json.toJson(_)(contentBlockWrites))
186+
"content" -> content.map(Json.toJson(_)(contentBlockBaseWrites))
178187
)
179188
// Add cases for other subclasses if necessary
180189
}

anthropic-client/src/main/scala/io/cequence/openaiscala/anthropic/service/impl/AnthropicServiceImpl.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,13 @@ private[service] trait AnthropicServiceImpl extends Anthropic {
100100
val blocks =
101101
Seq(Content.ContentBlockBase(Content.ContentBlock.TextBlock(text), cacheControl))
102102

103-
Json.toJson(blocks)(Writes.seq(contentBlockWrites))
103+
Json.toJson(blocks)(Writes.seq(contentBlockBaseWrites))
104104
}
105105
case Content.ContentBlocks(blocks) =>
106-
Json.toJson(blocks)(Writes.seq(contentBlockWrites))
106+
Json.toJson(blocks)(Writes.seq(contentBlockBaseWrites))
107107
case Content.ContentBlockBase(content, cacheControl) =>
108108
val blocks = Seq(Content.ContentBlockBase(content, cacheControl))
109-
Json.toJson(blocks)(Writes.seq(contentBlockWrites))
109+
Json.toJson(blocks)(Writes.seq(contentBlockBaseWrites))
110110
}
111111

112112
jsonBodyParams(

0 commit comments

Comments
 (0)