MCPcopy Create free account
hub / github.com/carllerche/assert-struct / parse_map_entries

Function parse_map_entries

assert-struct-macros/src/pattern/map.rs:50–90  ·  view source on GitHub ↗

Parse map entries: comma-separated key-value pairs with optional rest pattern Supports syntax like: "key1": pattern1, "key2": pattern2, ..

(
    input: syn::parse::ParseStream,
)

Source from the content-addressed store, hash-verified

48/// Parse map entries: comma-separated key-value pairs with optional rest pattern
49/// Supports syntax like: "key1": pattern1, "key2": pattern2, ..
50fn parse_map_entries(
51 input: syn::parse::ParseStream,
52) -> syn::Result<(Vec<(syn::Expr, Pattern)>, bool)> {
53 let mut entries = Vec::new();
54 let mut rest = false;
55
56 while !input.is_empty() {
57 // Check for rest pattern (..) which allows partial matching
58 if input.peek(Token![..]) {
59 let _: Token![..] = input.parse()?;
60 rest = true;
61 break;
62 }
63
64 // Parse key expression
65 let key: syn::Expr = input.parse()?;
66
67 // Expect colon separator
68 let _: Token![:] = input.parse()?;
69
70 // Parse value pattern
71 let value = input.parse()?;
72
73 entries.push((key, value));
74
75 if input.is_empty() {
76 break;
77 }
78
79 let _: Token![,] = input.parse()?;
80
81 // Rest pattern can appear after a comma
82 if input.peek(Token![..]) {
83 let _: Token![..] = input.parse()?;
84 rest = true;
85 break;
86 }
87 }
88
89 Ok((entries, rest))
90}

Callers 1

parseMethod · 0.85

Calls 3

is_emptyMethod · 0.80
pushMethod · 0.80
parseMethod · 0.45

Tested by

no test coverage detected