Files
boc/rust-service/target/debug/deps/liburl-ec90da11ab73506c.rmeta
T

784 lines
285 KiB
Plaintext
Raw Normal View History

rust
¬r#rustc 1.96.0 (ac68faa20 2026-05-25)ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁÀ뉊]!ÜÛê(¹Þ—šên-5be7b69c3ff7b5b8Á¤²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Áform_urlencodedÁg
¥N`ù®”b§³‚ŽŠ-8b8228a5928ce2f9Ápercent_encodingÁ¼Ë¥"Iý¹é·Aµ†gãä-bde46fa019ba58c1ÁidnaÁ¯‚‡twɆ²¹‰¶Àw-a0431d49917270f7Á idna_adapterÁ²å>;üI ÃB`œþuöo†-327351a033df5ec3Áicu_normalizerÁi´¢ê¹áÑÚô›ùV-c078c7840d42734cÁ icu_providerÁ3W~¯¯edµÀÁ-ê]^-a7eb6b9990d86254ÁzerotrieÁ>÷ÕõëC°^ã§,¼9²-7d7cb11c83136884Á
displaydocÁÿÙ𫆠§Ó¹÷ô -b8d6ab8742ea8990ÁzerofromÁŠö‘JÁ¯G™è](^Ø”o-dcafde80b60b6e04Ázerofrom_deriveÁ¨ 8ïlÌfOµ— ˆ´-2ea7b665324646a9ÁyokeÁõhŸÂM¾Šp>báf6Ì-d3327e9ee0391076Ástable_deref_traitÁ½ÊTýö÷n˜TóQ-á†-771635b0451f799dÁ yoke_deriveÁº‰ñyåÁðÕCáŠʘÃ-1f6bb0ffd13f0264ÁzerovecÁ®6ÁGÞzFß~†ò¢Ã -4472b0057d74fe55Ázerovec_deriveÁGôMjmO6ãžË˜}…œ-cb226320172b7a66Á writeableÁ²é´‘¥1§%‚ý uÈ%-735c33932dd69842Áicu_locale_coreÁ®¶ •UÝÕÇAaígm-afff73ae055cdd60ÁlitemapÁÎ xj+Þ*`²ÔtJ²-5054981e83d0528aÁtinystrÁÓAúÑç+Ù;ØÆƒÃ>?…-f00c4ce36d46c954Áicu_collectionsÁ ß Â?Ü–Ÿó79-3fcbb3b5e230fce7Á
potential_utfÁËÿ¸Ðλrë‚?šõò -c3f5c8cd65117d54Á utf8_iterÁ‚×úÐ'œÌx G¤Ä^-6f20145e2e3e1c24Áicu_normalizer_dataÁÈÙãµ§ù»/ô#\“ï-4d42ceae66c85c80ÁsmallvecÁØNôCt€ïAGV­Â–-97fd81655f68edefÁicu_propertiesÁ:VÈÌfÓ/—²’õÖ
-3affad9190a2bb98Áicu_properties_dataÁTˆ{Z3Ñnþ&H¶=_?3-8894fd72e4000317ÁserdeÁ,ú%»žŒÙ%netÁå-»À|Ã-ŒÂ-4 DeserializeÁ\»žŒé4 SerializeÁL»žInternalComponentsÁ”Ü »expose_internalsÁä² Ìinternal_componentsÁœˆ»´äâpath_to_file_url_segmentsÁÌ¥Žâ<—Žfile_url_segments_to_pathbufÁäø­â<ê­íÀ¤ 
  
 !"#¹($%&'()*+,-hostÁ4444444444 4
4 4 4
44444G÷4Ito_ownedÁ4KparseÁL K parse_opaqueÁN 4P'aÁP parse_cowÁPparse_opaque_cowÁS P
into_ownedÁ4V¤V×4Y¤Y¥Y4
write_ipv6Á4longest_zero_sequenceÁ^ ^finish_sequenceÁ4ends_in_a_numberÁa 4parse_ipv4numberÁc c c 4parse_ipv4addrÁg 4parse_ipv6addrÁoriginÁjjjjjjjjjj
url_originÁju
new_opaqueÁvCOUNTERÁuis_tupleÁuascii_serializationÁuunicode_serializationÁparserÁ{{{{{{{{{{ {
{ { {
{{{{FRAGMENTÁ{PATHÁ{USERINFOÁ{ PATH_SEGMENTÁ{SPECIAL_PATH_SEGMENTÁ{QUERYÁ{
SPECIAL_QUERYÁ{ ParseResultÁ¥{simple_enum_errorÁ{ascii_tab_or_new_line_patternÁ{{÷{syntax_violation_enumÁ{œ×{ž
is_specialÁžis_fileÁ{¡¥¡÷{ default_portÁ{¥'iÁ¥ new_no_trimÁ¥new_trim_tab_and_newlinesÁ¥new_trim_c0_control_and_spaceÁ¥is_emptyÁ¥ starts_withÁ«¡¥ split_prefixÁ­¡¥ split_firstÁ¥count_matchingÁ°¥ next_utf8Á{PatternÁ³Ö{µÖ{·Ö{¹¹Ö{ ¼¼ó ¾ ¼ size_hintÁ{ParserÁÁÔÁ
serializationÁÁbase_urlÁÁquery_encoding_overrideÁÁ violation_fnÁÁcontextÁ{
È
log_violationÁÈlog_violation_ifÁÊimpl FnOnce() -> boolÁÈ
for_setterÁÈ parse_urlÁÈ parse_schemeÁÎÈÈparse_with_schemeÁÐÐÐÐ Ð Ð Ð × Èparse_non_specialÁÈ
parse_fileÁÚÚ Ú Èparse_relativeÁÞ Þ à Èafter_double_slashÁÈparse_userinfoÁãÈÈparse_host_and_portÁåÈå å È
parse_hostÁÈ
get_file_hostÁÈparse_file_hostÁëÈÈ file_hostÁÈ
parse_portÁî¡Èparse_path_startÁðÈÈ
parse_pathÁòÈò push_pendingÁÈlast_slash_can_be_removedÁÈ shorten_pathÁÈpop_pathÁÈparse_cannot_be_a_base_pathÁøÈÈwith_query_and_fragmentÁÈparse_query_and_fragmentÁÈ parse_queryÁüÈü
QueryPartIterÁþÈþ'pÁþ
is_url_parserÁþinputÁþù!üÈó ü È
fragment_onlyÁÈparse_fragmentÁŠFragmentPartIterÁÈÔ(ó(ù!ŠÈó Ècheck_url_code_pointÁ{ª*{is_url_code_pointÁ{c0_control_or_spaceÁ{ascii_tab_or_new_lineÁ{ ascii_alphaÁ{to_u32Á{"is_normalized_windows_drive_letterÁ{is_windows_drive_letterÁ{%path_starts_with_windows_drive_letterÁ{ starts_with_windows_drive_letterÁ{(starts_with_windows_drive_letter_segmentÁ{fast_u16_to_strÁ  
path_segmentsÁ¢¢¢¢¢¢¢¢æ ¢«ã¢­clearÁ­ pop_if_emptyÁ­popÁ­pushÁ­extendÁ²š² slicingÁµµµµµµµµ½°½ÖµÀ°ÀֵðÃֵưÆÖµ count_digitsÁµÊÖquirksÁÌÌÌÌÌÌÌÌÌÌ Ì
Ì Ì Ìdomain_to_asciiÁÌdomain_to_unicodeÁÌhrefÁÌset_hrefÁÌ÷ÌprotocolÁÌ set_protocolÁÌusernameÁÌ set_usernameÁÌpasswordÁÌ set_passwordÁÌ´Ìset_hostÁæ æ ÌhostnameÁÌ set_hostnameÁÌportÁÌset_portÁì ÌpathnameÁÌ set_pathnameÁÌsearchÁÌ
set_searchÁ̧Ìset_hashÁÌtrimÁõÔõÊ!õencoding_overrideÁõsyntax_violation_callbackÁõ©û©ûparse_with_paramsÁýšýœý§û&strip_trailing_spaces_from_opaque_pathÁ ûjoinÁû
make_relativeÁextract_path_filenameÁûµ
Ôûas_strÁû into_stringÁûcheck_invariantsÁŠÓŠÔû÷ûschemeÁûüû
has_authorityÁû authorityÁûcannot_be_a_baseÁû®1ûÒ1ûhas_hostÁûhost_strÁû´ûdomainÁû¼2ûport_or_known_defaultÁš û socket_addrsÁœimpl Fn() -> Option<u16>Áœ io_resultÁž¥ž ûõ
û-¢ ûqueryÁû query_pairsÁûfragmentÁ¦ ûmutateÁ¨¨£û set_fragmentÁ« û
take_fragmentÁ­ ûrestore_already_parsed_fragmentÁû set_queryÁ° ûquery_pairs_mutÁûtake_after_pathÁûset_pathÁ´ ûpath_segments_mutÁûrestore_after_pathÁ· ûÈ2ûset_port_internalÁº ûþ1ûset_host_internalÁ½ û set_ip_hostÁûâ1À û¾1 û
set_schemeÁÄ ûfrom_file_pathÁÆ¡ûfrom_directory_pathÁÈ¡û to_file_pathÁûžË£ûbyte_atÁÎÎþÑÔÑErrorÁѪÕ××÷Ù×Ü Þ
àï
 â§ã åÉRangeArgÁçslice_ofÁèÔ
êÆ>ëÔíÆ>îÔðÆ>ñÔøóóó!path_to_file_url_segments_windowsÁ÷÷÷÷÷÷ ¦þþþþþ $file_url_segments_to_pathbuf_windowsÁ Ô
as_mut_stringÁfinishÁFinishedÁŒã4 HostInternalÁŽ©
ŽDomainÁ
ŽIpv4Á
ˆŽIpv6Á
ˆ444ƒ4 ×4
ŸÖ4 4 ¢4HostÁ¤¤¤¶A¦
¦ˆ¤ÉA©
©ˆ¤âA¬
¬ˆ4
¯¤¯ƒ4²¤²×4µ¤µÖ4¸¤¸4»¤»ï
4¾¤¾§ÀùjOriginÁÂOpaqueÁÃ
ÈÂïÆ
ÆˆÆÆŠjjÌjÎÖjЧÑùjÓƒjÕ×j OpaqueOriginÁ×
׈jÚÖjj Ýj
ß§àùj âƒj ä×{ æ×{
ParseErrorÁè EmptyHostÁé
è IdnaErrorÁë
è InvalidPortÁí
èInvalidIpv4AddressÁï
èInvalidIpv6AddressÁñ
èInvalidDomainCharacterÁó
èRelativeUrlWithoutBaseÁõ
è RelativeUrlWithCannotBeABaseBaseÁ÷
èSetHostOnCannotBeABaseUrlÁù
èOverflowÁû
{ {
þ{Ö{{ƒƒ{{×{ˆ descriptionÁ{SyntaxViolationÁŠ BackslashÁ
ŠC0SpaceIgnoredÁ
ŠEmbeddedCredentialsÁ
ŠExpectedDoubleSlashÁ
ŠExpectedFileDoubleSlashÁ
ŠFileWithHostAndWindowsDriveÁ
ŠNonUrlCodePointÁ
ŠNullInFragmentÁ
Š
PercentDecodeÁ
ŠTabOrNewlineIgnoredÁ
ŠUnencodedAtSignÁŸ
{{¢{¤Ö{{§ƒ{{ª×{
SchemeTypeÁ¬FileÁ­
¬SpecialNotFileÁ¯
¬
NotSpecialÁ±
{{{µƒ{{¸{ ºÖ{¼È¼charsÁ{!¿È¿ƒ{"ÂÈÂ×{kÅ UrlParserÁÆ
ÅSetterÁÈ
ÅPathSegmentSetterÁÊ
{#{$Í{%ÏÖ{&{'{(Óƒ¢PathSegmentsMutÁÕÔÕurlÁÕafter_first_slashÁÕ
after_pathÁÕold_after_path_positionÁ¢ÛÔÛ×µPositionÁÞ BeforeSchemeÁß
Þ AfterSchemeÁá
ÞBeforeUsernameÁã
Þ
AfterUsernameÁå
ÞBeforePasswordÁç
Þ
AfterPasswordÁé
Þ
BeforeHostÁë
Þ AfterHostÁí
Þ
BeforePortÁï
Þ AfterPortÁñ
Þ
BeforePathÁó
Þ AfterPathÁõ
Þ BeforeQueryÁ÷
Þ
AfterQueryÁù
ÞBeforeFragmentÁû
Þ
AfterFragmentÁý
µµµƒµƒ×UrlÁµ!
scheme_endÁ username_endÁ
host_startÁhost_endÁ´¼2
path_startÁ query_startÁfragment_startÁƒ ParseOptionsÁÔÊ!Ù3ù!ÔÔÔƒŠ UrlQueryÁŸÔŸ¦OŸõ8£Ô£×G
H
I
J
L
N
X
X
X
\
\
]
]
]
^
a
c
g
i
t
x
y
z



Ÿ
 
¤
¨
©
ª
«
­
¯
°
²
´
´


·
¸
¸
»
»
¼
¾
À
È
É
Ê
Í
Î
Ð
Ù
Ú
Ú
Þ
Þ
â
ã
å
é
ê
ë
í
î
ð
ð
ò
ò
ô
ô
õ
ö
÷
ø
ú
û
û
ü




Š
Š









œ

ž
Ÿ
Ÿ
 
ª
«
¬
­
®
¯
°
±
±
²
¿
Â
Å
È
Ë
Ú
Û
Ü
Ý
Ý
Þ
ß
à
à
á
â
â
ã
ä
ä
å
æ
æ
é
ê
ê
ë
ì
ì
î
ï
ï
ð
ñ
ñ
ò
ó
ó
ô
ú
ü
ý

ƒ
ƒ



ˆ
Š

Ž









˜

š
œ
ž
¡
¢
¤
¥
¦
¨
¨
¨
«
«
­
¯
°
°
²
³
´
´

·
·
·
¹
º
º
¼
¼
½
½
½
¿
À
À
À
Â
Â
Â
Ä
Ä
Ä
Ê
Ë
Í
Ð
Ö
Ö
Ö
Ú
Ú
Ú
Ý
Ý
ß
ß
á
á
ã
ã
æ
è
ë
î
ñ
ó
ó
÷
÷
þ
þ



Œ

œ
ž
ž
ž
 
£
£
±
´
´
´
·
º
º
½
½
À
À
Í
Í
Ï
Ñ
Ñ
Ô
Ö
Ö
Ö
Û
Þ
Þ
à
à
ã
å
å
å
ç
ç
ç
ÿ
ÿ






£
£
¥
¨
«
«
«

¹
¹
»
Á
Ä
Ä
Ä
Î
Î
Ð
Ô
Ý
Ý
Ý






¥
¥
¥
³çŠ Ž©¶AÉAˆâA˜ˆ¤?ºDõõçQÛþcØþc¿cþcþcÐìþcµßþcþcéþc¤¦§¶A¨ˆ©ªÉA«ˆ¬­âA®ˆad(5ÒJ»¾¿BorrowedÁÀˆÁÂOwnedÁÈ¢ÓÛ?'°UF8ؤ¦§¶A¨ˆ©ªÉA«ˆ¬­âA®ˆad(5ÒJ¤¿cùfùfºùfíßùfùfšeùfÄcùfµßùf¤¦§¶A¨ˆ©ªÉA«ˆ¬­âA®ˆad(5ÒJ¥ÐìÂÃÄ–DňÆÇïȈÉÊŠ£Ê8"ÿî.µßšišišišešiØši¿cši×רEÙˆj '¬ÌOÁ_™ÕÐì±jµß±j±jše±jرj¿c±j¾è
éê£Fëì¹FíîÏFïðçFñò†Góô¥GõöÈG÷øëGùú˜Hûü¾H y[ÆûG
Ðì kµß k k kÛ kØ kŠ  k¿c kÄc ké kˆˆErrorsÁwÜóˆ…wIÐìŠ Œ¼IŽÒIíIJ­JÑJ˜ùJš•Kœ°KžÊK Ÿ êK
_‡ö‘rÃ3µßåmåmåmÛåmØåmŠ åm¿cåmÄcåmŠ ¬­®ÓL¯°äL±²ÿLù=ÒÕ
E1ÛüoØüoÐìüoµßüoüoüoéüo¥Ø¼¼¾ÕM{PS%Ƭó+¶È¿cq³³ 8³ùM¼¼¾ÕM{PS%Ƭó+¶8ÐìÅÆÇNÈɦNÊ˹NGþƘ÷J5µß³r³r³rŠ ³rÛ³rسrùMþþ·(Þ({ó({ƒù!{3PYæ|E°È8ùMÕ)Žó({ù!{ÿ†õîþô£êÈ8¿cÕÕ‡OצO¢Ø±O¢ÙÊO¢ÚÜO¢Q‹á“¹ŠµÔŒ"ÕÕ‡OצO¢Ø±O¢ÙÊO¢ÚÜO¢Q‹á“¹Šµ8Ù¢ÉS
µ!ÜSˆîS‚TŠ”T´Œ¼2´TŽÆTÙT·Ýh)ü̽î¢î¢ï¢½ +¢ L;VÙ¢“v—£—£»™£¹< =áï_åÞßà Páâ¹PãäÑPåæìPçè†Qéê¡Qëì»QíîÒQïðèQñòÿQ óô•R
õö¬R ÷øÂR ùúÚR
ûüñRýþŒS‰ÌSŒWÙúÜÙ¢“v«£«£Ã­£þôÉûT™gö…xÙ¢“v££¹ƒ£¹„£þ-'ºˆÉ¬g…xŠ …xÛ…xØ…x¿c…xØ“vŠ úTÊ!Ù3ù!ÃB Ú„Yt;ÔÛÖ{ØÖ{ïy“vð“v ÔÄc“véúHúHßûHÁ‘4Ý­f‰úM÷“v¿c“v“vµß“v“vº“víß“v“vše“và“v磣¹ƒ£¹„£þ-'ºˆÉ¬gç—£—£»™£¹< =áï_å¡~ç«£«£Ã­£þôÉûT™gö¡~¿cŸŸÞU¡¦O¢õ8¼à¿&¦:©‡Ô0Œ"ŸŸÞU¡¦O¢õ8¼à¿&¦:©‡8Žè©Š³¬ÑÅÿÞšŽè¦Š´¬ÒÅÞŽ¯¤ÓÂâ׃觊µ¬¿¼ÓÅÞŽ²¤ÕÂä×誊¼ÛÕƒÞÙ£ŸŸŽµ¤ÎÂÚ×褊º¬ÏÅÛ¡ŽËÂÜ×ý衊·¬ÌÅ¢ŽY¤ÌÂÝ×þ袊¸¬ÍÅÜGŽè¡¬×úH¸¤Þ»¤à¾¤ÐÂß×âV¤æèœŠÕ˜èµ·
¹¼¼þ«ÕŒŸ½ÀÃÆÎÑåê£í—£ð«£ŸŠ ¥Û1Ø 1¿c T MÐì?µß 1é>ºíßšeÄc¾³ùM Œ"Ù¢ïyðàç0üÕ;
 OOAsciiSetÁPmaskÁè,øÝ¯_EÛT
a ü¹Xð†ð†Ÿò†üÖ:ð†üÖ0ò† ð†üÖ&ò† ð†äÖò†
ð†”Öò†
ð†ð†
ð†ž)ð†%ð†G O)ð†[
 |ß

~  ­ ÍéljÎ" ýólj< Prýljs$> ¤¾ljÇ$‹` L‡¦> ð†Ãò†%ð†#ò†,ð†"ò†+ð†!ò†*ð†!ò†*ð†!ð†*.7)ð†üä1 Žð† , üÌJŽ ð†ð†jò†üå0ð†üå&ò† ð†äåò†
ð†”åò†
ð†ð†
ð†ÆŠð†ÝŽð†F Nð†[ |îlj}# ¬ÌøljÍ? ülj$†{ LOiŒljr$} 
Žé
ð†9ò†Ðð†Îò†×ð†Íò†Öð†Íò†Öð†Íð†Öãð†üüœ
ð† - üÕÄð†ð†lò†üýð†üýŒò† ð†üý}ò† ð†üýnò† ð†üý^ò† ð†üýOò† ð†üý@ò† ð†üý1ò† ð†üý"ò† ð†œýò†
ð†ð†
ð†=Žð†Vð† IQŽð†^lj$‹/ L‡¯ÐljÐ: L–"¥lj#; Tv´ljw=
¨ 
ÊÃlj Ë@ ü
 Òlj
