Skip to content

Commit d7af7eb

Browse files
committed
我脑抽了,我在这实现什么ToJson啊我
1 parent 3f1651b commit d7af7eb

File tree

6 files changed

+45
-69
lines changed

6 files changed

+45
-69
lines changed

src/main/kotlin/tech/aliorpse/mcutils/model/status/Color.kt

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,6 @@ sealed interface Color {
6767
* Custom colors using hex strings.
6868
*/
6969
data class Custom(override val hex: String) : Color
70-
71-
companion object {
72-
/**
73-
* Returns a Color based on the input value, can be named or just hex string.
74-
*/
75-
fun fromString(value: String?): Color? {
76-
if (value == null) return null
77-
Named.fromName(value)?.let { return it }
78-
79-
if (value.matches(Regex("^#[0-9a-fA-F]{6}$"))) {
80-
return Custom(value.lowercase())
81-
}
82-
83-
return null
84-
}
85-
}
8670
}
8771

8872
/**
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
package tech.aliorpse.mcutils.model.status
22

3-
import com.squareup.moshi.JsonAdapter
4-
import com.squareup.moshi.JsonDataException
3+
import com.squareup.moshi.FromJson
54
import com.squareup.moshi.JsonReader
65
import com.squareup.moshi.JsonWriter
6+
import com.squareup.moshi.ToJson
7+
import tech.aliorpse.mcutils.model.status.Color.Custom
8+
import tech.aliorpse.mcutils.model.status.Color.Named
9+
import tech.aliorpse.mcutils.module.status.JavaPing.moshi
710

811

9-
class ColorAdapter : JsonAdapter<Color?>() {
10-
override fun fromJson(reader: JsonReader): Color? {
12+
class ColorAdapter {
13+
private val defaultAdapter by lazy { moshi.adapter(Color::class.java) }
14+
15+
@FromJson
16+
fun fromJson(reader: JsonReader): Color? {
1117
val str = reader.nextString()
12-
return Color.fromString(str)
13-
?: throw JsonDataException("Invalid color: $str")
18+
return Named.fromName(str)
19+
?: if (str.matches(Regex("^#[0-9a-fA-F]{6}$"))) Custom(str.lowercase())
20+
else null
1421
}
1522

16-
override fun toJson(writer: JsonWriter, value: Color?) {
17-
if (value == null) {
18-
writer.nullValue()
19-
return
20-
}
21-
val out = when (value) {
22-
is Color.Named -> value.name
23-
is Color.Custom -> value.hex
24-
}
25-
writer.value(out)
23+
@ToJson
24+
fun toJson(writer: JsonWriter, value: Color?) {
25+
defaultAdapter.toJson(writer, value)
2626
}
2727
}

src/main/kotlin/tech/aliorpse/mcutils/model/status/DescriptionAdapter.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package tech.aliorpse.mcutils.model.status
22

3-
import com.squareup.moshi.JsonAdapter
3+
import com.squareup.moshi.FromJson
44
import com.squareup.moshi.JsonReader
55
import com.squareup.moshi.JsonWriter
6+
import com.squareup.moshi.ToJson
7+
import tech.aliorpse.mcutils.module.status.JavaPing.moshi
68
import tech.aliorpse.mcutils.util.MOTDParser.objToSection
79
import tech.aliorpse.mcutils.util.MOTDParser.sectionToObj
810

911
class DescriptionAdapter(
10-
private val motdAdapter: JsonAdapter<MOTDTextComponent>
11-
) : JsonAdapter<Description>() {
12-
override fun fromJson(reader: JsonReader): Description? {
12+
private val motdAdapter: MOTDTextComponentAdapter
13+
) {
14+
private val defaultAdapter by lazy { moshi.adapter(Description::class.java) }
15+
16+
@FromJson
17+
fun fromJson(reader: JsonReader): Description? {
1318
return when (reader.peek()) {
1419
JsonReader.Token.STRING -> {
1520
val text = reader.nextString()
@@ -26,7 +31,8 @@ class DescriptionAdapter(
2631
}
2732
}
2833

29-
override fun toJson(writer: JsonWriter, value: Description?) {
30-
throw NotImplementedError()
34+
@ToJson
35+
fun toJson(writer: JsonWriter, value: Description?) {
36+
defaultAdapter.toJson(writer, value)
3137
}
3238
}

src/main/kotlin/tech/aliorpse/mcutils/model/status/MOTDTextComponentAdapter.kt

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package tech.aliorpse.mcutils.model.status
22

3-
import com.squareup.moshi.JsonAdapter
3+
import com.squareup.moshi.FromJson
44
import com.squareup.moshi.JsonReader
55
import com.squareup.moshi.JsonWriter
6+
import com.squareup.moshi.ToJson
7+
import tech.aliorpse.mcutils.module.status.JavaPing.moshi
68

79
class MOTDTextComponentAdapter(
810
private val colorAdapter: ColorAdapter
9-
) : JsonAdapter<MOTDTextComponent>() {
10-
override fun fromJson(reader: JsonReader): MOTDTextComponent? {
11+
) {
12+
private val defaultAdapter by lazy { moshi.adapter(MOTDTextComponent::class.java) }
13+
14+
@FromJson
15+
fun fromJson(reader: JsonReader): MOTDTextComponent? {
1116
return when (reader.peek()) {
1217
JsonReader.Token.STRING -> MOTDTextComponent(text = reader.nextString())
1318
JsonReader.Token.BEGIN_OBJECT -> readComponentObject(reader)
@@ -18,27 +23,9 @@ class MOTDTextComponentAdapter(
1823
}
1924
}
2025

21-
override fun toJson(writer: JsonWriter, value: MOTDTextComponent?) {
22-
if (value == null) {
23-
writer.nullValue()
24-
return
25-
}
26-
writer.beginObject()
27-
writer.name("text").value(value.text)
28-
writer.name("color")
29-
colorAdapter.toJson(writer, value.color)
30-
writer.name("bold").value(value.bold)
31-
writer.name("italic").value(value.italic)
32-
writer.name("underlined").value(value.underlined)
33-
writer.name("strikethrough").value(value.strikethrough)
34-
writer.name("obfuscated").value(value.obfuscated)
35-
if (!value.extra.isNullOrEmpty()) {
36-
writer.name("extra")
37-
writer.beginArray()
38-
value.extra.forEach { toJson(writer, it) }
39-
writer.endArray()
40-
}
41-
writer.endObject()
26+
@ToJson
27+
fun toJson(writer: JsonWriter, value: MOTDTextComponent?) {
28+
defaultAdapter.toJson(writer, value)
4229
}
4330

4431
private fun readComponentObject(reader: JsonReader): MOTDTextComponent {

src/main/kotlin/tech/aliorpse/mcutils/module/status/JavaPing.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ import tech.aliorpse.mcutils.model.status.ColorAdapter
1010
import tech.aliorpse.mcutils.model.status.Description
1111
import tech.aliorpse.mcutils.model.status.DescriptionAdapter
1212
import tech.aliorpse.mcutils.model.status.JavaServerStatus
13-
import tech.aliorpse.mcutils.model.status.MOTDTextComponent
1413
import tech.aliorpse.mcutils.model.status.MOTDTextComponentAdapter
1514
import tech.aliorpse.mcutils.model.status.Players
1615
import tech.aliorpse.mcutils.model.status.Version
17-
import tech.aliorpse.mcutils.model.status.Color
1816
import java.io.ByteArrayOutputStream
1917
import java.io.DataInputStream
2018
import java.io.DataOutputStream
@@ -46,13 +44,13 @@ object JavaPing {
4644
private const val NEXT_STATE_STATUS = 1
4745

4846
private val colorAdapter = ColorAdapter()
49-
private val motdAdapter = MOTDTextComponentAdapter(colorAdapter)
50-
private val descAdapter = DescriptionAdapter(motdAdapter)
47+
private val motdAdapter = MOTDTextComponentAdapter(colorAdapter)
48+
private val descAdapter = DescriptionAdapter(motdAdapter)
5149

5250
val moshi: Moshi = Moshi.Builder()
53-
.add(Color::class.java, colorAdapter)
54-
.add(MOTDTextComponent::class.java, motdAdapter)
55-
.add(Description::class.java, descAdapter)
51+
.add(colorAdapter)
52+
.add(motdAdapter)
53+
.add(descAdapter)
5654
.add(KotlinJsonAdapterFactory())
5755
.build()
5856

src/test/kotlin/tech/aliorpse/mcutils/status/ServerPingTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class ServerPingTest {
88
@Test
99
fun javaGetStatusTest() {
1010
val result = JavaPing.getStatusBlocking("bedrock.mineseed.org")
11+
1112
println(result)
1213
assert(result.ping > 0)
1314
}

0 commit comments

Comments
 (0)