Skip to content

Commit

Permalink
fix #145 add Any.registerEncoders
Browse files Browse the repository at this point in the history
  • Loading branch information
taowen committed Jan 13, 2018
1 parent 855792e commit 68990b2
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 2 deletions.
4 changes: 2 additions & 2 deletions demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jsoniter</groupId>
<version>0.9.19-SNAPSHOT</version>
<version>0.9.21-SNAPSHOT</version>
<artifactId>jsoniter-demo</artifactId>
<name>json iterator demo</name>
<description>jsoniter (json-iterator) is fast and flexible JSON parser available in Java and Go</description>
Expand Down Expand Up @@ -49,7 +49,7 @@
<dependency>
<groupId>com.jsoniter</groupId>
<artifactId>jsoniter</artifactId>
<version>0.9.19-SNAPSHOT</version>
<version>0.9.21-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
Expand Down
2 changes: 2 additions & 0 deletions demo/src/main/java/com/jsoniter/demo/Demo.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jsoniter.demo;

import com.jsoniter.JsonIterator;
import com.jsoniter.any.Any;
import com.jsoniter.output.EncodingMode;
import com.jsoniter.output.JsonStream;
import com.jsoniter.spi.DecodingMode;
Expand All @@ -16,6 +17,7 @@ public static void main(String[] args) {
System.out.println(user.firstName);
System.out.println(user.lastName);
System.out.println(user.score);
user.attachment = Any.wrapArray(new int[]{1, 2, 3});
System.out.println(JsonStream.serialize(user));
}
}
2 changes: 2 additions & 0 deletions demo/src/main/java/com/jsoniter/demo/DemoCodegenConfig.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jsoniter.demo;

import com.jsoniter.JsonIterator;
import com.jsoniter.any.Any;
import com.jsoniter.output.EncodingMode;
import com.jsoniter.output.JsonStream;
import com.jsoniter.spi.Decoder;
Expand All @@ -19,6 +20,7 @@ public class DemoCodegenConfig implements StaticCodegenConfig {
public void setup() {
// register custom decoder or extensions before codegen
// so that we doing codegen, we know in which case, we need to callback
Any.registerEncoders();
JsonIterator.setMode(DecodingMode.STATIC_MODE);
JsonStream.setMode(EncodingMode.STATIC_MODE);
JsonStream.setIndentionStep(2);
Expand Down
2 changes: 2 additions & 0 deletions demo/src/main/java/com/jsoniter/demo/User.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.jsoniter.demo;

import com.jsoniter.annotation.JsonProperty;
import com.jsoniter.any.Any;

public class User {
@JsonProperty(nullable = false)
public String firstName;
@JsonProperty(nullable = false)
public String lastName;
public int score;
public Any attachment;
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,12 @@ public class User implements com.jsoniter.spi.Decoder {
java.lang.String _firstName_ = null;
java.lang.String _lastName_ = null;
int _score_ = 0;
com.jsoniter.any.Any _attachment_ = null;
do {
switch (com.jsoniter.CodegenAccess.readObjectFieldAsHash(iter)) {
case -1513391000:
_attachment_ = (com.jsoniter.any.Any)iter.readAny();
continue;
case -1078100014:
_lastName_ = (java.lang.String)iter.readString();
continue;
Expand All @@ -48,6 +52,7 @@ public class User implements com.jsoniter.spi.Decoder {
obj.firstName = _firstName_;
obj.lastName = _lastName_;
obj.score = _score_;
obj.attachment = _attachment_;
return obj;
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
return decode_(iter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ public static void encode_(com.jsoniter.demo.User obj, com.jsoniter.output.JsonS
stream.writeMore();
stream.writeObjectField("score");
stream.writeVal((int)obj.score);
stream.writeMore();
stream.writeObjectField("attachment");
if (obj.attachment == null) { stream.writeNull(); } else {
stream.writeVal((com.jsoniter.any.Any)obj.attachment);
}
stream.writeObjectEnd();
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/jsoniter/any/Any.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
public abstract class Any implements Iterable<Any> {

static {
registerEncoders();
}

public static void registerEncoders() {
Encoder.ReflectionEncoder anyEncoder = new Encoder.ReflectionEncoder() {
@Override
public void encode(Object obj, JsonStream stream) throws IOException {
Expand Down
2 changes: 2 additions & 0 deletions src/test/java/com/jsoniter/any/TestArray.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.jsoniter.any;

import com.jsoniter.JsonIterator;
import com.jsoniter.output.EncodingMode;
import com.jsoniter.output.JsonStream;
import junit.framework.TestCase;

import java.util.ArrayList;
Expand Down

0 comments on commit 68990b2

Please sign in to comment.