Files
boc/aamos-ledger-rust/target/debug/deps/libmatchit-fc12e7a0f7496770.rmeta
T

271 lines
86 KiB
Plaintext
Raw Normal View History

rust
dW#rustc 1.96.0 (ac68faa20 2026-05-25)ÁÀ뉊]!ÜÛê(¹Þ—šên-5be7b69c3ff7b5b8ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁ¤²XctÔ'ÐÓ©z¨ɽÓ-a4945860e1c53b00Á¤°ð ¾ä-±($²ï=©Ã-7e98a21bfd32b0edÁòÖÀH•‘PIÓHã#£-055f30b747f859b6Árustc_std_workspace_coreÁ­Cçß^ò½èÝ$­Çÿ+Cé-c4878ee60b2242c9ÁŸÃï+Ñ]ŠqB<ÏïW#-8dd1dd90e70d0b6aÁ miniz_oxideÁ€š»J(P>àö÷g\K-1eb618da2918ab7fÁadler2ÁÆ;+Þ®5¥Ìýݰ¦ÛLˆ-f7919172d268e069Á hashbrownÁPäV9ÒÆèÜ"ÊÖVŽ\-0fc2184a5da6723aÁrustc_std_workspace_allocÁs&ØòØy¯s•bæ!‰ýŠ-97e4bf30be240674Á
std_detectÁhŠBîÙºÌI®ËÅš-9dbbf8346ba7ac8bÁrustc_demangleÁûë9´Ç×@Œ’ùXFº-f33013f239bf9f14Ácfg_ifÁÜLhž§Œaã¯>­-0a71c8f33a838301Á addr2lineÁ׎Þ!]8V$É@@-e618e6be60e87ba2ÁgimliÁ¸
°µ~Î1‹Ñt ðÁ€w-1f7768a68858f670ÁobjectÁ
áPÃ?­À¶¼QHJ¥-914cd6a4dbe590d1ÁmemchrÁ›º«8Ór­2Ù $¨ûib-cf21ca6f2bb15dcdÁë
‹ás«LÖ€îâƒ×ɯŒ-ee6f3747e38367f0ÁtestsÁ,ð.$å.c Î$‚Î test_readmeÁ\ÄÝÀerrorÁ× conflictÁ ¥unsureÁ×paramsÁ'kÁ'vÁkey_strÁ value_strÁSMALLÁ¡ ª æ truncateÁgetÁ#impl AsRef<str>Á# # ùis_emptyÁpushÁ) drain_to_vecÁ*¥* for_each_key_mutÁ-impl Fn((usize, &mut &'k [u8]))Á- - 
ParamsIterÁ1'psÁ1¡ 1ª 16É 6¡ 6ª 6æ ParamsIterKindÁ;É ;¡ ;ª ;©?
;SmallÁA
Aˆ;LargeÁD
DˆGÉ G¡ Gª GGó L L routerÁOOOOOOU¥U>OX¥Xæ XinsertÁ[impl Into<String>ÁXatÁ]'mÁ]'pÁXat_mutÁ`Œ`treeÁccccccccNodeÁk¥kpriorityÁk
wild_childÁkindicesÁk»kparam_remappingÁk node_typeÁkprefixÁkchildrenÁcu¥cw¥cy¥yÞ
{ë
{ y add_childÁyupdate_child_priorityÁy insert_childÁcSkippedÁ'nÁ¥õ
nodeÁcˆ¥ˆƒŠêŠŠ Š Š Š Š Š cParamRemappingÁcnormalize_paramsÁcdenormalize_paramsÁc
find_wildcardÁc¥ƒ c¥>  InsertErrorÁ§ConflictÁ¨withÁ§
TooManyParamsÁª
§ UnnamedParamÁ¬
§InvalidCatchAllÁ®
°ƒ²×´Ö §·ù
¹  ¼
¾ï

MatchErrorÁÀMissingTrailingSlashÁÁ
ÀExtraTrailingSlashÁÃ
ÀNotFoundÁÅ
Ç×ÊÌÖσParamÁÒ¡ Òª ÒkeyÁһס ת ××Û¡ Ûª Þ¡ Þª Þ⡠⪠âÖæ¡ æª æ ê¡ êª êï

î¡ îª î> ò¡ òª  õ¡ õª 
ø¡ øª øƒParamsÁü¡ üª ü¡ ª ס ª ¡ ª ¡ ª Ö¡ ª ¡ ª ï
¡ ª ƒ
ParamsKindÁ¡ ª ©ž
½  
 ˆ¢  Ô ¥
¥ˆ¨¡ ¨ª ¨×¬¡ ¬ª ¯¡ ¯ª ¯³¡ ³ª ³Ö ¸¡ ¸ª ¸¼¡ ¼ª ¼ï
À¡ Àª ÀƒORouterÁÄ¥ÄrootÁOǥǃOMatchÁÊ¡ ʪ ʧʻÊOС Ъ ЧÐ×cNodeTypeÁÕRootÁÖ
ÕØ
ÕCatchAllÁÚ
ÕStaticÁÜ
ccßcáÖc ãï
c
åc ç×c éƒc backtrackerÁŠ
try_backtrackÁ











!
"
#
'
(
)
*
-
-
L
[
{
~








±
³
³
³
µ
·
·
º
º
½
½
¿
¿
È
È
È
Ë
Ë
Í
Ð
Ú
Ú
Ú
á
á
å
é
é
í
í
û
ƒ
ƒ
ƒ
Š
Š
Ž




š
«
«
«
²
²

»
»
¿
¿
Ã
É
Ô
Ô
Ô
à
à
â
ä
ä
æ
æ
è
è
è
ê
ا¨©­ª«¹¬­Ó®¯ìÓÍ?ØlýþŒ¿có#ó#šeó#ºó#Ðìó#µßó#ó#íßó#ó#Äcó#¾ó#¿cÀÁÂùÃÄšÅÆ¹üS[Y$Ðì¸%µß¸%¸%¸%Û¸%ظ%Š ¸%Äc¸%¾¸%¿cÒÒÕ¦Ö»nKMü™´W¡ ª ÐìÚ&µßÚ&Ú&Ú&ºÚ&íßÚ&Ú&³Ú&Š Ú&ÛÚ&ØÚ&¿cüü·ÿh6©ÖãX¡ ª Ðìˆ(µßˆ(ˆ(ˆ(ºˆ(í߈(ˆ(؈(¿cžŸ© ¡½ ¢ˆ¤¥¦Ô §ˆbíÒÊ x¡ ª Ðì)µß)))º)íß))Ø)ùM11¸ 5Ù¥ð²ÞqHïÉ ¡ ª ØÄľÆÔO;Sºgü¥³+¿cÊÊóλσG³Á3±Ó¡ ª §ÐìÕÖ×ÛØÙÚÛùÜÝŽ€êsyC{¡èµß¡,¡,¡,íß¡,¡,º¡,¿c¡,Ø¡,Ììkkàmòcncocp»cq§r½sÍtÚáæ¦RͲ
¼+ Ã-ØÃ-³Ã-°§ÏÀøÒüÀÇÄéÕ§ÇÀ×Òü¨ÐÊçÕ´§ÌÀâÒü³áÕ§¹§æÒü¸åÕ»§ÉÀÛÒü¬ÞÕ¼§ÊÀÞÒü¯ßÕ¾§êÒü¼ãÕ§À
§ÀÎÀõÒÑÀòÒîÒUÄkG1ukwkØ¿c71še*ºÐì#µß*íß*Äc#¾ Û Š ³ùMÌì ¿2SMALLÁ¿2SMALLÁ¿2SMALLÁ ¡,žŸ© ¡½ ¢ˆ¤¥¦Ô §ˆbíÒÊ xŸÒÒÕ¦Ö»nKMü™´W¿2í¿2ôû ¦)Æ34ªBªBö­BbufÁ÷<®B÷<9)
-ÜnL¶4çEçEèEGlobalÁ ¿±‡§í#¤«,Ž* ;B);?@©AB½ CˆDEÔ Fˆ—>ç]Éyа¯°¯TakeÁ²¯ùÚE³¯¹ÚE^“Ãû¹ÄlÄlIterÁÇlµ ™lÈl
end_or_lenÁ™lÉl_markerÁ™lŒœjSž¶408,Æ* ;E)…74¤8;BOcÀЧŸçÀ ·ü¢¸ T1£óÊ¥¾Ä¦üý| # `matchit`Áúüsp [![Documentation](https://img.shields.io/badge/docs-0.7.3-4d76ae?style=for-the-badge)](https://docs.rs/matchit)Áüˆol [![Version](https://img.shields.io/crates/v/matchit?style=for-the-badge)](https://crates.io/crates/matchit)Áüøol [![License](https://img.shields.io/crates/l/matchit?style=for-the-badge)](https://crates.io/crates/matchit)Áèúôì A blazing fast URL router.Áú\ ```rustÁÄ› use matchit::Router;Á´úü¸;8 # fn main() -> Result<(), Box<dyn std::error::Error>> {Áüô# let mut router = Router::new();Áü˜(% router.insert("/home", "Welcome!")?;ÁüÁ+( router.insert("/users/:id", "A User")?;Áíúüñ+( let matched = router.at("/users/978")?;Áü63 assert_eq!(matched.params.get("id"), Some("978"));ÁüÔ)& assert_eq!(*matched.value, "A User");Á # Ok(())Á< # }Á<“ ```ÁúŒŸ ## ParametersÁ±úüµ~ Along with static routes, the router also supports dynamic route segments. These can either be named or catch-all parameters:Á·úÄ» ### Named ParametersÁÔúüØZW Named parameters like `/:id` match anything until the next `/` or the end of the path:Á³úÆ=Ôà # use matchit::Router;ÁüÞ;ˆ>ôš  let mut m = Router::new();Áü¹ " m.insert("/users/:id", true)?;ÁÜ úüà >; assert_eq!(m.at("/users/1")?.params.get("id"), Some("1"));ÁüŸ
@= assert_eq!(m.at("/users/23")?.params.get("id"), Some("23"));Áüà
%" assert!(m.at("/users").is_err());Á ú ”A<— ©A ¹A§ úä«  ### Catch-all ParametersÁÈ úüÌ |y Catch-all parameters start with `*` and match everything after the `/`. They must always be at the **end** of the route:ÁÉ ú Æ=ÔÙ ¼Düô ;ˆ>ô°
ìDÜÏ
 m.insert("/*p", true)?;Áë
úüï
A> assert_eq!(m.at("/foo.js")?.params.get("p"), Some("foo.js"));Áü±GD assert_eq!(m.at("/c/bar.css")?.params.get("p"), Some("c/bar.css"));Áùúüý%" // note that this would not matchÁü£  assert!(m.at("/").is_err());ÁÄú”A©A¹Aåú¼é ## Routing PriorityÁúü…xu Static and dynamic route segments are allowed to overlap. If they do, static segments will be given higher priority:Áþú\‚Æ=ÔŽ¼Dü©;ˆ>ôåìDü„;8 m.insert("/", "Welcome!").unwrap() ; // priority: 1ÁüÀ;8 m.insert("/about", "About Me").unwrap(); // priority: 1Áüü;8 m.insert("/*filepath", "...").unwrap(); // priority: 2Á¸ú”A©A¹AÙúÄÝ ## How does it work?Áöúüúµ² The router takes advantage of the fact that URL routes generally follow a hierarchical structure. Routes are stored them in a radix trie that makes heavy use of common prefixes:Á°ú\´ ```textÁüÀ%" Priority Path ValueÁüæ! 9 \ 1Áüˆ&# 3 ├s NoneÁü¯# 2 |├earch\ 2ÁüÓ# 1 |â””upport\ 3Áü÷# 2 ├blog\ 4Áü›&# 1 | â””:post NoneÁüÂ# 1 | â””\ 5Áüæ# 2 ├about-us\ 6ÁüŠ# 1 | â””team\ 7Áü®# 1 â””contact\ 8Á¹AÚúüÞˆ This allows us to reduce the route search to a small number of branches. Child nodes on the same level of the tree are also prioritizedÁüê|y by the number of children with registered values, increasing the chance of choosing the correct branch of the first try.ÁOcÀçŠè§ŸççÀ ·æü¢¸ å1£óäÊ¥¾ãĦZ]`L,”§À à$&k×7¤,\57')D2ü!ó# Åc ü·8ºíîï íó# î c cˆ¢cµ
 `£cæ4 `àB¤GS
ïÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŸÈŸÈ ÈErrorÁ O˜éBL ¾
$¿± Åüß
&ó#„Š ó# ü¡ Q ðñò ð
 ñË^ òÃ-ó# ¥

 Â  Íì¼+ ¸ 
¼+routeÁ,» Í currentÁ<Ø /1¸%üˆ.4–ó óË^¸% ¨
 full_pathÁLüé ¸%Åcü8ôõö ô¸% õ c cˆ¢cµ
 `£cæ4 `àB¤GS
öÉ\ 
± žü‘%¸%T›1;üÒù$ Œ5íëž,&ë1L6D)T!Ôô¡ ª Ú&ùýäà÷ ÷Ú& ¡  ë
¡ ª ô¹ø øÚ& ª  Æ
¡ ª ”¡
¿2Üâ ¡ ª ˆ( !"#'()-ç ë Ü„  ˆ(
¡ ª Ô’
üè %" Returns the number of parameters.Á
ù ùˆ(¿2

!¡ ª 
üâ+ú úˆ(¿2—] ù
"¡ ª ¹ üâ:ü‘LI Returns the value of the first parameter registered under the given key.Áéû ûˆ(
Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÁd
$$ íÍìŠiàŠi
#¡ ª Ši¦ô79<…#<closure_kind>Á%<closure_signature>Á%<upvars>Á%%#%Ši  ¶4  Ë^#ãi&ûi&˜j&&#&Ši¿kÂkÚkü³,üö85 Returns an iterator over the parameters in the list.Á$ºü üˆ(11¸ 5Ù¥ð²ÞqHïü¡ ª  ¿
'¡ ª ôÊü‹:7 Returns `true` if there are no parameters in the list.ÁDÑý ýˆ( Ú
(¡ ª üå=þ þˆ( ¡ Ë^ ª Ë^—] ø
)¡ ª ¦ƒ»,’ü½Pÿ¿2¼+ ÿ¼+,ªBªBö­Bæ4÷<®B÷<9)
-ÜnL¼+“6¥++ óŠ_ ͳ¼+
*¼+ÙelemÁ$åarrÁî9;¿2ü‘!M„Ÿ! ˆ(Š —]Š .. °!ÍìÛrü¾!"Ûr¿2 ëoÔÃ!Ûr£s˜"—]
-¡ ª Ûr$µ!± »!eg<Ÿ#-ãi/ûi/˜j//-/Ûr¿k ¶4 Þk—]<Í$-ãi0ûi0˜j00-0Ûr¿kÓt—]ü†&"ü³%RO An iterator over the keys and values of a route's [parameters](crate::Params).ÁT&É 2¡ 3ª 4423¡ É §eª É Ì*Ù¥ð²ÞqHï5œ&¡&¥&ü¯&!$¯&11;?@©AB½ CˆDEÔ Fˆ—>ç]ÉyÉ ¡ ª üÕ&)É 7¡ 8ª 9879Ì*:Ú&ß&ã&ü…'+ˆ' É üü·ÿh6©ÖãX¡ ª Ì*66
:É ¡ ª „ 4Œ'üÝ) tâ)É <¡ =ª >=><ÕvÍçvÓ¶w—>ç]Éy?@ABDE@BC°¯°¯î6²¯ùÚE³¯¹ÚE^“Ãû¹ÄlÄl®7Çlµ ™lÈlÇ7™lÉlÝ7™lŒœjSžÉ ÒÒÕ¦Ö»nKMü™´W¡ ª ¶wEFž{¶wñ)ö)ú)$„*;;¶w;;¶wÔÔ;;
BÉ ¡ ª ÔÔàz¶w;;­}ü”*+;;àz;;
EÉ ¡ ª ž{¶w;;§~üÌ*;;ž{üñ*6É H¡ Iª JIJHÌ*KLúMûMLö*û*ÿ*L®+$³+GG ¡  ª üÓ+($Ö+ Ì*Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÌ*úMG Û+G
LÉ ¡ ª $à+—-LãiMûiM˜jMMLMÏk ’‚—]œ.LãiNûiN˜jNNLN‰‚—]T§ÊÄà$kOPŠ\#§ORŸçT0ÀOS ·4<üOT¢ŒS,GI57#%ìñ¥VVŠ_ ö+W´W¤•<˜+UU
W¼+Œñ¥YYŠ_ ö+Z[]`¤©܉ Construct a new router.Á°+XX
Z¼+ü»Wœã Insert a route.Áûú # ExamplesÁúÆ=Ô®¼DüÍ;ˆ>ü#Í>üµ(ú>üâ+¬?d”A©A¹A4ƒ ƒ+ë
¼+Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
—]ó#Xë
\\ ÉXÍìâ‡ŒÛæâ‡úHúHßûHÁ‘4Ý­f‰úM÷
[¼+⇢^,Ô»dfü‡ V
+( assert_eq!(*matched.value, "Welcome!");Á
”A
©A
¹AŽ ^_ ^+ _Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÊÊóλσG³Á3±Ó^_ ^¼+¸%X X
]¼+$ õ
  üêyü‹@= Tries to find a value in the router matching the given path,ÁüÐ" returning a mutable reference.Á÷útÿ¬…úÆ=Ôª¼DüÉ;ˆ>ü‰#Í>ܱ router.insert("/", 1)?;ÁÑúüÙ,) *router.at_mut("/").unwrap().value += 1;ÁüŠ2/ assert_eq!(*router.at("/").unwrap().value, 2);Á”A©A¹A4ñab a+ bÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÊÊóλσG³Á3±Óab a¼+¸%XøX
`¼+$õ
 ükÕŠ\ §ceŸçTÀcf ·4%ücg¢
UnsafeCellÁT>î0chminÁX Åciífëcj,suac¬3HlN8Da+”ÿ¥llŠ_ Ã-áæ¦RͲ
mnopqrst#%l˜D˜ckk„«ckk„ÁckkªBªBö­Bæ4÷<®B÷<9)
-ÜnLÌ^“6äˆ,ˆckkÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙî0î0´“ð0»Ì-·}—KEüC£¼+üª*kkªBªBö­Bæ4÷<®B÷<9)
-ÜnL­–“6ôÚkk¡,Ôþ4‰kk­–ôžkkªBªBö­Bæ4÷<®B÷<9)
-ÜnLÃ-“6ü¥%¥vvŠ_ ±Ìì¼+Ã-üÎ%¥xxŠ_ Ú ¼+Ã-¥zzŠ_ ýÃ-{~üŽU4• Ã-⇼+é‡yë
|| œy݈Œ®îˆ
{¼+⇢^,§¹Á.0{ãi}ûi}˜j}}{}¼+⇿k ¿2Þk ­–üò/0Lõ/c Ã-Ã-¿2y ÿ/y
~¼+$„0childÁ,Š0ü’36¬•3c Ã-¿2¿2y «3y
¼+$°3´ ¶3ü‰:dŒ:cˆ Ã- ˆË^ Ë^¼+Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
”Ÿó#y ¢:y
¼+$§:Í4¹:¢^,Ð:¹æ:Ì¡U<¨UcꃥƒÍì¥ ¸U‘¡êŒÕUÛõ
cŒcc×Á –÷™šâê‘¡×Á –÷™šâ°U´UŒŽtÁU$ÁUc Ë^«$ÕUc êkkàmòcncocp»cq§r½sÍtÚáæ¦RͲ
‘¡lìU4ìUc¿2|‚\¥Š_ ‡\Ã-Š
 üô]‚û]Œ Ã- ŒË^Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
 Ç—üü·ÿh6©ÖãXŒ¸%ˆþ]ˆ
м+$“^°_L¡^ "^$ÚfŠãiûi˜jм+¿k Ì^¢§$ÐwŠãiŽûiŽ˜jŽŽŠŽ¼+¿kŸ§—]T©ŠŠãiûi˜jм+¿2 Þk—] Ã-T‚™Šãiûi˜jм+ä¨þ¨T䟊ãiûi˜jм+ä¨þ¨$“¥Šãiûi˜jм+¿kŸ§—]œº¯t¿¯c˜üܰX„ß°c­–Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
­–˜ó#
õ
$ô°üéºN”÷ºŠ Š­– ˜—] ‘»
¢^,Š»„ 4Ÿ»ü‡ÁLlŠÁcŒ ŒË^Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙâ­¿2ó# žÁ
õ
$˜ÁüõÅ-¥˜˜Š_ úÅØ¼+,œÆÃ-™Ù#%¼©Æ,¬Æ Ã-Ã- ²Æ
¼+$³Æ<ïÆãišûiš˜jššš¼+ Ç—Ç——]ÜË¥œœŠ_ •ËÃ-´¤²Ë<µËÃ-
¼+,Ƥ¤4–ÇÇÙÙ¤Îü=@= Represents errors that can occur when inserting a new route.Á9Œ~\×ó#ÓÍ?ØlýþŒ¨ª«¬­®¯©«­¯üéEB Attempted to insert a path that conflicts with an existing route.ÁU§§ó#düÆ>; The existing route that the insertion is conflicting with.Á$§§ùˆü¦41 Only one parameter per route segment is allowed.ÁD§§ó#WY§§ó#d¥üò.+ Parameters must be registered with a name.Á>§§ó#QS§§ó#|ûü·?< Catch-all parameters are only allowed at the end of a path.ÁO§§ó#bd§§ó#(ó#±Ù±!#Ž Žó#ó#°°
±l( ó#³Àc³!# ó#  c cˆ¢cµ
 `£cæ4 `àB¤GS
É\² ²
³Â±È§ó#µµ!'< ó#—]´§´
µ«ó#·›e·!# ó# ù—]ù¸¸«Íìò¼¢eò¼£
·ò¼±º·¹»± ó#º»º!# ó# ó#¿ßÀßÁßLessÁÂßÃßÄß~Å߯ßÇßGreaterÁÈßåºÝÈnûê7¹±¹
ºÝ¹
ãH ¶!ó#!ó#½·ß½57˜ ó# ˜ó#¼¼
½¹
P
Á"ó#¿ïß¿"$š ó# šó#Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙº¾¾
Á¾
¿Ä¹
Êœ—Ü™ A failed match attempt.Áµú¹AüÁ&# use matchit::{MatchError, Router};Áüè;ˆ>ü¤#Í>üÈ(ú>üñ*' router.insert("/blog/", "Our blog.")?;Áœúü 0- // a route exists without the trailing slashÁüÑ+( if let Err(err) = router.at("/home/") {Áüý85 assert_eq!(err, MatchError::ExtraTrailingSlash);Á¼úüÀ+( // a route exists with a trailing slashÁüì*' if let Err(err) = router.at("/blog") {Áü—:7 assert_eq!(err, MatchError::MissingTrailingSlash);Á¸ÄØú´Ü // no routes matchÁüó,) if let Err(err) = router.at("/foobar") {Áü .+ assert_eq!(err, MatchError::NotFound);Á¸Ä”A©AT ¸%üS[Y$ÁÂÃÄÅÆÂÄÆ¤àü±*' The path was missing a trailing slash.Á:ÀÀ¸%MOÀÀ¸%”¨üú)& The path had an extra trailing slash.Á9ÀÀ¸%LNÀÀ¸%DåüÀ  No matching route was found.Á0ÀÀ¸%CEÀÀ¸%(ó'¸ÀcÈ!#œ ¸% œ c cˆ¢cµ
 `£cæ4 `àB¤GS
É\ÇóÇ
ȱÈHú(¸%(¸%Ë·ßË57žŸ ž¸% Ÿ¸%ÊúÊ
˹
)¸%ÍÍ!'<   ¸%—]ÌÌ
Í…(
*¸%/3*¸ÙÐMO¡ ¡¸%¸%ÏÏ
И +¸%¤²¡ Óª ÔÓÔÚ&nKMü™´WÕÖ¿ÃÍÒÒëo|àÒÒôo(t-¡ ت ÙØÙÚ&ÚÀcÚz|xzBD¢£¤ ¢Ú& £ c cˆ¢cµ
 `£cæ4 `àB¤GS
¤É\×t×
Ú¡ ª ð±öH{.¡ ܪ ÝÜÝÚ&gjgj;?.¡ ߪ ààßÚ&á·ßᬯ¬¯¥¦ ¥Ú& ¦Ú&Þ{Þ
á¡ ª è¹
î/¡ 㪠äãäÚ&ååcfcfGMb§ §Ú&—]ââ
å¡ ª ¹Š0¡ çª èèçÚ&é»é!!GI¨© ¨Ú& ©Ú&º¾æŠæ
é¡ ª ²¹
¸P1¡ ëª ììëÚ&íïßíÙÜÙÜHJª« ªÚ& «Ú&¸Áêê
í¡ ª ³¹
¹82¡ ïª ðïðÚ&ñ´ñGIÚ&îî
ñ¡ ª ¤3¡ óª ôôóÚ&(!ª
4¡ öª ÷ö÷Ú&dgdgUY4¡ ùª úúùÚ&ûÙû¨«¨«¬ ¬Ú&Ú&øø
û¡ ª òÌ… ü”30 A list of parameters returned by a route match.ÁÈúÆ=üØ;ˆ>ü”.+ # let mut router = matchit::Router::new();ÁüÃ1. # router.insert("/users/:id", true).unwrap();Áüõ)& let matched = router.at("/users/1")?;ÁŸúü£2/ // you can iterate through the keys and valuesÁüÖ/, for (key, value) in matched.params.iter() {Áü†30 println!("key: {}, value: {}", key, value);Á¸ÄÀúüÄ%" // or get a specific value by keyÁüê&# let id = matched.params.get("id");Áô‘ assert_eq!(id, Some("1"));Á”A©A¹A
4 ¡ ýª þýþˆ(h6©ÖãXÿÄ¥ üü)("Ö5¡ ª ˆ(ƒÀcƒac_aCE­®¯ ­ˆ( ® c cˆ¢cµ
 `£cæ4 `àB¤GS
¯É\
ƒ¡ ª ò±øH#Ý6¡ ª ˆ(PSPS<@6¡ ˆª ˆˆ(Š·ßŠ˜˜ƒ°± °ˆ( ±ˆ(
Š¡ ª ê¹