#ifndef seafire__representation__representation_hxx_ #define seafire__representation__representation_hxx_ #include #include #include #include #include #include #include #include #include #include #include #include namespace seafire::representation { class representation_t { public: template representation_t(R r); protocol::media_type_t type() const; std::optional etag() const; std::optional last_modified() const; protocol::media_type_t write_to(std::ostream& o) const; private: struct concept_t; template struct container_t; std::shared_ptr r_; }; struct representation_t::concept_t { virtual ~concept_t(); virtual protocol::media_type_t type() const = 0; virtual std::optional etag() const = 0; virtual std::optional last_modified() const = 0; virtual void write_to(std::ostream& o) const = 0; }; template struct representation_t::container_t : representation_t::concept_t { using representation_type = R; using representation_traits = traits::representation_traits; container_t(representation_type r); protocol::media_type_t type() const override; std::optional etag() const override; std::optional last_modified() const override; void write_to(std::ostream& o) const override; representation_type r; }; } // namespace seafire::representation #include #endif