10 struct adl_serializer<
tl::optional<T>> {
53 struct Encoding<
tl::optional<T>> : EncodingIO<tl::optional<T>> {
56 static constexpr EncodingByte
Prefix(
const Type& value) {
57 return value ? Encoding<T>::Prefix(*value) : EncodingByte::Empty;
60 static constexpr std::size_t
Size(
const Type& value) {
61 return value ? Encoding<T>::Size(*value) : BaseEncodingSize(EncodingByte::Empty);
64 static constexpr
bool Match(EncodingByte prefix) {
65 return prefix == EncodingByte::Empty || Encoding<T>::Match(prefix);
68 template <
typename Writer>
69 static constexpr Status<void>
WritePayload(EncodingByte prefix,
const Type& value, Writer* writer) {
71 return Encoding<T>::WritePayload(prefix, *value, writer);
77 template <
typename Reader>
78 static constexpr Status<void>
ReadPayload(EncodingByte prefix,
Type* value, Reader* reader) {
79 if(prefix == EncodingByte::Empty) {
83 auto status = Encoding<T>::ReadPayload(prefix, &temp, reader);
86 *value = std::move(temp);