diff options
Diffstat (limited to 'src/zencore/uid.cpp')
| -rw-r--r-- | src/zencore/uid.cpp | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/zencore/uid.cpp b/src/zencore/uid.cpp index 8ef660c7a..d7636f2ad 100644 --- a/src/zencore/uid.cpp +++ b/src/zencore/uid.cpp @@ -102,12 +102,22 @@ Oid::TryFromHexString(const std::string_view String, const Oid& Default) } } -Oid -Oid::FromMemory(const void* Ptr) +bool +Oid::TryParse(std::string_view Str, Oid& Id) { - Oid Id; - memcpy(Id.OidBits, Ptr, sizeof Id); - return Id; + using namespace std::literals; + + if (Str.size() == Oid::StringLength) + { + return ParseHexBytes(Str.data(), Str.size(), reinterpret_cast<uint8_t*>(Id.OidBits)); + } + + if (Str.starts_with("0x"sv)) + { + return TryParse(Str.substr(2), Id); + } + + return false; } void @@ -136,6 +146,14 @@ Oid::ToString(StringBuilderBase& OutString) const return OutString; } +Oid +Oid::FromMemory(const void* Ptr) +{ + Oid Id; + memcpy(Id.OidBits, Ptr, sizeof Id); + return Id; +} + #if ZEN_WITH_TESTS TEST_CASE("Oid") |