## Struct template deserializer

zeep::json::deserializer

## Synopsis

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

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

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

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

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

        // public static functions
        static void deserialize(T &, element_type &);
      };
      template<typename T>
      struct deserializer_impl<T, std::enable_if_t< has_serialize_v< T, deserializer > >> {

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

        // public static functions
        static void deserialize(T &, const element_type &);
      };
      template<typename T>
      struct deserializer_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 deserialize(T &, const element_type &);
      };

      // construct/copy/destruct
      deserializer(const element_type &);

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

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

      // public data members
      const element_type & m_elem;
    };

## Description

### `deserializer` public construct/copy/destruct

1.     deserializer(const element_type & elem);

### `deserializer` public member functions

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

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

### `deserializer` public static functions

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