All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.arangodb.internal.serde.InternalSerde Maven / Gradle / Ivy

There is a newer version: 7.9.0
Show newest version
package com.arangodb.internal.serde;

import com.arangodb.serde.ArangoSerde;
import com.arangodb.ContentType;
import com.arangodb.shaded.fasterxml.jackson.databind.JsonNode;

import java.lang.reflect.Type;
import java.util.Collection;

public interface InternalSerde extends ArangoSerde {

    /**
     * Used for logging and debugging.
     *
     * @param content byte array
     * @return JSON string
     */
    String toJsonString(byte[] content);

    /**
     * Extract the nested content pointed by the json pointer.
     * Used for extracting nested user data.
     *
     * @param content     byte array
     * @param jsonPointer location of data to be extracted
     * @return byte array
     */
    byte[] extract(byte[] content, String jsonPointer);

    /**
     * Deserializes the content and binds it to the target data type.
     * For data type {@link ContentType#JSON}, the byte array is the JSON string encoded using the UTF-8 charset.
     *
     * @param content byte array to deserialize
     * @param type    target data type
     * @return deserialized object
     */
     T deserialize(byte[] content, Type type);

    /**
     * Deserializes the parsed json node and binds it to the target data type.
     *
     * @param node  parsed json node
     * @param clazz class of target data type
     * @return deserialized object
     */
    default  T deserialize(JsonNode node, Class clazz) {
        return deserialize(node, (Type) clazz);
    }

    /**
     * Deserializes the parsed json node and binds it to the target data type.
     *
     * @param node parsed json node
     * @param type target data type
     * @return deserialized object
     */
     T deserialize(JsonNode node, Type type);

    /**
     * Parses the content.
     *
     * @param content VPack or byte encoded JSON string
     * @return root of the parsed tree
     */
    JsonNode parse(byte[] content);

    /**
     * Parses the content at json pointer.
     *
     * @param content     VPack or byte encoded JSON string
     * @param jsonPointer location of data to be parsed
     * @return root of the parsed tree
     */
    JsonNode parse(byte[] content, String jsonPointer);

    /**
     * Deserializes the content at json pointer and binds it to the target data type.
     * For data type {@link ContentType#JSON}, the byte array is the JSON string encoded using the UTF-8 charset.
     *
     * @param content     byte array to deserialize
     * @param jsonPointer location of data to be deserialized
     * @param clazz       class of target data type
     * @return deserialized object
     */
    default  T deserialize(byte[] content, String jsonPointer, Class clazz) {
        return deserialize(content, jsonPointer, (Type) clazz);
    }

    /**
     * Deserializes the content at json pointer and binds it to the target data type.
     * For data type {@link ContentType#JSON}, the byte array is the JSON string encoded using the UTF-8 charset.
     *
     * @param content     byte array to deserialize
     * @param jsonPointer location of data to be deserialized
     * @param type        target data type
     * @return deserialized object
     */
    default  T deserialize(byte[] content, String jsonPointer, Type type) {
        return deserialize(parse(content, jsonPointer), type);
    }

    /**
     * Serializes the object into the target data type, using the user serde.
     *
     * @param value object to serialize
     * @return serialized byte array
     */
    byte[] serializeUserData(Object value);

    /**
     * Serializes each element in the collection using the user serde.
     *
     * @param value objects to serialize
     * @return serialized byte array
     */
    byte[] serializeCollectionUserData(Collection value);

    /**
     * Deserializes the content and binds it to the target data type, using the user serde.
     *
     * @param content byte array to deserialize
     * @param clazz   class of target data type
     * @return deserialized object
     */
     T deserializeUserData(byte[] content, Class clazz);

    /**
     * Deserializes the content and binds it to the target data type, using the user serde.
     *
     * @param content byte array to deserialize
     * @param type    target data type
     * @return deserialized object
     */
     T deserializeUserData(byte[] content, Type type);

    /**
     * Deserializes the parsed json node and binds it to the target data type, using the user serde.
     *
     * @param node  parsed json node
     * @param clazz class of target data type
     * @return deserialized object
     */
    default  T deserializeUserData(JsonNode node, Class clazz) {
        return deserializeUserData(node, (Type) clazz);
    }

    /**
     * Deserializes the parsed json node and binds it to the target data type, using the user serde.
     *
     * @param node parsed json node
     * @param type target data type
     * @return deserialized object
     */
     T deserializeUserData(JsonNode node, Type type);

    /**
     * @return the user serde
     */
    ArangoSerde getUserSerde();
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy