AvroSerialize.hh 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * https://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. #ifndef avro_AvroSerialize_hh__
  19. #define avro_AvroSerialize_hh__
  20. #include "AvroTraits.hh"
  21. #include "Config.hh"
  22. /// \file
  23. ///
  24. /// Standalone serialize functions for Avro types.
  25. namespace avro {
  26. /// The main serializer entry point function. Takes a serializer (either validating or
  27. /// plain) and the object that should be serialized.
  28. template<typename Writer, typename T>
  29. void serialize(Writer &s, const T &val) {
  30. serialize(s, val, is_serializable<T>());
  31. }
  32. /// Type trait should be set to is_serializable in otherwise force the compiler to complain.
  33. template<typename Writer, typename T>
  34. void serialize(Writer &s, const T &val, const std::false_type &) {
  35. static_assert(sizeof(T) == 0, "Not a valid type to serialize");
  36. }
  37. /// The remainder of the file includes default implementations for serializable types.
  38. // @{
  39. template<typename Writer, typename T>
  40. void serialize(Writer &s, T val, const std::true_type &) {
  41. s.writeValue(val);
  42. }
  43. template<typename Writer>
  44. void serialize(Writer &s, const std::vector<uint8_t> &val, const std::true_type &) {
  45. s.writeBytes(val.data(), val.size());
  46. }
  47. // @}
  48. } // namespace avro
  49. #endif