package com.fasterxml.jackson.databind.util;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.type.TypeFactory;
/**
* Helper interface for things that convert Objects of
* one type to another.
*<p>
* NOTE: implementors are strongly encouraged to extend {@link StdConverter}
* instead of directly implementing {@link Converter}, since that can
* help with default implementation of typically boiler-plate code.
*
* @param <IN> Type of values converter takes
* @param <OUT> Result type from conversion
*
* @see com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer
* @see com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer
*
* @since 2.1
*/
public interface Converter<IN,OUT>
{
/**
* Main conversion method.
*/
public OUT convert(IN value);
/**
* Method that can be used to find out actual input (source) type; this
* usually can be determined from type parameters, but may need
* to be implemented differently from programmatically defined
* converters (which can not change static type parameter bindings).
*
* @since 2.2
*/
public JavaType getInputType(TypeFactory typeFactory);
/**
* Method that can be used to find out actual output (target) type; this
* usually can be determined from type parameters, but may need
* to be implemented differently from programmatically defined
* converters (which can not change static type parameter bindings).
*
* @since 2.2
*/
public JavaType getOutputType(TypeFactory typeFactory);
/*
/**********************************************************
/* Helper class(es)
/**********************************************************
*/
/**
* This marker class is only to be used with annotations, to
* indicate that <b>no converter is to be used</b>.
*<p>
* Specifically, this class is to be used as the marker for
* annotation {@link com.fasterxml.jackson.databind.annotation.JsonSerialize},
* property <code>converter</code> (and related)
*
* @since 2.2
*/
public abstract static class None
implements Converter<Object,Object> { }
}