Skip to content

Commit

Permalink
improve support custom deserialize & serialize
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Jul 27, 2023
1 parent 59c7c76 commit 2bd4b7e
Show file tree
Hide file tree
Showing 40 changed files with 531 additions and 129 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.alibaba.fastjson2.function;

import java.util.function.BiConsumer;

public final class FieldBiConsumer<T>
implements BiConsumer<T, Object> {
public final int fieldIndex;
public final FieldConsumer<T> consumer;

public FieldBiConsumer(int fieldIndex, FieldConsumer<T> consumer) {
this.fieldIndex = fieldIndex;
this.consumer = consumer;
}

@Override
public void accept(T object, Object fieldValue) {
consumer.accept(object, fieldIndex, fieldValue);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.alibaba.fastjson2.function;

@FunctionalInterface
public interface FieldConsumer<T> {
void accept(T object, int fieldIndex, Object fieldValue);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.alibaba.fastjson2.function;

@FunctionalInterface
public interface FieldSupplier<T> {
Object get(T object, int fieldIndex);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.alibaba.fastjson2.function;

import java.util.function.Function;

public final class FieldSupplierFunction<T>
implements Function<T, Object> {
public final FieldSupplier<T> supplier;
public final int fieldIndex;

public FieldSupplierFunction(FieldSupplier<T> supplier, int fieldIndex) {
this.supplier = supplier;
this.fieldIndex = fieldIndex;
}

@Override
public Object apply(T object) {
return supplier.get(object, fieldIndex);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public class ASMUtils {
public static final String TYPE_OBJECT_WRITER = ObjectWriter.class.getName().replace('.', '/');
public static final String TYPE_JSON_WRITER = JSONWriter.class.getName().replace('.', '/');
public static final String TYPE_FIELD_WRITER = FieldWriter.class.getName().replace('.', '/');
public static final String TYPE_OBJECT = "java/lang/Object";

public static final String DESC_FIELD_WRITER = 'L' + FieldWriter.class.getName().replace('.', '/') + ';';
public static final String DESC_FIELD_WRITER_ARRAY = "[" + DESC_FIELD_WRITER;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import java.lang.reflect.*;
import java.time.*;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Function;

import static com.alibaba.fastjson2.util.JDKUtils.UNSAFE;
Expand Down Expand Up @@ -529,4 +530,8 @@ static ObjectReader createFormattedObjectReader(Type fieldType, Class fieldClass
}
return null;
}

public BiConsumer getFunction() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readBigDecimal();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readBigInteger();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readBool();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readDouble();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readFloat();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return (short) jsonReader.readInt32Value();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readInt32();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readInt64();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readInt32();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
public Object readFieldValue(JSONReader jsonReader) {
return jsonReader.readNumber();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -321,4 +321,9 @@ public void processExtra(JSONReader jsonReader, Object object) {

jsonReader.skipValue();
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,9 @@ public Object readFieldValue(JSONReader jsonReader) {
public boolean supportAcceptType(Class valueClass) {
return true;
}

@Override
public BiConsumer getFunction() {
return function;
}
}
Loading

0 comments on commit 2bd4b7e

Please sign in to comment.