/// <summary>
        /// Decode string
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="codec"></param>
        /// <param name="contentType"></param>
        /// <param name="input"></param>
        /// <param name="reader"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public static T Decode <T>(this ITypeSerializer codec,
                                   string contentType, string input, Func <IDecoder, T> reader, Encoding encoding)
        {
            if (string.IsNullOrEmpty(input))
            {
                throw new ArgumentNullException(nameof(input));
            }
            var buffer = (encoding ?? Encoding.UTF8).GetBytes(input);

            return(codec.Decode(contentType, buffer, reader));
        }