/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
/**
 * Abstracts a minimal subset of Kryo types and methods.
 * <p>
 * Kryo is often shaded.  For instance, TinkerPop's Gryo
 * serializer relies on a shaded Kryo package.
 * TinkerPop serializers written against a particular shaded
 * Kryo package (or an unshaded Kryo package) are compatible
 * only with that package.  In contrast, TinkerPop serializers written
 * against this abstraction can be used with any shaded or
 * unshaded Kryo package, so long as the signatures and behavior
 * of the methods in this package remain stable.
 * <p>
 * To show how this is useful, consider
 * {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraphSerializer}.
 * This class has logic unique to TinkerPop that performs
 * efficient and forward-compatible serialization of
 * {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraph}
 * instances.  It takes advantage of package-level visibility
 * and the fact that it shares a package with its target,
 * so it would be challenging to cleanly and naturally replicate
 * (i.e. without package spoofing or runtime visibility overrides).
 * By implementing
 * {@link org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim}
 * instead of, say, Gryo's shaded
 * {@link org.apache.tinkerpop.shaded.kryo.Serializer},
 * such a serializer can be used with anybody's Kryo package,
 * regardless of whether
 * that package is shaded or not.  This lets third-parties reuse
 * TinkerPop's efficient, internals-aware StarGraph serializer on
 * their own serialization platform (and without altering
 * TinkerPop's bytecode, let alone its source).
 * <p>
 * The number of types and methods in this
 * package is deliberately small to reduce the likelihood of a
 * new Kryo release introducing an incompatible change.
 */
package org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim;