## Struct template serializer

zeep::json::serializer

## Synopsis

    // In header: <zeep/json/serializer.hpp>

    template<typename E>
    struct serializer {
      // types
      typedef E element_type;

      // member classes/structs/unions
      template<typename T, typename  = void>
      struct serializer_impl {
      };
      template<typename T>
      struct serializer_impl<T, std::enable_if_t< detail::is_compatible_type_v< T > and not is_serializable_array_type_v< T, serializer > and not json::detail::is_serializable_map_type_v< T, serializer > >> {

        // public static functions
        static void serialize(const T &, element_type &);
      };
      template<typename T>
      struct serializer_impl<T, std::enable_if_t< detail::is_serializable_map_type_v< T, serializer > >> {

        // public static functions
        static void serialize(const T &, element_type &);
      };
      template<typename T>
      struct serializer_impl<T, std::enable_if_t< detail::is_serializable_optional_type_v< T, serializer > >> {

        // public static functions
        static void serialize(const T &, element_type &);
      };
      template<typename T>
      struct serializer_impl<T, std::enable_if_t< has_serialize_v< T, serializer > >> {

        // public static functions
        static void serialize(const T &, element_type &);
      };
      template<typename T>
      struct serializer_impl<T, std::enable_if_t< is_serializable_array_type_v< T, serializer > >> {

        // public static functions
        static void serialize(const T &, element_type &);
      };
      template<typename T>
      struct serializer_impl<T, std::enable_if_t< not detail::is_compatible_type_v< T > and is_type_with_value_serializer_v< T > >> {
        // types
        typedef zeep::value_serializer< T > value_serializer;

        // public static functions
        static void serialize(const T &, element_type &);
      };

      // construct/copy/destruct
      serializer();

      // public member functions
      template<typename T> serializer & operator&(name_value_pair< T > &&);
      template<typename T> void serialize(const char *, const T &);

      // public static functions
      template<typename T> static void serialize(E &, const T &);

      // public data members
      element_type m_elem;
    };

## Description

### `serializer` public construct/copy/destruct

1.     serializer();

### `serializer` public member functions

1.     template<typename T> serializer & operator&(name_value_pair< T > && nvp);

2.     template<typename T> void serialize(const char * name, const T & data);

### `serializer` public static functions

1.     template<typename T> static void serialize(E & e, const T & v);