mirror of https://github.com/usbharu/Hideout.git
wip
This commit is contained in:
parent
0baabb9fd0
commit
ae43b5e793
|
@ -34,15 +34,15 @@ open class JsonLd {
|
|||
@JsonDeserialize(contentUsing = ContextDeserializer::class)
|
||||
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY, using = ContextSerializer::class)
|
||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||
var context: List<String> = emptyList()
|
||||
var context: List<StringOrObject> = emptyList()
|
||||
set(value) {
|
||||
field = value.filterNotNull().filter { it.isNotBlank() }
|
||||
field = value.filter { it.isEmpty() }
|
||||
}
|
||||
|
||||
@JsonCreator
|
||||
constructor(context: List<String?>?) {
|
||||
constructor(context: List<StringOrObject?>?) {
|
||||
if (context != null) {
|
||||
this.context = context.filterNotNull().filter { it.isNotBlank() }
|
||||
this.context = context.filterNotNull().filter { it.isEmpty() }
|
||||
} else {
|
||||
this.context = emptyList()
|
||||
}
|
||||
|
@ -76,14 +76,14 @@ class ContextDeserializer : JsonDeserializer<String>() {
|
|||
}
|
||||
}
|
||||
|
||||
class ContextSerializer : JsonSerializer<List<String>>() {
|
||||
class ContextSerializer : JsonSerializer<List<StringOrObject>>() {
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun isEmpty(value: List<String>?): Boolean = value.isNullOrEmpty()
|
||||
override fun isEmpty(value: List<StringOrObject>?): Boolean = value.isNullOrEmpty()
|
||||
|
||||
override fun isEmpty(provider: SerializerProvider?, value: List<String>?): Boolean = value.isNullOrEmpty()
|
||||
override fun isEmpty(provider: SerializerProvider?, value: List<StringOrObject>?): Boolean = value.isNullOrEmpty()
|
||||
|
||||
override fun serialize(value: List<String>?, gen: JsonGenerator?, serializers: SerializerProvider) {
|
||||
override fun serialize(value: List<StringOrObject>?, gen: JsonGenerator?, serializers: SerializerProvider) {
|
||||
if (value.isNullOrEmpty()) {
|
||||
serializers.defaultSerializeNull(gen)
|
||||
return
|
||||
|
@ -98,4 +98,8 @@ class ContextSerializer : JsonSerializer<List<String>>() {
|
|||
gen?.writeEndArray()
|
||||
}
|
||||
}
|
||||
|
||||
override fun serialize(value: List<StringOrObject>?, gen: JsonGenerator?, serializers: SerializerProvider?) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
package dev.usbharu.hideout.activitypub.domain.model
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator
|
||||
import com.fasterxml.jackson.core.JsonGenerator
|
||||
import com.fasterxml.jackson.core.JsonParser
|
||||
import com.fasterxml.jackson.core.type.TypeReference
|
||||
import com.fasterxml.jackson.databind.*
|
||||
|
||||
open class StringOrObject {
|
||||
var contextString: String? = null
|
||||
var contextObject: Map<String, String>? = null
|
||||
|
||||
@JsonCreator
|
||||
protected constructor()
|
||||
|
||||
constructor(string: String) : this() {
|
||||
contextString = string
|
||||
}
|
||||
|
||||
constructor(contextObject: Map<String, String>) : this() {
|
||||
this.contextObject = contextObject
|
||||
}
|
||||
|
||||
fun isEmpty(): Boolean = contextString.isNullOrEmpty() and contextObject.isNullOrEmpty()
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as StringOrObject
|
||||
|
||||
if (contextString != other.contextString) return false
|
||||
if (contextObject != other.contextObject) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = contextString?.hashCode() ?: 0
|
||||
result = 31 * result + (contextObject?.hashCode() ?: 0)
|
||||
return result
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "StringOrObject(contextString=$contextString, contextObject=$contextObject)"
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
class StringOrObjectDeserializer : JsonDeserializer<StringOrObject>() {
|
||||
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): StringOrObject {
|
||||
val readTree: JsonNode = p?.codec?.readTree(p) ?: return StringOrObject("")
|
||||
return if (readTree.isValueNode) {
|
||||
StringOrObject(readTree.textValue())
|
||||
} else {
|
||||
|
||||
val map = p.readValueAs<Map<String, String>>(object : TypeReference<Map<String, String>>() {})
|
||||
|
||||
StringOrObject(map)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class StringORObjectSerializer : JsonSerializer<StringOrObject>() {
|
||||
override fun serialize(value: StringOrObject?, gen: JsonGenerator?, serializers: SerializerProvider) {
|
||||
if (value == null) {
|
||||
serializers.defaultSerializeNull(gen)
|
||||
return
|
||||
}
|
||||
if (value.contextString != null) {
|
||||
gen?.writeString(value.contextString)
|
||||
} else {
|
||||
serializers.defaultSerializeValue(value.contextObject, gen)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue