private String mapToJson(Map<String, ByteIterator> values) { VPackBuilder builder = new VPackBuilder().add(ValueType.OBJECT); for (Map.Entry<String, ByteIterator> entry : values.entrySet()) { builder.add(entry.getKey(), byteIteratorToString(entry.getValue())); } builder.close(); return arangoDB.util().deserialize(builder.slice(), String.class); }
private void serializeArray(final String name, final Object value, final VPackBuilder builder) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, VPackException { builder.add(name, ValueType.ARRAY); for (int i = 0; i < Array.getLength(value); i++) { final Object element = Array.get(value, i); if (element != null) { addValue(null, element.getClass(), element, builder, null, Collections.<String, Object> emptyMap()); } else { builder.add(ValueType.NULL); } } builder.close(); }
@Override public void serialize( final VPackBuilder builder, final String attribute, final Long value, final VPackSerializationContext context) throws VPackException { builder.add(attribute, value); } };
private void writeBaseDocument( final String attribute, final BaseDocument source, final VPackBuilder sink, final TypeInformation<?> definedType) { final VPackBuilder builder = new VPackBuilder(); writeMap(attribute, source.getProperties(), builder, definedType); builder.add(_ID, source.getId()); builder.add(_KEY, source.getKey()); builder.add(_REV, source.getRevision()); sink.add(attribute, builder.slice()); }
default VPackSlice write(final Object source) { final VPackBuilder builder = new VPackBuilder(); write(source, builder); return builder.slice(); }
switch (item.getType()) { case NULL: appendNull(); break; case ARRAY: addArray(item.isUnindexed()); break; case OBJECT: addObject(item.isUnindexed()); break; case SMALLINT: appendSmallInt(vSmallInt); break; case INT: final int length; if (clazz == Long.class || clazz == BigInteger.class) { add((byte) 0x27); length = LONG_BYTES; } else { append(item.getNumber().longValue(), length); break; case UINT: appendUInt(vUInt); break; default:
@Override public void add(final String attribute, final int key) throws VPackException { if (builder == null) { builder = new VPackBuilder(); builder.add(ValueType.OBJECT); } builder.add(attribute, key); }
@Override public void seal() throws VPackException { if (builder == null) { return; } builder.close(); final VPackSlice slice = builder.slice(); for (int i = 0; i < slice.getLength(); i++) { final VPackSlice key = slice.keyAt(i); final VPackSlice value = slice.valueAt(i); attributeToKey.put(key.getAsString(), value); keyToAttribute.put(value.getAsInt(), key); } }
private void appendBinary(final byte[] value) { add((byte) 0xc3); append(value.length, INTEGER_BYTES); ensureCapacity(size + value.length); System.arraycopy(value, 0, buffer, size, value.length); size += value.length; }
private void appendString(final String value) throws VPackBuilderException { try { final byte[] bytes = value.getBytes("UTF-8"); final int length = bytes.length; if (length <= 126) { // short string add((byte) (0x40 + length)); } else { // long string add((byte) 0xbf); appendLength(length); } appendString(bytes); } catch (final UnsupportedEncodingException e) { throw new VPackBuilderException(e); } }
@Override public void writeEndObject() throws IOException { try { builder.close(); } catch (final VPackBuilderException e) { throw new IOException(e); } }
private void addCompoundValue(final byte head) { // an Array or Object is started: stack.add(size); index.put(stack.size() - 1, new ArrayList<Integer>()); add(head); // Will be filled later with bytelength and nr subs size += 8; ensureCapacity(size); }
@Override public void close() throws IOException { out.write(builder.slice().getBuffer()); super.close(); } }
private void addArray(final boolean unindexed) { addCompoundValue((byte) (unindexed ? 0x13 : 0x06)); }
private void serializeIterable(final String name, final Object value, final VPackBuilder builder, final Type type) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, VPackException { builder.add(name, ValueType.ARRAY); for (final Iterator iterator = Iterable.class.cast(value).iterator(); iterator.hasNext();) { final Object element = iterator.next(); final Type t = type != null ? type : element != null ? element.getClass() : null; addValue(null, t, element, builder, null, Collections.<String, Object> emptyMap()); } builder.close(); }
private void writeBaseDocument( final String attribute, final BaseDocument source, final VPackBuilder sink, final TypeInformation<?> definedType) { final VPackBuilder builder = new VPackBuilder(); writeMap(attribute, source.getProperties(), builder, definedType); builder.add(_ID, source.getId()); builder.add(_KEY, source.getKey()); builder.add(_REV, source.getRevision()); sink.add(attribute, builder.slice()); }
default VPackSlice write(final Object source) { final VPackBuilder builder = new VPackBuilder(); write(source, builder); return builder.slice(); }