#pragma once #include #include #include #include #include #include #include #include namespace erebos { using std::optional; using std::shared_ptr; using std::string; using std::vector; class Contact { public: Contact(const Contact &) = default; Contact(Contact &&) = default; Contact & operator=(const Contact &) = default; Contact & operator=(Contact &&) = default; static List prepend(const Storage &, Identity, List); Identity identity() const; optional name() const; bool operator==(const Contact &) const; bool operator!=(const Contact &) const; static List loadList(const vector &); vector refs() const; private: struct Priv; shared_ptr p; Contact(shared_ptr p): p(p) {} }; DECLARE_SHARED_TYPE(List) }