uuid icon indicating copy to clipboard operation
uuid copied to clipboard

uuid!() macro can't handle a constant &str passed in

Open alexipeck opened this issue 1 year ago • 2 comments

const TEST: &str = "00000000-0000-0000-0000-000000000000";
let uid: Uuid = uuid::uuid!(TEST);

no rules expected the token TEST no rules expected this token in macro call macros.rs(16, 14): while trying to match meta-variable $uuid:literal

alexipeck avatar May 19 '24 23:05 alexipeck

I realise now that this has been documented, is there a reason this marco can't support this use case?

Tokens that aren't string literals are also rejected: let uuid_str: &str = "550e8400e29b41d4a716446655440000"; let uuid = uuid!(uuid_str); Provides the following compilation error:

error: expected string literal | | let uuid = uuid!(uuid_str); | ^^^^^^^^

alexipeck avatar May 21 '24 01:05 alexipeck

Hi @alexipeck 👋 The problem here is just that we can’t get the actual value of the string at compile time in order to parse it in the macro if it’s not a string literal.

I do think this can still be implemented now though since we have a const parser for UUIDs available to us. It’s just a limitation of the current macro that needs to be lifted.

KodrAus avatar May 22 '24 08:05 KodrAus