#ifndef REPLICATOR_SERIALIZABLE_H #define REPLICATOR_SERIALIZABLE_H #include #include #include #include #include namespace replicator { class SerializableValue { private: boost::any value; public: template inline SerializableValue& operator= (const T& value_) { value = boost::any(value_); return *this; } template inline SerializableValue& operator= (T&& value_) { value = boost::any(std::forward(value_)); return *this; } inline SerializableValue& operator= (const boost::any& value_) { value = value_; return *this; } inline SerializableValue& operator= (boost::any&& value_) { value = std::forward(value_); return *this; } template inline bool is() const { return value.type() == typeid(T); } template inline T as() const { return boost::any_cast(value); } std::string to_string() const { std::ostringstream s; if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } else if (is()) { s << as(); } return s.str(); } }; struct SerializableBinlogEvent { std::string binlog_name; unsigned long binlog_pos; // unsigned long seconds_behind_master; // unsigned long unix_timestamp; std::string database; std::string table; std::string event; std::map row; }; typedef std::unique_ptr SerializableBinlogEventPtr; } // replicator #endif // REPLICATOR_SERIALIZABLE_H