func serializeOption<T, S: Serializer>(
value: T?,
serializer: S,
serializeElement: (T, S) throws -> Void
) throws {
if let value = value {
try serializer.serialize_option_tag(value: true)
try serializeElement(value, serializer)
} else {
try serializer.serialize_option_tag(value: false)
}
}
func deserializeOption<T, D: Deserializer>(
deserializer: D,
deserializeElement: (D) throws -> T
) throws -> T? {
let tag = try deserializer.deserialize_option_tag()
if tag {
return try deserializeElement(deserializer)
} else {
return nil
}
}