[ P ráljs\ ¤ÆñljÇ] ølj$„ ^  L€ Mh ljp$“ | 
L éð†:ò†Ïð†Ìò†Õð†Êò†Óð†Éò†Òð†Èò†Ñð†Çò†Ðð†Æò†Ïð†Åò†Îð†Äò†Íð†Ãò†Ìð†Ãð†ÌÿÙŽð†ÌÆ ð†+ Þ ü› Eð†ð†iò†ÄÇ ð†ò†
ð†ð†
ð†ŸdŽð†ð†FNŽð†[|Ì lj}/ ¬ÄÖ ljÍ% etBð†ò†)ð†(ò†1ð†(ð†1Æ>Žð†Ä› ð†+ ² üè
Lð†L ð†iò†¼œ ð† ð†
ð†Rð†¤ð†FNð†[t© lj},­ \  $òð†@ò†Øð†Öð†Þ`êð†üû ;
ð†
, µ üâ Uð† ð†jò†üü :ð†üü 0ò† ð†üü &ò† ð†äü ò†
ð†”ü ò†
ð† ð†
ð†Ù)ð†ïð†E M)ð†Y
 z lj
{$‰   L… ª Ê ljË$“ " L ú lj$ # L™ Mo£ ljp <  ¡»­ ljÄ > L­ _n; ð†ò†"ð† ò†)ð†ò†(ð†ò†'ð†ò†'ð†ð†'ö4)ð†ŒÙ ð†+ é ü¸ 3ð† ð†iò†„Ú ð† ð†
ð†Rð†¤ð†FNð†[tà lj} '  $òð†@ò†Øð†Öð†Þ`êð† Ž%þc0¾º¾ºIpv4AddrÁ¿ºoctetsÁ¯Q5N`hzØÊsz$ Ž%þc0̺̺Ipv6AddrÁͺ¼¬¯QÉ¢}ÝÏÆÚnu
 ¤Úg§(ùf3Úg:A ¤Úgª(ùf3ž­;B ¤Úg­(ùf3¦®;B ÂÄ%ši0±j7> ÂÇ+ši6á|=¤¦§¶A¨ˆ©ªÉA«ˆ¬­âA®ˆad(5ÒJá|¥¬³¼‹ ר%±j07>(4j{¢µÌçó÷þŸíÄ|Ö$À«%¤,Ë%•Ad“&ŽIpAddrÁ4²&¦º)
SocketAddrÁTÓ'“¼ )
ToSocketAddrsÁlß'É"
)¬+4ƒ( š k<(Å
Ÿ!4”(ÁÁLTœ(¬ŒD¨( oÆ(»ToOwnedÁ<Þ(²Éò(™3ß4)úHToStringÁD“)—6Y4°) í<Ë)ðWriteÁ,ã)êb¹,ú)£»L*—£Ã<Œ*«£¡*צ* ` §$«*æd!í±*ë"utf8_percent_encodeÁœÍ* 1#ioÁó+¦$PathÁ$Ÿ,…0&PathBufÁ<¥,€/'¶B$.¤*Ed».×,ˆD4É.Â-FTê.è/¥I|ö.Š0‡O|¦/Õ1PDÏ/Þ2EncodingOverrideÁ„ò/V3üà·Çüà­ ¨
rust-url is an implementation of the [URL Standard](http://url.spec.whatwg.org/)
for the [Rust](http://rust-lang.org/) programming language.
# URL parsing and data structures
First, URL parsing may fail for various reasons and therefore returns a `Result`.
```
use url::{Url, ParseError};
assert!(Url::parse("http://[:::1]") == Err(ParseError::InvalidIpv6Address))
```
Let’s parse a valid URL and look at its components.
```
use url::{Url, Host, Position};
# use url::ParseError;
# fn run() -> Result<(), ParseError> {
let issue_list_url = Url::parse(
"https://github.com/rust-lang/rust/issues?labels=E-easy&state=open"
)?;
assert!(issue_list_url.scheme() == "https");
assert!(issue_list_url.username() == "");
assert!(issue_list_url.password() == None);
assert!(issue_list_url.host_str() == Some("github.com"));
assert!(issue_list_url.host() == Some(Host::Domain("github.com")));
assert!(issue_list_url.port() == None);
assert!(issue_list_url.path() == "/rust-lang/rust/issues");
assert!(issue_list_url.path_segments().map(|c| c.collect::<Vec<_>>()) ==
Some(vec!["rust-lang", "rust", "issues"]));
assert!(issue_list_url.query() == Some("labels=E-easy&state=open"));
assert!(&issue_list_url[Position::BeforePath..] == "/rust-lang/rust/issues?labels=E-easy&state=open");
assert!(issue_list_url.fragment() == None);
assert!(!issue_list_url.cannot_be_a_base());
# Ok(())
# }
# run().unwrap();
```
Some URLs are said to be *cannot-be-a-base*:
they don’t have a username, password, host, or port,
and their "path" is an arbitrary string rather than slash-separated segments:
```
use url::Url;
# use url::ParseError;
# fn run() -> Result<(), ParseError> {
let data_url = Url::parse("data:text/plain,Hello?World#")?;
assert!(data_url.cannot_be_a_base());
assert!(data_url.scheme() == "data");
assert!(data_url.path() == "text/plain,Hello");
assert!(data_url.path_segments().is_none());
assert!(data_url.query() == Some("World"));
assert!(data_url.fragment() == Some(""));
# Ok(())
# }
# run().unwrap();
```
## Default Features
Versions `<= 2.5.2` of the crate have no default features. Versions `> 2.5.2` have the default feature 'std'.
If you are upgrading across this boundary and you have specified `default-features = false`, then
you will need to add the 'std' feature or the 'alloc' feature to your dependency.
The 'std' feature has the same behavior as the previous versions. The 'alloc' feature
provides no_std support.
## Serde
Enable the `serde` feature to include `Deserialize` and `Serialize` implementations for `url::Url`.
# Base URL
Many contexts allow URL *references* that can be relative to a *base URL*:
```html
<link rel="stylesheet" href="../main.css">
```
Since parsed URLs are absolute, giving a base is required for parsing relative URLs:
```
use url::{Url, ParseError};
assert!(Url::parse("../main.css") == Err(ParseError::RelativeUrlWithoutBase))
```
Use the `join` method on an `Url` to use it as a base URL:
```
use url::Url;
# use url::ParseError;
# fn run() -> Result<(), ParseError> {
let this_document = Url::parse("http://servo.github.io/rust-url/url/index.html")?;
let css_url = this_document.join("../main.css")?;
assert_eq!(css_url.as_str(), "http://servo.github.io/rust-url/main.css");
# Ok(())
# }
# run().unwrap();
```
# Feature: `serde`
If you enable the `serde` feature, [`Url`](struct.Url.html) will implement
[`serde::Serialize`](https://docs.rs/serde/1/serde/trait.Serialize.html) and
[`serde::Deserialize`](https://docs.rs/serde/1/serde/trait.Deserialize.html).
See [serde documentation](https://serde.rs) for more information.
```toml
url = { version = "2", features = ["serde"] }
```
# Feature: `debugger_visualizer`
If you enable the `debugger_visualizer` feature, the `url` crate will include
a [natvis file](https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects)
for [Visual Studio](https://www.visualstudio.com/) that allows you to view
[`Url`](struct.Url.html) objects in the debugger.
This feature requires Rust 1.71 or later.
```toml
url = { version = "2", features = ["debugger_visualizer"] }
```
Áhttps://docs.rs/url/2.5.7Ál¡#(4j{¢µÌçó÷þŸíßÄàÀߤޕAÝŽ­³×¦º)ʳÍ“¼ )ë³ÀÉ"
)¬+¿ š k¾Å
Ÿ!½ÁÁL¼¬Œ» oº»ÿ´³²É²™3ß±úH¿µ©—6Y¨ í§ðÿµ¢êb¹¡£» —£ÃŸ«£ž× ` §œæd!íë"Ÿ·ˆ 1#Ä·¦$Ù·…0&ð·{€/'¶Bz¤*Ey×,ˆDxÂ-Fwè/¥IvŠ0‡OuÕ1PtÞ2¹dV3«®±¤§„ž%ž”¾%̆&ˆ”¦&vTÆ'\_>Aló'25&) ÿ”·(ö´Ï(ãTë(×lû(Ëι¤¢)®´¼)¢„Ø)Lî)ˆwzil$š*_bRUEH8;ü»*%<î+L“,ìï”ã,»À|Ñ,¼Ë,ò,­³Y¦º)ʳJ“¼)ë³8É")ShutdownÁEÕ¶M)AddrParseErrorÁuÇ
‡¼)˜2E§  ³")ª¬Eÿ ¾º)²­E‰ ̺)Ipv6MulticastScopeÁ•“ Ùº) SocketAddrV4Áeþ ª¼) SocketAddrV6ÁeŒ
½¼) IntoIncomingÁe±M)IncomingÁEÑ«M) TcpListenerÁ]ÛŠ#) TcpStreamÁMè‡#) UdpSocketÁMµð#)D„-Œ.žl«.ŒlÚ.wzü/%qÄ¿/güá/!ND…0$‰0]^acgiޤª¬¾º46)²­̺47)o»48ÿ´²49ßúH4:öåªB4;ô4<×$‰ `4>ˆL c4?percent_decodeÁt³ >4AŸ·œÃ 14BCONTROLSÁDØ )4CFT¾è4Eé4FTä),”Š ´¢þ¬¾ñ|ÙäLî×Lýʃ½¿„ ¤¦tvegü¥.8¦¦þcHëHüÚ)§¤¦§¶A¨ˆ©ªÉA«ˆ¬­âA®ˆad(5ÒJ»¾¿¤eÀˆÁÂÅeÈ¢ÓÛ?'°UF§þcGñG
H8´8¨¨¤¦§¶A¨ˆ©ªÉA«ˆ¬­âA®ˆad(5ÒJÝqJüÅ&üæZW Return a copy of `self` that owns an allocated `String` but does not borrow an `&Url`.ÁDÌ© ©»ìñ±I ÕI
J8ŒÌñ±LNüñ5üäLI Parse a host: either an IPv6 address in [] square brackets, or a domain.Áµúü½/, <https://url.spec.whatwg.org/#host-parsing>Á,øª ªÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ñ± kK K
Ló(,þßL<closure_kind>ÁM<closure_signature>ÁM<upvars>ÁMMLM¤¦§¶A¨ˆ©ªÉA«ˆ¬­âA®ˆad(5ÒJ»¾¿¤eÀˆÁÂÅeÈ¢ÓÛ?'°UFñ±üÀ<üþ=: <https://url.spec.whatwg.org/#concept-opaque-host-parser>ÁdÇ« «½ðK ÛK
Nó(,Ô¼NÍðOåðO‚ñOONO¥òÜÙÔQQ¤¦§¶A¨ˆ©ªÉA«ˆ¬­âA®ˆad(5ÒJ»¾¿¤eÀˆÁÂÅeÈ¢ÓÛ?'°UFÔRSUÞüûHL‰ÆöÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
åõ kPP
RÔó(,“üï!O„ý!ÆöÆ÷PP
SÔó(,Ž"Ó$SÍðTåðT‚ñTTSTüê0.Tø0åõñ±PP
UÔ$ƒ1üÜ2,¤WWÍìÚg á2àÚgTä2ùfXÅcX!#ü333¬­® ¬ùf ­ c cˆ¢cµ
 `£cbufÁ `àB¤GS
®Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŸÈŸÈ È¶= O˜éBLV 3V
XÚg$—3± 3üý5D¤Z¥[[ZÅú ‚6ÍìŒi …6µßÚgŒid´6ùf\·ß\4613üÈ6%Ë6¯° ¯ùf °«hY Î6Y
\ÚgŒi$Ï6¹
,Õ6üä8DTç84±²³ ±¦® ² c cˆ¢cµ
 `£cáú `àB¤GS
³ˆü ø8
]addrÁ$ò8± ƒ9ü§>=¬ª>4´ ´ È>
^piecesÁ4À> Ï>ä¾?|Ë? Ú? ëA ä? ï?, å?8þæ?& é?8$ë?*ñ? ô? äA8@8¹,…@@7ˆ Ž@ @ ÚA
8¢@8lengthÁ4¦@ ­@, ¯@8þ°@ ´@8¹,¶@% »@8Í@8Ø4Ð@ ×@8longest_lengthÁtÙ@ è@ ÌA8longestÁ<þ@ †A8¹,ˆA% A8¸‚t£A ²A8Ø4´A% ºA% åAüçE(„êE4µ µ ‚F
aó(,ûEËHaÍðbåðb‚ñbbab ü§J?„ªJ4 Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¡~ ÆJ
có(,¿J”NcÍðdåðd‚ñddcdÎ…ÞNcÍðeåðe‚ñeeceÎ…¡OcÍðfåðf‚ñffcfÎ…üËR7tÎR4· ·Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ž­ k äR
gó(,ÝRžYgÍðhåðh‚ñhhgh ¡~üª[7t­[4¸ ¸Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¦® k Ã[
ió(,¼[T04“0t×ØÂ¶B$ì¤jk°d… ¤jlÉSžjmÿ´²jnformatÁ4ÊjoßúHjp AtomicUsizeÁ\†„Äjr®D“¼ÀjsŒß­Üö T—“´§…lÃr¬Öe”ñMO=?üŸ&¹ ¹“vši 
t¦O±šivxyzÜ¡üß=: Creates a new opaque origin that is only equal to itself.ÁT¨šiuu
vÜÇj¤]¤]V¦]Á‚]üß3ø¤”&Ãô½üÐ>; Return whether this origin is a (scheme, host, port) tupleÁü“%" (as opposed to an opaque origin).ÁDĺ ºšiu Íu
xüå+ü’NK <https://html.spec.whatwg.org/multipage/#ascii-serialisation-of-an-origin>Áœì» »šiá|u u
y$üØ-üƒPM <https://html.spec.whatwg.org/multipage/#unicode-serialisation-of-an-origin>Á¬ß¼ ¼šiá|u õu
zT04Ÿ0ޤ³Á˜šœžŸ Å¬èмoó»{|ß4‹úH{}× `{ˆ c{ÿµêb{ÉÆ¯v{¶B$Þ¤{•AdäŽ{ÉSþ{¹„˜V{percent_encodeÁtÁ /{Ÿ·œÑ 1{Šú…O{ãç ){Œ”ä%¬üL—
òôLÀæ\ÐØÚÈÊT÷¼ü‡!®„®ƒsuce̹D¿{ ò†¬Ì{î˜üÕ$î˜ü› (î˜üè
0¤ù
î˜´â  {î˜ô¸  {î˜¼í  ¥Íìƒq
Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ƒq kWYôŸ
Œ¬
 ¾
 ó Ä
 ì
, Å
 Æ
 ê

, Ç
8Ð
& Ì
8¼
*Ô
, ×
8“I
& ã
8
$ é
 ë
*î
 ñ
 ñ<& Errors that can occur during parsing.Áüû
)<ú­<= This may be extended in the future so exhaustive matching isÁü¹@< forbidden.Át+  š Ä8º4› ¡ Ã 8²$ «8}­$ ¯8d$ 8n$¸$ ¼8p+ Î Ï Þ8
8è8 8‘F ü », Š  °, 8Ð $ ¢ ±88×Ë'Î8t8
Ø8‘F ç ë8 õ8×ø û š  ü8$ 8׃&  ˆ88ˆL :8 (œ8ן'¢8Í « á8
Ã8 É Ó, ß à À
8F', 8Ð $‡*Œ8× 8ñL“ œ ©, 8“I$ ª Áüö*ìƒ ¡ Ñ § ¨*ª ­ Î7\tÁ ¼7\nÁ Ã7\rÁ% Ïüì%»À¼Ô kü¶( kšëšüå"µm k
š íü«"¬¸ Î Ø  Ô ÿ, Õ Ö ý
, ×8Ð & Ü8¼*ä, ç8“I& ó8«$ ü þ*  Ö <; Non-fatal syntax violations that can occur during parsing.ÁüŽ><úÕ<ï›üá@<¹œ+ Á  ì8º É ë 8²$ Ó8}Õ$ ×8d$ Þ8n$ ä8p+ ö ÷ 8
88 $”8¥I|™ © Â, · ¸ ·< ```textÁ\Ê+ æ ç ú8Óè ì, î8“I< ```Á<Œ, ¤8Ð $ © ¸88¥I â Ð  8ð8 ô8“I  ˆ ƒ8$„(Š :78É š Æ 8
²8 ¸ ¸ , Î Ï ¥ 8¥I'ø, ú8Ð *, ƒ 8“I\„ $  ¦ üð&%åmÅcüœ'3Ÿ'½¾¿ ½åm ¾ c cˆ¢cµ
 `£cáú `àB¤GS
¿ˆüœ £'œ
$¤'± ª'|ù(üoŸ ü) T–)À Àüož ¡)ž
Ÿ$¢)ìè)<ï)Á Áüož ÷)ž
 $ø)üµ**¥¢¢–š º*àƒqT½*üo£ë£#%¬æ*$é*ƒqüo¡¡
£ƒq¾ î*ü¾,0dÅ, ÂÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ú,
¤ª64Ò,”Ñ.Ȧ¦¨©ª«­¯°²Ö.üê.*\ñ. Èq¥¥
§Èó(,ý.üÞ/Ìå/Ãù±Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ã"åm˜"¦³Ãq¥ µ0¥
¨Èoriginal_inputÁtˆ0vfnÁ©0ü“4ƒìš4Äù±Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ä"¦³˜"¦³Äq¥ î4¥
©Èä²tÁ4ú²â4ôØ8Dß8Å Åq¥ è8¥
ªÈ$é8ü¸93\¿9Æ Æq¡¥¡¬¬ ×9¥ÍìÚ¶ Ë9³Ú¶<Î9
«ÈÚ¶$Ø9» Þ924ü±:<d¸:Ç ÇqÚ¶Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙq¥¡®® Ñ:¥…· Å:–·<È:
­ÈÚ¶$Ò:» Ø:*,ü§<-\ª<{È ÈqÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙq¥ ¶<¥
¯È$·<üÀ=BtÃ={É Éq¡~q¥±± ç=¥Íì» Ò="»×ù„Õ=»×ù˜"$á=
°È»$è=± î=KMüñ@2Lô@{Ê ÊqÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙù±¥ þ@¥
²È$ƒAŒ†D<D³³Îìü†DK³Û½Û½´´´üžD1d¡DËÌ㽠˼¼¾ÕM{PS%Ƭó+¶Ì³ »D³
´ã½$®Dó(,´D¬ÓD´üïD0dòDÍΠͼ¼¾ÕM{PS%Ƭó+¶Îµ ŒEµ
$ÿDó(,…E¬ÎE8ÏÏÝq¸´¸üêE0díEÐÑÝq м¼¾ÕM{PS%Ƭó+¶Ñ· ‡F·
¸8$úEó(,€Fü²G*ººìq×ù˜"$ÉG“"ìq×ùœºGÍììq ·Gìq»´»üãG0dæGÒÓìq Ò¼¼¾ÕM{PS%Ƭó+¶Ó¹ €H¹
»ìq$óGó(,ùGÜÈH8ÔÔùq½¾ÀúMûMÿMÀ¾LêH$ïH¼¼ü€I"$ƒIÕ Õùqß¹¼ ˆI¼
¾8$I$ÆI¾Íð¿åð¿‚ñ¿¿¾¿ üñI-LôIÖ ÖùqÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¼ þI¼
À8$ÿI¬×J4âJÔÂÂÔÔüµK1ÁÁŸ!õ!ÄÊ!ÅÚ!Æù!Ç"GÝàá§ÔGÝàá§ÃÄÅÆÇéJÌóJl÷JÁÁá|ì’KD–KÁÁÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ô“vü¼¹KÁÁÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ô" ˜"ùÊ»¾¿¤eÀˆÁÂÅeÈ¢ÓÛ?'°UF
ÔüìK5dðKÁÁÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ô"¦³˜"¦³Ô¤§L<«LÁÁ³r|®M8××ÁÁŸ!õ!ÄÊ!ÅÚ!Æù!Ç"GÝàá§ÊÌÍÎÐÙÚÞâãåéêëíîðòõö÷øúûüŠüÄM+lÇM{Ø Ø¥ÍåmÈ ÕMÈ
É8$ÖMÁ ÜMüÅNK„ÈN{Ù Ù¥ÍåmÍ"ÈÍ"ËË ÙNÈÍìëϬúN–"ëÏ„ÿNëϘ"$O
Ê8ëÏ$ÚNÁ àN$ôNPRüP0T—Pá|¥ÍÈÈ
Ì8µ!l¢PüÏR;LÖRÚ¥Í ÚÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
“v kÈ ñRÈ
Í8$äRó(,êRü©ZQd°ZÏÛ Û¥Í¼¼¾ÕM{PS%Ƭó+¶ÏÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
³ÓȽZÈ
Î8$ÆZó(,ÐZ"$üÉaDŒÌa{ܥͼ¼¾ÕM{PS%Ƭó+¶ÜûÑÈõaÈ
Ð8$âaó(,èa´œbœµb¼Êb„eÐÍðÔåðÔ‚ñÔÔÐÔ ¼¼¾ÕM{PS%Ƭó+¶4ÝeÐÍðÕåðÕ‚ñÕÕÐÕ “vÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÿ×ÄiÐÍðÖåðÖ‚ñÖÖÐÖÔùðnÐÍð×åðׂñ××Ð×åÖïÖ$ÔoÐÍðØåðØ‚ñØØÐØ©ÆüÚr•ŒÝr{ݥͼ¼¾ÕM{PS%Ƭó+¶Ýüo¡~ûÑÈ—sÈ
Ù8$üró(,Šs scheme_typeÁ\¤sÜSTÅsüÑ{šTÔ{{Þߥͼ¼¾ÕM{PS%Ƭó+¶ÞüoÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ß“vûÑȇ|È
Ú8$ì{ó(,ú{ƒÛ\”|
base_file_urlÁlµ|üú|!L}©ÚÍðÜåðÜ‚ñÜÜÚÜåÖ ß¹°ÚÍðÝåðÝ‚ñÝÝÚÝåÖ‡ßü„Èt‡È{àá¥Í¼¼¾ÕM{PS%Ƭó+¶àüo á“vûÑȾÈÈ
Þ8$£Èó(,±ÈƒÛ\ËÈÊ!DìÈ€ÖÞÍðßåðß‚ñßßÞßÔù–×ÞÍðàåðà‚ñààÞàåÖïÖ$†ØÞÍðáåðá‚ñááÞá©Æü¯ñ”²ñ{â¥Í¼¼¾ÕM{PS%Ƭó+¶âüo¡~ûÑÈíñÈ
â8$Òñó(,àñƒÛ\úñÜST›òü—ûtšû{äã ã¥Í¼¼¾ÕM{PS%Ƭó+¶äüoÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¡~¯å kÈ©ûÈ
ã8$»ûó(,ÍûƒÛ\çû/1ü›’Äœž’{æä ä¥Í¼¼¾ÕM{PS%Ƭó+¶æ¡~üoÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¡~þc·°¸ç kȲ’È
å8$Ä’ó(,Ò’ÜSTì’ƒÛ\…“8:åÍðçåðç‚ñççåç·°  ÁÁŸ!õ!ÄÊ!ÅÚ!Æù!Ç"GÝàá§´‹  ›ååüÄå¼¼¾ÕM{PS%Ƭó+¶åüoÖ¿Ù¿Ú¿«Û¿ˆ
new_searchÁTÄMô¹OüþN:7 Getter for <https://url.spec.whatwg.org/#dom-url-hash>Á$ÀOº º“v º ÊO
ò¦OÅOü¿P.ü„P:7 Setter for <https://url.spec.whatwg.org/#dom-url-hash>ÁDÆP»¼ »“v ¼ ÔP
ó¦OÏPnew_hashÁDÞPÄêS$íS̽ ½Ô÷ õS
ô¾ òS̹:ÔööÖ{÷øùú¾:üí;7¼Ù: Change the base URLÁõ:úüý:UR See the notes of [`Url::join`] for more details about how this base is consideredÁŒ×; when parsing.ÁDô;Ö{½ÉÖ{õõ
÷Ô$<æ ‡<üÏ=EüÜ<52 Override the character encoding of query strings.Áü–=41 This is a legacy concept only relevant for HTML.ÁŒÖ=Ö{ ÊÖ{õõ
øÔ$ì=æ ò=üùE\üÕ>KH Call the provided function or closure for a non-fatal `SyntaxViolation`Áü¥?KH when it occurs during parsing. Note that since the provided function isÁüõ?NK `Fn`, the caller might need to utilize _interior mutability_, such as withÁüÈ@+( a `RefCell`, to collect the violations.Áø@út€A ## ExampleÁ<“A§¨ÜŸA use std::cell::RefCell;Áü¿A$! use url::{Url, SyntaxViolation};ÁÔèA # use url::ParseError;Áü‡B/, # fn run() -> Result<(), url::ParseError> {Áü»B.+ let violations = RefCell::new(Vec::new());ÁäîB let url = Url::options()ÁüCNK .syntax_violation_callback(Some(&|v| violations.borrow_mut().push(v)))ÁüâC)& .parse("https:////example.com")?;ÁüD52 assert_eq!(url.as_str(), "https://example.com/");ÁüÊD'$ assert_eq!(violations.into_inner(),ÁüöD;8 vec!(SyntaxViolation::ExpectedDoubleSlash));Ád¶E®§<ÇEç¬ÓEÓ§<íE§¨Ì€FÖ{ˆÌÖ{õõ
ùÔ$žFæ ¤FüÌGAü‘G63 Parse an URL string with the configuration so far.Á,ÓG¾Ö{ ¾ûÑõ æGõ
úÔ$ÙGó(,ßGDÅJ“vüýƒˆŠŽ˜šœ¡¢¤¥¦¨«­¯°²³´·¹º¼½¿ÀÂÄÆÈÊËÍüýN<üÔJ(% Parse an absolute URL from a string.ÁKút‰K # ExamplesÁœKú\¤K“£Œ´K§£ÔÊK¼þéKúüñK*' # fn run() -> Result<(), ParseError> {Áü L1. let url = Url::parse("https://example.net")?;ÁdÖL®§<çLç¬óLÓ§<M§¨™Múd¡M # ErrorsÁ²MúüºMHE If the function can not parse an absolute URL from the given string,Áü‡N.+ a [`ParseError`] variant will be returned.ÁºNúüÂN(% [`ParseError`]: enum.ParseError.htmlÁ,„O¿ ¿ûÑû ‘Oû
üó(,ŠOü¹VÌüìOKH Parse an absolute URL from a string and add params to its query string.Á¼PúüÄP$! Existing params are not removed.ÁíPútõPʆˆQú\Q“£Œ Q§£Ô¶Q¼þÕQúüÝQ*¡‡üŒRJG let url = Url::parse_with_params("https://example.net?dont=clobberme",ÁüÛRQN &[("lang", "rust"), ("browser", "servo")])?;Áü±S\Y assert_eq!("https://example.net/?dont=clobberme&lang=rust&browser=servo", url.as_str());ÁdT®§<£T笯TÓ§<ÉT§¨ÕTúdÝTψîTúüöTHñˆüÃU.ÉöUúüþU(‡ŠŒÀVÀ ÀšûÑûšþœÿ§þÿ âVûÍìÉ‘ ÒVÍìœ ÕVÍì§ ØVÇLÉ‘d©W É‘ÈL­’À’tÈWà­’TãWàÀ’TúW
ýÉ‘­’À’ó(,ÛVù$èVŸ¡ü›Z4üžZ&Á Á“vû ÅZû
$ÊZ«]
```no_runÁü’Ï?< let url = url::Url::parse("https://example.net/").unwrap();ÁüÖÏ30 let addrs = url.socket_addrs(|| None).unwrap();ÁüŽÐ)& std::net::TcpStream::connect(&*addrs)Á<¼Ð # ;Á<ÈЧ¨ÔÐú<ÜЧ¨üèÐ<9 /// With application-specific known default port numbersÁü©ÑRO fn socket_addrs(url: url::Url) -> std::io::Result<Vec<std::net::SocketAddr>> {Áü€Ò0- url.socket_addrs(|| match url.scheme() {ÁüµÒ/, "socks5" | "socks5h" => Some(1080),Á´éÒ _ => None,ÁT„Ó })Á,“Ó<Ó§¨»À|¯Ó¼©Óú$ØÓâ<æÓúredoxÁœ÷ÓúwasiÁ””ÔúhermitÁ¤°ÔüÎÓ|üÅÓdØÔ× ×“v‚8Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ªBªBö­Báú÷<®B÷<9)
-ÜnL“¼”¼•¼V4Á–¼ˆ—¼˜¼V6Á™¼ˆ cÌ£•çEçEèEGlobalÁ ¿±‡§í#ßß¶=à ¬
ÑøÿËO Ÿû‚8 îÔûÍìǻĒÕ"Ç»œ—ÕÇ»˜"·°\ŸÕ
œÇ»$ïÔdefault_port_numberÁœýÔ]_ü¸Ù?L»ÙØÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙƒq ØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ƒqÔ½¥ŸŸ áÙ–š ÅÙ
žƒqoptÁÈÙú<ØÙ"$•ÚžÍð åð ‚ñ  ž ƒqÔ½¾èÔÿäü¦ÞDA Return the path for this URL, as a percent-encoded ASCII string.ÁüïÞYV For cannot-be-a-base URLs, this is an arbitrary string that doesn’t start with '/'.ÁüÍß0- For other URLs, this starts with a '/' slashÁü‚à52 and continues with slash-separated path segments.Á¼àútÄàʆ×àú\ßà“£üïà use url::{Url, ParseError};Á“áúü›á*¡‡üÊáEB let url = Url::parse("https://example.com/api/versions?page=2")?;Áü”â,) assert_eq!(url.path(), "/api/versions");ÁÅâúüÍâ1«þüƒã  assert_eq!(url.path(), "/");Á¨ãúü°ãFC let url = Url::parse("https://example.com/countries/việt nam")?;Áüûã<9 assert_eq!(url.path(), "/countries/vi%E1%BB%87t%20nam");Ád¼ä®§<Íäç¬ÙäÓ§<ó䧨$†åÙ Ù“v Ùû ‹åû
¡$Œåü»ô;üÊç(% Unless this URL is cannot-be-a-base,Áü÷ç<9 return an iterator of '/' slash-separated path segments,Áü¸è+( each as a percent-encoded ASCII string.Áèèúüðè,) Return `None` for cannot-be-a-base URLs.Á¡éúü©éMJ When `Some` is returned, the iterator always contains at least one stringÁÌûé (which may be empty).Á™êút¡êʆ´êú<¼ê§¨ŒÈê§£ÞêúìæêÍ£äˆëó£ü©ë"™¤ìÐëĤòëúüúë.÷¤ü­ì96 let url = Url::parse("https://example.com/foo/bar")?;ÁüëìQN let mut path_segments = url.path_segments().ok_or_else(|| "cannot be base")?;ÁüÁí2/ assert_eq!(path_segments.next(), Some("foo"));Áüøí2/ assert_eq!(path_segments.next(), Some("bar"));Áü¯î+( assert_eq!(path_segments.next(), None);Áßîúüçî1«þüïQÒÍüóï/, assert_eq!(path_segments.next(), Some(""));Áü§ð+¨Ï×ðúüßð85 let url = Url::parse("data:text/plain,HelloWorld")?;Áüœñ+( assert!(url.path_segments().is_none());ÁÌñúüÔñF¼ÆüŸòQÒÍüõò85 assert_eq!(path_segments.next(), Some("countries"));Áü²óA> assert_eq!(path_segments.next(), Some("vi%E1%BB%87t%20nam"));Ádøó®§<‰ô笕ôÓ§<¯ô§¨lÂôÚ Ú“vÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙüÏüÏýÏ
SerializerÁ-ê.start_positionÁ/encodingÁñH9W¾Úèô矟ÞU¡¦O¢õ8¼à¿&¦:©‡çû ô¼û
²$ù¼ü€Â'|ƒÂè è“vá|û “Âû
³$˜ÂüãÏ*ìñÄ Change this URL’s path.Á“Åút›Åʆ®Åú\¶Å“£ŒÆÅ§£ÔÜżþûÅúüƒÆ*¡‡ü²Æ52 let mut url = Url::parse("https://example.com")?;ÁüìÆ! url.set_path("api/comments");Áü’ÇA> assert_eq!(url.as_str(), "https://example.com/api/comments");ÁüØÇ,) assert_eq!(url.path(), "/api/comments");Á‰Èúü‘È96 let mut url = Url::parse("https://example.com/api")?;ÁüÏÈ$! url.set_path("data/report.csv");ÁüøÈDA assert_eq!(url.as_str(), "https://example.com/data/report.csv");ÁüÁÉ/, assert_eq!(url.path(), "/data/report.csv");ÁõÉúüýÉWT // `set_path` percent-encodes the given string if it's not already percent-encoded.ÁüÙÊ5¶“ü“Ë&# url.set_path("api/some comments");Áü¾ËHE assert_eq!(url.as_str(), "https://example.com/api/some%20comments");Áü‹Ì30 assert_eq!(url.path(), "/api/some%20comments");ÁÃÌúüËÌ\Y // `set_path` will not double percent-encode the string if it's already percent-encoded.Áü¬Í5¶“üæÍ(% url.set_path("api/some%20comments");Áü“ÎHݘüàÎ3°™˜Ïúd Ï®§<±Ï笽ÏÓ§<×ϧ¨DêÏéê é“v êû óÏû
´$øÏõ
$‚ÐDÓÒ´Íðµåðµ‚ñµµ´µéÇ  ÂèÝÈüÙFüØ×KH Return an object with methods to manipulate this URL’s path segments.Á¨Øúü°Ø52 Return `Err(())` if this URL is cannot-be-a-base.ÁŒ—Ùë ë“vÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÕÕ‡OצO¢Ø±O¢ÙÊO¢ÚÜO¢Q‹á“¹Šµëû ©Ùû
$®ÙüáÚP”äÚíî í“v¡~ îû ÷Úû
·$üÚÜO¼‚ÛÊOT ÛŒšÜ·Íð¸åð¸‚ñ¸¸·¸ì ì¡~´‹´‹üÜîCüß$! Change this URL’s port number.Á¶ßúü¾ßJG Note that default port numbers are not reflected in the serialization.Áàúü•àTQ If this URL is cannot-be-a-base, does not have a host, or has the `file` scheme;Áüîà  do nothing and return `Err`.Á“áút›áʆ®áú<¶á§¨ŒÂá§£ØáúìàáÍ£ä‚âó£ü£â"™¤ìÊâĤìâúüôâ.÷¤ü§ã96 let mut url = Url::parse("ssh://example.net:2048/")?;Áåãúüíã<9 url.set_port(Some(4096)).map_err(|_| "cannot be base")?;Áü®ä85 assert_eq!(url.as_str(), "ssh://example.net:4096/");Áëäúüóä63 url.set_port(None).map_err(|_| "cannot be base")?;Áü®å30 assert_eq!(url.as_str(), "ssh://example.net/");Ádæå®§<÷å笃æÓ§<槨©æúü±æ1. Known default port numbers are not reflected:Áçæú\ïæ“£Œÿæ§£•çúìçÍ£ä¿çó£üàç"™¤ì‡èĤ©èúü±è.÷¤üäè63 let mut url = Url::parse("https://example.org/")?;ÁŸéúü§é;8 url.set_port(Some(443)).map_err(|_| "cannot be base")?;Áüçé" assert!(url.port().is_none());ÁdŽê®§<Ÿê笫êÓ§<ÅꧨÑêúüÙê.+ Cannot set port for cannot-be-a-base URLs:ÁŒëú<”맨Œ ë§£Ô¶ë¼þÕëúüÝë*¡‡üŒì85 let mut url = Url::parse("mailto:rms@example.net")?;ÁÉìúüÑì(% let result = url.set_port(Some(80));Áìþì assert!(result.is_err());Á íúü¨í$! let result = url.set_port(None);ÁìÑíЯdóí®§<„îç¬îÓ§<ªî§¨Dãîï ï“v·°àÞû ìîû
¹$ñî¼2$ûîü…ò2Œˆòñ ñ“v·°û šòû
º$Ÿò¼2$¥òŒÿúºÍð»åð»‚ñ»»º»ð ð¡~á£üƒ‘Hìèþ Change this URL’s host.ÁŠÿúü’ÿ0- Removing the host (calling this with `None`)ÁüÇÿ=: will also remove any username, password, and port number.Á‰€út‘€ʆ¤€ú„¬€
Change host:ÁÁ€ú<É€§¨ŒÕ€§£Ô뀼þŠúü’*¡‡üÁ52 let mut url = Url::parse("https://example.net")?;Áüû52 let result = url.set_host(Some("rust-lang.org"));Á䵂 assert!(result.is_ok());ÁüÖ‚74 assert_eq!(url.as_str(), "https://rust-lang.org/");Ád’ƒ®§<£ƒç¬¯ƒÓ§<Ƀ§¨Õƒú„݃
Remove host:Áòƒú<úƒ§¨Œ†„§£Ôœ„¼þ»„úüÄ*¡‡üò„30 let mut url = Url::parse("foo://example.net")?;Áüª…$! let result = url.set_host(None);ÁäÓ…ƒ·üô…&# assert_eq!(url.as_str(), "foo:/");ÁdŸ†®§<°†ç¬¼†Ó§<Ö†§¨â†úüê†;8 Cannot remove host for 'special' schemes (e.g. `http`):Áª‡ú<²‡§¨Œ¾‡§£ÔÔ‡¼þó‡úüû‡*¡‡üªˆ5„¶üäˆ$ܹìЯü¯‰52 assert_eq
$€¨\^ü¶¶Rü¹¬SP Convert a directory name as `std::path::Path` into an URL in the `file` scheme.Á­úü™­<­ûüÚ­Vôûµ®úü½®XU Compared to `from_file_path`, this ensure that URL’s the path has a trailing slashÁüš¯LI so that the entire path is considered when using this URL as a base URL.Áë¯ú„ó¯
For example:Áˆ°úü°RO * `"index.html"` parsed with `Url::from_directory_path(Path::new("/var/www"))`Áüç°52 as the base URL is `file:///var/www/index.html`Áü¡±MJ * `"index.html"` parsed with `Url::from_file_path(Path::new("/var/www"))`Áüó±XU as the base URL is `file:///var/index.html`, which might not be what was intended.ÁвúüزHE Note that `std::path` does not consider trailing slashes significantÁü¥³A> and usually does not include them (e.g. in `Path::parent()`).Áë³úüó³H¿»À|Ó´ú$ý´â<µúݹœ¤µúï¹”ŵú€º¤åµüï´üÉ´ÀüÀ´Ëœ½¶‰„Ž„û¡ÉÉû‚… Ѷ”…´Ô¶
ȉ„õ
$ì¶ "ü­Õ1ü¡Ì85 Assuming the URL is in the `file` scheme or similar,ÁüÞÌ63 convert its path to an absolute `std::path::Path`.Á™Íúü¡Í@= **Note:** This does not actually check the URL’s `scheme`,ÁüæÍ74 and may give nonsensical results for other schemes.Áü¢ÎVS It is the user’s responsibility to check the URL’s scheme before calling this.ÁýÎú<…ϧ¨œ‘Ï # use url::Url;Áü©Ï:7 # let url = Url::parse("file:///etc/passwd").unwrap();ÁüèÏ" let path = url.to_file_path();Á<Ч¨›Ðúü£ÐZW Returns `Err` if the host is neither empty nor `"localhost"` (except on Windows, whereÁü‚Ñ,) `file:` URLs may have a non-local host),Áü³Ñ+( or if `Path::new_opt()` returns `None`.ÁüãÑA> (That is, if the percent-decoded path contains a NUL byte or,Áü©Ò&# for a Windows path, is not UTF-8.)ÁÔÒúüÜÒH¿»À|ÊÓú$ôÓâ<†Ôúݹœ›Ôúï¹”¼Ôú€º¤ÜÔüæÓüÀÓÀü·ÓËd´Õ “vÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
€/€/ð·/³„ß-1ùjÝÜ»€û ÁÕû
Ê$ÂÕüÃáC,Æá “v£ û£ÌÌ ÏáûÍìš™ Ìáçš™Dýá
Ëš™$ÐáðË,Öá13üÒâ<Õ⃠ƒ“v¡~û Ýâû
Í$Þâ´ äâÌöãü¯ãFC Parse a string as an URL, without a base URL or encoding override.Á“vÏÐðyñyÐD–ä›äÎΠküÀä;DÃä ûÑÎ ÓäÎ
Ðó(,Ìäü¢å!ÔÒÒ“vÓÔòóÔ§åTÊå,ÏåÑÑ küèå4DëåÇ|Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
“v“vÇ|òÑÑ