
package org.jadira.bindings.core.api;

/**
 * Interface for explicitly defining conversions to a target object from a specific
 * object type (marshalling).
 * <br>
 * Implementations of this class should be idempotent (behaviour should not vary
 * between calls) and thread-safe. 
 * <br>
 * S refers to the bound type for the conversion <br>
 * T refers to the target type
 */
public interface ToMarshaller<S, T> {

    /**
     * Converts to the given object from the specified object
     * @param object Object to transform, not null
     * @return S converted to T
     */
    T marshal(S object);
    
    /**
     * Obtain the bound class
     * @return Class
     */
    Class<S> getBoundClass();
    
    /**
     * Obtain the bound class
     * @return Class
     */
    Class<T> getTargetClass();
}
