Dev: add java enum encoding
This commit is contained in:
parent
03fa24482b
commit
1fb015ab58
|
@ -118,7 +118,14 @@ open class JavaEncoder: Encoder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public func singleValueContainer() -> SingleValueEncodingContainer {
|
public func singleValueContainer() -> SingleValueEncodingContainer {
|
||||||
return JavaSingleValueEncodingContainer(encoder: self)
|
let storage = self.popInstance()
|
||||||
|
switch storage.type {
|
||||||
|
case let .object(className):
|
||||||
|
return JavaEnumValueEncodingContainer(encoder: self, javaClass: className, javaObject: storage.javaObject)
|
||||||
|
default:
|
||||||
|
fatalError("Only object type supported here")
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,14 +377,20 @@ fileprivate class JavaArrayContainer : UnkeyedEncodingContainer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class JavaSingleValueEncodingContainer: SingleValueEncodingContainer {
|
class JavaEnumValueEncodingContainer: SingleValueEncodingContainer {
|
||||||
|
|
||||||
var codingPath: [CodingKey]
|
var codingPath: [CodingKey]
|
||||||
let encoder: JavaEncoder
|
let encoder: JavaEncoder
|
||||||
|
|
||||||
init(encoder: JavaEncoder) {
|
private var javaClass: String
|
||||||
|
private var javaObject: jobject
|
||||||
|
|
||||||
|
init(encoder: JavaEncoder, javaClass: String, javaObject: jobject) {
|
||||||
self.codingPath = [CodingKey]()
|
self.codingPath = [CodingKey]()
|
||||||
self.encoder = encoder
|
self.encoder = encoder
|
||||||
|
self.javaClass = javaClass
|
||||||
|
self.javaObject = javaObject
|
||||||
|
NSLog("Created \(javaClass) enum value encoding container")
|
||||||
}
|
}
|
||||||
|
|
||||||
public func encodeNil() throws {
|
public func encodeNil() throws {
|
||||||
|
@ -385,6 +398,11 @@ class JavaSingleValueEncodingContainer: SingleValueEncodingContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public func encode<T : Encodable>(_ value: T) throws {
|
public func encode<T : Encodable>(_ value: T) throws {
|
||||||
|
if value is Int {
|
||||||
|
let fieldID = try getJavaField(forClass: javaClass, field: "rawValue", sig: "J")
|
||||||
|
JNI.api.SetLongField(JNI.env, javaObject, fieldID, jlong(value as! Int))
|
||||||
|
return
|
||||||
|
}
|
||||||
throw JavaCodingError.notSupported("JavaSingleValueEncodingContainer.encode(value: \(value)")
|
throw JavaCodingError.notSupported("JavaSingleValueEncodingContainer.encode(value: \(value)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue