#pragma once #include namespace erebos { class Identity { public: static std::optional load(const Ref &); static std::optional load(const std::vector &); std::optional name() const; std::optional owner() const; private: struct Priv; const std::shared_ptr p; Identity(const Priv * p): p(p) {} Identity(std::shared_ptr && p): p(std::move(p)) {} }; }