Skip to content

Commit 0e33676

Browse files
authored
Add guid brace parsing (#1109)
1 parent 0c8f4e1 commit 0e33676

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

strings/base_types.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,15 @@ WINRT_EXPORT namespace winrt
8585
private:
8686

8787
template <typename TStringView>
88-
static constexpr guid parse(TStringView const value)
88+
static constexpr guid parse(TStringView value)
8989
{
90+
// Handle {} and ()
91+
if (value.size() == 38 && ((value[0] == '{' && value[37] == '}') || (value[0] == '(' && value[37] == ')')))
92+
{
93+
value.remove_prefix(1);
94+
value.remove_suffix(1);
95+
}
96+
9097
if (value.size() != 36 || value[8] != '-' || value[13] != '-' || value[18] != '-' || value[23] != '-')
9198
{
9299
throw std::invalid_argument("value is not a valid GUID string");

test/test/guid.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ TEST_CASE("guid")
2121

2222
REQUIRE(winrt::guid("00112233-4455-6677-8899-aabbccddeeff") == expected);
2323
REQUIRE(winrt::guid({ "{00112233-4455-6677-8899-aabbccddeeff}" + 1, 36 }) == expected);
24+
REQUIRE(winrt::guid("{00112233-4455-6677-8899-aabbccddeeff}") == expected);
25+
REQUIRE(winrt::guid("(00112233-4455-6677-8899-aabbccddeeff)") == expected);
2426

2527
REQUIRE_THROWS_AS(winrt::guid(""), std::invalid_argument);
2628
REQUIRE_THROWS_AS(winrt::guid("not a guid"), std::invalid_argument);
2729
REQUIRE_THROWS_AS(winrt::guid("same length string that's not a guid"), std::invalid_argument);
2830
REQUIRE_THROWS_AS(winrt::guid("too long string that's also not a guid"), std::invalid_argument);
2931
REQUIRE_THROWS_AS(winrt::guid("00112233-4455-6677-8899-aabbccddeeff with extra"), std::invalid_argument);
3032
REQUIRE_THROWS_AS(winrt::guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"), std::invalid_argument);
31-
REQUIRE_THROWS_AS(winrt::guid("{00112233-4455-6677-8899-aabbccddeeff}"), std::invalid_argument);
3233

3334
// Verify that you can constexpr-construct a guid from a GUID.
3435
constexpr winrt::guid from_abi_guid = GUID{ 0x00112233, 0x4455, 0x6677, { 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff } };

0 commit comments

Comments
 (0)