uuid-rs / uuid

Generate and parse UUIDs.

Home Page:https://www.crates.io/crates/uuid

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

alexipeck opened this issue · 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

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);
| ^^^^^^^^

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.