41class UuidIdentifiableObject :
public UuidIdentifiableBase
48 : type_safe::strong_typedef<Uuid, QUuid>,
49 type_safe::strong_typedef_op::equality_comparison<Uuid>,
50 type_safe::strong_typedef_op::relational_comparison<Uuid>
53 using type_safe::strong_typedef<Uuid, QUuid>::strong_typedef;
55 explicit Uuid () =
default;
64 bool is_null ()
const {
return type_safe::get (*this).isNull (); }
66 void set_null () { type_safe::get (*
this) = QUuid (); }
69 friend std::size_t hash_value (
const Uuid &p) {
return p.hash (); }
71 std::size_t hash ()
const {
return qHash (type_safe::get (*
this)); }
73 static_assert (std::regular<Uuid>);
74 static_assert (
sizeof (
Uuid) ==
sizeof (QUuid));
76 explicit UuidIdentifiableObject (QObject * parent =
nullptr)
77 : UuidIdentifiableBase (QUuid::createUuid (), parent)
80 UuidIdentifiableObject (
const Uuid &
id, QObject * parent =
nullptr)
81 : UuidIdentifiableBase (type_safe::get (id), parent)
85 Q_DISABLE_COPY_MOVE (UuidIdentifiableObject)
86 ~UuidIdentifiableObject ()
override =
default;
88 auto get_uuid ()
const {
return Uuid (raw_uuid ()); }
90 friend void init_from (
91 UuidIdentifiableObject &obj,
92 const UuidIdentifiableObject &other,
97 obj.set_raw_uuid (QUuid::createUuid ());
101 obj.set_raw_uuid (other.raw_uuid ());
105 friend void to_json (nlohmann::json &j,
const UuidIdentifiableObject &obj)
107 to_json (j,
static_cast<const UuidIdentifiableBase &
> (obj));
109 friend void from_json (
const nlohmann::json &j, UuidIdentifiableObject &obj)
111 from_json (j,
static_cast<UuidIdentifiableBase &
> (obj));
114 friend bool operator== (
115 const UuidIdentifiableObject &lhs,
116 const UuidIdentifiableObject &rhs)
118 return static_cast<const UuidIdentifiableBase &
> (lhs)
119 ==
static_cast<const UuidIdentifiableBase &
> (rhs);
122 BOOST_DESCRIBE_CLASS (UuidIdentifiableObject, (UuidIdentifiableBase), (), (), ())
166struct fmt::formatter<T> : fmt::formatter<std::string_view>
168 template <
typename FormatContext>
169 auto format (
const T &uuid, FormatContext &ctx)
const
171 return fmt::formatter<std::string_view>{}.format (
172 type_safe::get (uuid).toString (QUuid::WithoutBraces).toUtf8 (), ctx);