Decoders allow decoding spans of characters or directly from an input stream.
#include <concepts.hpp>
template<typename T>
concept Decoder =
requires(
const T& decoder,
std::istream& input_stream,
std::span<char> characters) {
{ decoder.decode(characters) } -> std::convertible_to<std::size_t>;
{ decoder.decode_from(input_stream, std::size_t{}) } -> std::same_as<Serialization>;
}