private StringTemplateScript<T> createNullObjectScript(final byte[] declaredMemberName) { return new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); kw.Null(writer); } }; }
private StringTemplateScript<T> createNullObjectScript(final byte[] declaredMemberName) { return new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); kw.Null(writer); } }; }
void addInteger(final ToBoolFunction<T> isNull, final ToLongFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { Appendables.appendValue(writer, func.applyAsLong(source), false); } } }); }
<M> void addBuilder(final JSONBuilder<?, M> builder, final ToMemberFunction<T, M> accessor) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); M member = accessor.get(source); if (member == null) { kw.Null(writer); } else { builder.render(writer, member); } } }); }
void addInteger(final ToBoolFunction<T> isNull, final ToLongFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { Appendables.appendValue(writer, func.applyAsLong(source), false); } } }); }
<E extends Enum<E>> void addEnumOrdinal(final ToEnumFunction<T, E> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); E v = func.applyAsEnum(source); if (v == null) { kw.Null(writer); } else { Appendables.appendValue(writer, v.ordinal()); } } }); }
void addDecimal(final int precision, final ToBoolFunction<T> isNull, final ToDoubleFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(final AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { double v = func.applyAsDouble(source); Appendables.appendDecimalValue(writer, (long) (v * PipeWriter.powd[64 + precision]), (byte) (precision * -1)); } } }); }
<E extends Enum<E>> void addEnumOrdinal(final ToEnumFunction<T, E> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); E v = func.applyAsEnum(source); if (v == null) { kw.Null(writer); } else { Appendables.appendValue(writer, v.ordinal()); } } }); }
<M> void addBuilder(final JSONBuilder<?, M> builder, final ToMemberFunction<T, M> accessor) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); M member = accessor.get(source); if (member == null) { kw.Null(writer); } else { builder.render(writer, member); } } }); }
void addDecimal(final int precision, final ToBoolFunction<T> isNull, final ToDoubleFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(final AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { double v = func.applyAsDouble(source); Appendables.appendDecimalValue(writer, (long) (v * PipeWriter.powd[64 + precision]), (byte) (precision * -1)); } } }); }
void addBool(final ToBoolFunction<T> isNull, final ToBoolFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(final AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { if (func.applyAsBool(source)) { kw.True(writer); } else { kw.False(writer); } } } }); }
void addBool(final ToBoolFunction<T> isNull, final ToBoolFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(final AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { if (func.applyAsBool(source)) { kw.True(writer); } else { kw.False(writer); } } } }); }
void addString(final boolean checkNull, final ToStringFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() {
void addString(final boolean checkNull, final ToStringFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() {
<M> JSONBuilder<R, M> beginArray(final ToMemberFunction<T, M> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); final StringTemplateBuilder<M> arrayBuilder = new StringTemplateBuilder<>(); kw.OpenArray(arrayBuilder, depth); final StringTemplateScript<T> objNullBranch = createNullObjectScript(declaredMemberName); final StringTemplateScript<T> notNullBranch = new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); arrayBuilder.render(writer, func.get(source)); } }; final StringTemplateScript<T>[] nullableBranches = new StringTemplateScript[2]; nullableBranches[0] = objNullBranch; nullableBranches[1] = notNullBranch; scripts.add(nullableBranches, new StringTemplateBranching<T>() { @Override public int branch(T o) { return func.get(o) == null ? 0 : 1; } }); return new JSONBuilder<R, M>(arrayBuilder, kw, depth + 1, root); }
<M> JSONBuilder<R, M> beginArray(final ToMemberFunction<T, M> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); final StringTemplateBuilder<M> arrayBuilder = new StringTemplateBuilder<>(); kw.OpenArray(arrayBuilder, depth); final StringTemplateScript<T> objNullBranch = createNullObjectScript(declaredMemberName); final StringTemplateScript<T> notNullBranch = new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); arrayBuilder.render(writer, func.get(source)); } }; final StringTemplateScript<T>[] nullableBranches = new StringTemplateScript[2]; nullableBranches[0] = objNullBranch; nullableBranches[1] = notNullBranch; scripts.add(nullableBranches, new StringTemplateBranching<T>() { @Override public int branch(T o) { return func.get(o) == null ? 0 : 1; } }); return new JSONBuilder<R, M>(arrayBuilder, kw, depth + 1, root); }
public <M> JSONBuilder<R, M> beginObject(final ToMemberFunction<T, M> accessor) { final byte[] declaredMemberName = consumeDeclaredMemberName(); final StringTemplateBuilder<M> accessorScript = new StringTemplateBuilder<>(); kw.OpenObj(accessorScript, depth); final ObjectRenderState newOrs = new ObjectRenderState(kw); final StringTemplateScript<T> objNullBranch = createNullObjectScript(declaredMemberName); final StringTemplateScript<T> notNullBranch = new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); newOrs.beginObjectRender(); accessorScript.render(writer, accessor.get(source)); } }; final StringTemplateScript<T>[] nullableBranches = new StringTemplateScript[2]; nullableBranches[0] = objNullBranch; nullableBranches[1] = notNullBranch; scripts.add(nullableBranches, new StringTemplateBranching<T>() { @Override public int branch(T o) { return accessor.get(o) == null ? 0 : 1; } }); JSONBuilder<R, M> builder = new JSONBuilder<>(accessorScript, kw, depth + 1, root); builder.ors = newOrs; return builder; }
public <M> JSONBuilder<R, M> beginObject(final ToMemberFunction<T, M> accessor) { final byte[] declaredMemberName = consumeDeclaredMemberName(); final StringTemplateBuilder<M> accessorScript = new StringTemplateBuilder<>(); kw.OpenObj(accessorScript, depth); final ObjectRenderState newOrs = new ObjectRenderState(kw); final StringTemplateScript<T> objNullBranch = createNullObjectScript(declaredMemberName); final StringTemplateScript<T> notNullBranch = new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); newOrs.beginObjectRender(); accessorScript.render(writer, accessor.get(source)); } }; final StringTemplateScript<T>[] nullableBranches = new StringTemplateScript[2]; nullableBranches[0] = objNullBranch; nullableBranches[1] = notNullBranch; scripts.add(nullableBranches, new StringTemplateBranching<T>() { @Override public int branch(T o) { return accessor.get(o) == null ? 0 : 1; } }); JSONBuilder<R, M> builder = new JSONBuilder<>(accessorScript, kw, depth + 1, root); builder.ors = newOrs; return builder; }