#pragma once #include namespace utils { struct Snowflake { union { struct { std::uint64_t timestamp : 42; std::uint64_t instance : 10; std::uint64_t sequence : 12; }; std::uint64_t snowflake; }; bool operator==(const Snowflake& other) const { return snowflake == other.snowflake; } std::vector Serialize() { std::vector serialized(8); ::memcpy(serialized.data(), &snowflake, 8); return serialized; } }; Snowflake GenerateID(std::uint8_t instance); } // namespace Chattr namespace std { template <> struct hash { std::size_t operator()(const utils::Snowflake& k) const { return std::hash{}(k.snowflake); } }; } // namespace std