Skip to content

Commit 45f3f4f

Browse files
committed
Deserialization improvements. .asObject<ClassName>() instead of .asObject(ClassName::class). Primitives, Collections, Maps support.
1 parent da0b428 commit 45f3f4f

28 files changed

+264
-171
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ val item = IrisJsonParser("""{"id": 3,
2020
|"person2": {"name": "Alla Who", "height": 170, "income": 1214.81}
2121
|}""".trimMargin()).parse()
2222

23-
val user: User = item.asObject(User::class)
23+
val user: User = item.asObject<User>()
2424
println(user.person1)
2525
println(user.person2)
2626
````

src/iris/json/JsonItem.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package iris.json
22

3-
import iris.json.serialization.NodeInfo
3+
import iris.json.serialization.Deserializer
4+
import iris.json.serialization.DeserializerCache
45
import kotlin.reflect.KClass
6+
import kotlin.reflect.typeOf
57

68
/**
79
* @created 26.09.2020
@@ -45,9 +47,10 @@ interface JsonItem {
4547

4648
fun asMap(): Map<String, Any?>
4749

50+
@Deprecated("Use JsonItem.asObject<T>() instead")
4851
fun <T: Any>asObject(d: KClass<T>): T
4952

50-
fun <T: Any>asObject(info: NodeInfo): T
53+
fun <T: Any>asObject(info: Deserializer): T
5154

5255
fun asStringOrNull(): String?
5356

@@ -68,6 +71,9 @@ interface JsonItem {
6871
fun isObject(): Boolean
6972

7073
fun find(tree: String): JsonItem
74+
}
7175

72-
76+
inline fun <reified T>JsonItem.asObject(): T {
77+
val deserializer = DeserializerCache.getDeserializer(typeOf<T>())
78+
return this.asObject(deserializer)
7379
}

src/iris/json/flow/FlowArray.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package iris.json.flow
33
import iris.json.JsonArray
44
import iris.json.JsonItem
55
import iris.json.proxy.JsonProxyUtil
6-
import iris.json.serialization.ListInfo
7-
import iris.json.serialization.NodeInfo
6+
import iris.json.serialization.Deserializer
7+
import iris.json.serialization.DeserializerCollection
88

99
/**
1010
* @created 20.09.2020
@@ -152,8 +152,8 @@ class FlowArray(tokener: Tokener) : FlowItem(tokener), JsonArray {
152152
}
153153
}
154154

155-
override fun <T : Any> asObject(info: NodeInfo): T {
155+
override fun <T : Any> asObject(info: Deserializer): T {
156156
parse()
157-
return (info as ListInfo).getObject(this.items) as T
157+
return (info as DeserializerCollection).getObject(this.items) as T
158158
}
159159
}

src/iris/json/flow/FlowObject.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import iris.json.JsonItem
55
import iris.json.JsonObject
66
import iris.json.plain.IrisJsonNull
77
import iris.json.proxy.JsonProxyUtil
8-
import iris.json.serialization.ClassInfo
9-
import iris.json.serialization.NodeInfo
8+
import iris.json.serialization.Deserializer
9+
import iris.json.serialization.DeserializerClass
1010
import java.util.*
1111

1212
/**
@@ -136,9 +136,9 @@ class FlowObject(tokener: Tokener) : FlowItem(tokener), JsonObject {
136136
return buffer
137137
}
138138

139-
override fun <T : Any> asObject(info: NodeInfo): T {
139+
override fun <T : Any> asObject(info: Deserializer): T {
140140
parse()
141-
return (info as ClassInfo).getObject(entries)
141+
return (info as DeserializerClass).getObject(entries)
142142
}
143143

144144
override fun isObject() = true

src/iris/json/flow/FlowString.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package iris.json.flow
33
import iris.json.JsonString
44
import iris.json.plain.IrisJsonItem
55
import iris.json.plain.IrisJsonNull
6-
import iris.json.serialization.NodeInfo
6+
import iris.json.serialization.Deserializer
77
import iris.sequence.IrisSequence
88

99
/**
@@ -96,7 +96,7 @@ class FlowString(tokener: Tokener, val quote: Char) : FlowItem(tokener), JsonStr
9696
return ready!!
9797
}
9898

99-
override fun <T : Any> asObject(info: NodeInfo): T {
99+
override fun <T : Any> asObject(info: Deserializer): T {
100100
return obj() as T
101101
}
102102

src/iris/json/flow/FlowValue.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import iris.json.IrisJson
44
import iris.json.JsonValue
55
import iris.json.plain.IrisJsonItem
66
import iris.json.plain.IrisJsonNull
7-
import iris.json.serialization.NodeInfo
8-
import iris.json.serialization.TypeInfo
7+
import iris.json.serialization.Deserializer
8+
import iris.json.serialization.DeserializerPrimitive
99
import iris.sequence.*
1010

1111
/**
@@ -144,9 +144,9 @@ class FlowValue(tokener: Tokener) : FlowItem(tokener), JsonValue {
144144
data = this.tokener.readPrimitive()
145145
}
146146

147-
override fun <T : Any> asObject(info: NodeInfo): T {
147+
override fun <T : Any> asObject(info: Deserializer): T {
148148
parse()
149-
return (info as TypeInfo).getValue(this) as T
149+
return (info as DeserializerPrimitive).getValue(this) as T
150150
}
151151

152152
override fun isPrimitive() = true

src/iris/json/plain/IrisJsonArray.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package iris.json.plain
33
import iris.json.JsonArray
44
import iris.json.JsonItem
55
import iris.json.proxy.JsonProxyUtil
6-
import iris.json.serialization.ListInfo
7-
import iris.json.serialization.NodeInfo
6+
import iris.json.serialization.Deserializer
7+
import iris.json.serialization.DeserializerCollectionImpl
88

99
/**
1010
* @created 14.04.2020
@@ -76,7 +76,7 @@ class IrisJsonArray(private val items: List<IrisJsonItem>) : IrisJsonItem(), Jso
7676
}
7777
}
7878

79-
override fun <T : Any> asObject(info: NodeInfo): T {
80-
return (info as ListInfo).getObject(this.items) as T
79+
override fun <T : Any> asObject(info: Deserializer): T {
80+
return (info as DeserializerCollectionImpl).getObject(this.items) as T
8181
}
8282
}

src/iris/json/plain/IrisJsonItem.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package iris.json.plain
22

33
import iris.json.JsonItem
4-
import iris.json.serialization.SerializationCache
4+
import iris.json.serialization.DeserializerCache
55
import kotlin.reflect.KClass
66

77
/**
@@ -160,6 +160,6 @@ abstract class IrisJsonItem() : JsonItem {
160160
override fun isObject() = false
161161

162162
override fun <T : Any> asObject(d: KClass<T>): T {
163-
return asObject(SerializationCache.getInstance(d))
163+
return asObject(DeserializerCache.getDeserializer(d))
164164
}
165165
}

src/iris/json/plain/IrisJsonNull.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package iris.json.plain
22

33
import iris.json.JsonNull
4-
import iris.json.serialization.NodeInfo
4+
import iris.json.serialization.Deserializer
55

66
/**
77
* @created 14.04.2020
@@ -34,7 +34,7 @@ open class IrisJsonNull : IrisJsonItem(), JsonNull {
3434
return "null"
3535
}
3636

37-
override fun <T : Any> asObject(info: NodeInfo): T {
37+
override fun <T : Any> asObject(info: Deserializer): T {
3838
return null as T
3939
}
4040

src/iris/json/plain/IrisJsonObject.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import iris.json.JsonEntry
44
import iris.json.JsonItem
55
import iris.json.JsonObject
66
import iris.json.proxy.JsonProxyUtil
7-
import iris.json.serialization.ClassInfo
8-
import iris.json.serialization.NodeInfo
7+
import iris.json.serialization.Deserializer
8+
import iris.json.serialization.DeserializerClass
99

1010
/**
1111
* @created 14.04.2020
@@ -91,8 +91,8 @@ open class IrisJsonObject(private val entries: List<JsonEntry>) : IrisJsonItem()
9191
}
9292
}
9393

94-
override fun <T: Any>asObject(info: NodeInfo): T {
95-
return (info as ClassInfo).getObject(entries)
94+
override fun <T: Any>asObject(info: Deserializer): T {
95+
return (info as DeserializerClass).getObject(entries)
9696
}
9797
}
9898

0 commit comments

Comments
 (0)