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

se.l4.commons.serialization.SerializerCollection Maven / Gradle / Ivy

package se.l4.commons.serialization;

import java.lang.annotation.Annotation;

import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import se.l4.commons.serialization.spi.SerializerResolver;
import se.l4.commons.serialization.spi.Type;
import se.l4.commons.types.InstanceFactory;


/**
 * Collection of {@link Serializer}s and {@link SerializerResolver resolvers}.
 *
 * @author Andreas Holstenson
 *
 */
public interface SerializerCollection
{
	/**
	 * Get the current instance factory.
	 *
	 * @return
	 */
	@NonNull
	InstanceFactory getInstanceFactory();

	/**
	 * Bind a certain type automatically discovering which serializer to
	 * use.
	 *
	 * @param type
	 */
	@NonNull
	SerializerCollection bind(@NonNull Class type);

	/**
	 * Bind a given type to the specified serializer.
	 *
	 * @param 
	 * @param type
	 * @param serializer
	 */
	@NonNull
	 SerializerCollection bind(@NonNull Class type, @NonNull Serializer serializer);

	/**
	 * Bind a given type to the specified resolver. The resolver will be
	 * asked to resolve a more specific serializer based on type parameters.
	 *
	 * @param 
	 * @param type
	 * @param resolver
	 */
	@NonNull
	 SerializerCollection bind(@NonNull Class type, @NonNull SerializerResolver resolver);

	/**
	 * Find a serializer suitable for the specific type.
	 *
	 * @param 
	 * @param type
	 * @return
	 */
	@NonNull
	 Serializer find(@NonNull Class type);

	/**
	 * Find a serializer suitable for the specific type.
	 *
	 * @param 
	 * @param type
	 * @return
	 */
	@NonNull
	 Serializer find(@NonNull Class type, @NonNull Annotation... hints);

	/**
	 * Find a serializer suitable for the specified type.
	 *
	 * @param type
	 * @return
	 */
	@NonNull
	Serializer find(@NonNull Type type);

	/**
	 * Find a serializer suitable for the specified type.
	 *
	 * @param type
	 * @return
	 */
	@NonNull
	Serializer find(@NonNull Type type, @NonNull Annotation... hints);

	/**
	 * Find a serializer based on its registered name.
	 *
	 * @param name
	 * @return
	 */
	@NonNull
	Serializer find(String name);

	/**
	 * Find a serializer based on its registered name.
	 *
	 * @param namespace
	 * @param name
	 * @return
	 */
	@NonNull
	Serializer find(@NonNull String namespace, @NonNull String name);

	/**
	 * Find a serializer using a specific {@link SerializerResolver}.
	 *
	 * @param resolver
	 * @param type
	 * @return
	 */
	@NonNull
	 Serializer findVia(
		@NonNull Class> resolver,
		@NonNull Class type,
		@NonNull Annotation... hints
	);

	/**
	 * Find a serializer using a specific {@link SerializerResolver}.
	 *
	 * @param sOrR
	 * @param type
	 * @return
	 */
	@NonNull
	 Serializer findVia(
		@NonNull Class> resolver,
		@NonNull Type type,
		@NonNull  Annotation... hints
	);

	/**
	 * Get the resolver this collection would use to resolve a serializer
	 * for the given type.
	 *
	 * @param type
	 * @return
	 */
	@NonNull
	SerializerResolver getResolver(@NonNull Class type);

	/**
	 * Get if the given type can be serialized.
	 *
	 * @param type
	 * @return
	 */
	boolean isSupported(@NonNull Class type);

	/**
	 * Find the name of the given serializer (if any).
	 *
	 * @param serializer
	 * @return
	 */
	@Nullable
	QualifiedName findName(@NonNull Serializer serializer);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy