namespace Amazon.Lambda.Core
{
    using System.IO;
    /// 
    /// Interface that must be implemented by custom serializers that
    /// may need to be called during execution.
    /// 
    public interface ILambdaSerializer
    {
        /// 
        /// This method is called to deserialize the request payload from Invoke API
        /// into the object that is passed to the Lambda function handler.
        /// 
        /// Type of object to deserialize to.
        /// Stream to serialize.
        /// Deserialized object from stream.
        T Deserialize(Stream requestStream);
        /// 
        /// This method is called to serialize the result returned from 
        /// a Lambda function handler into the response payload
        /// that is returned by the Invoke API.
        /// 
        /// Type of object to serialize.
        /// Object to serialize.
        /// Output stream.
        void Serialize(T response, Stream responseStream);
    }
}