Files
archy/core/target/debug/deps/libbase64-9c9a253673e9c296.rmeta
T

660 lines
212 KiB
Plaintext
Raw Normal View History

2026-01-24 22:59:20 +00:00
rust
O#rustc 1.93.0 (254b59607 2026-01-19)Áõ…·fÊ ¦%g--c48c539199cbc88bÁ³VOÐêùÿ²?ÑL¼§Ì±-a7a40eb546f9e2b0Áá\ƒ¦è3$|]åŒ[IÚ tæ-14b12edc9f8cd90bÁë&Gf·Ã ¬ëñq:¤»b-bb76018b1173caf6Áà 9m Ù„«ÐÒþá•cB;-030c5b0bba47cc8fÁrustc_std_workspace_coreÁÛ¹þÓ7>H%¸ÚÉ­-4b81d37a5530864dÁüÃùs<Uß7VyóHr#QÏ-c66cc7807550ce25Á miniz_oxideÁõFÖˆÚ™ª‹"ÞXzLVª-62cbc7af83058505Áadler2Á—wÉD‘嵯|6¨%Œ
+-2f171dd2394b4b62Á hashbrownÁ,ïcV¼¨ø¢:Ê\'È߈-9571ba9e0f6c7a90Árustc_std_workspace_allocÁ%¥Èxµù·¼5Ä3Bœ-aac566ad65903fa4Á
std_detectÁMmáýZ^9õ Îà§e˜÷e-2edb296e590136d8Árustc_demangleÁ@¼§VÉNb˜æ¨fHÌ+V3-53b132e4a2fa6e26Ácfg_ifÁfÝv.Å"ÒÜuPp¹ˆ¶-f76b385d7d4d7f3eÁ addr2lineÁÕú-WiúQVÓ¬
µT§5-fe25100bd73e48e4ÁgimliÁ¹xLáÇí÷‘o±Ñ8£Å-265ba9e6e4f70b3fÁobjectÁÔ³ÝzÓÿ¶ò°öM›¼òü`-9ae0d1f8ea52a318ÁmemchrÁRÎ÷׎™te~QÓ¿ØC\Ò-0bff3c8e8f4e489eÁ  –©HtGNÏ·ˆ!á-d69228d077d46f36Á rstest_reuseÁdÍLà$ÂLtestsÁ,¢à$“&æ,„à
H
decoder_testsÁl‡à$|¹æà
encoder_testsÁlìàüæ,ìYà$áYånaiveÁ,®àåæàøæ,º5à$¯5æ,…( à$ú' ³æ,§*
à$œ*
æ,¶Rà$«Ráchunked_encoderÁSinkÁ  write_encoded_bytesÁChunkedEncoderÁ'eÁengineÁ Ÿ  ÎBUF_SIZEÁ
CHUNK_SIZEÁ 
StringSinkÁ'aÁstringÁ  " ""ç
displayÁ&&&&&&&&&
Base64DisplayÁ/ / /Ÿ /bytesÁ/£
&5 5 5Ÿ 5 &: : :Ÿ :Í&
FormatterSinkÁ? ?'bÁ?þ&C CCCç
readÁHdecoderÁIIIIIIIIIÜ IBASE64_CHUNK_SIZEÁIDECODED_CHUNK_SIZEÁI
DecoderReaderÁU UŸ UU§ UinnerÁU
b64_bufferÁ[ U
b64_offsetÁUb64_lenÁUdecoded_bufferÁ_ Udecoded_offsetÁU decoded_lenÁUtotal_b64_decodedÁUpadding_offsetÁIe eŸ eÚeÍIj jŸ jÚj n n jflush_decoded_bufÁjread_from_delegateÁj
decode_to_bufÁs s s j
into_innerÁIx xŸ xÚxÇ| HwriteÁencoderÁÜ 
MAX_INPUT_LENÁMIN_ENCODE_CHUNK_SIZEÁ
EncoderWriterÁŒ ŒŸ ŒŒ§ ŒdelegateÁŒ extra_inputÁ Œextra_input_occupied_lenÁŒoutputÁ Œoutput_occupied_lenÁŒpanickedÁ Ÿ ŠÍž žŸ žŠž ¢ ¢ žfinishÁžwrite_final_leftoversÁžwrite_to_delegateÁ§ žwrite_all_encoded_outputÁž¯« «Ÿ «Š«è¯ ¯ ¯ «flushÁ´ ´Ÿ ´Š´²encoder_string_writerÁ¹¹¹¹EncoderStringWriterÁ½ ½Ÿ ½Ô ½ô¹Â Ÿ ÂÔ Â
from_consumerÁ¯¹È ÈŸ È ¹Ì ÌŸ ÌÔ ÌèÌš¹ StrConsumerÁÒconsumeÁ¹ÔÔ Ôɹ×ɹUtf8SingleCodeUnitWriterÁÙÔ Ù str_consumerÁ¹ÜÔ ÜèÜš§ åååååååååå å
å ågeneral_purposeÁòòòòòòòòòòïüüüüüüüüüINPUT_CHUNK_LENÁüDECODED_CHUNK_LENÁüDECODED_CHUNK_SUFFIXÁüCHUNKS_PER_FAST_LOOP_BLOCKÁüINPUT_BLOCK_LENÁüDECODED_BLOCK_LENÁüGeneralPurposeEstimateÁ
num_chunksÁdecoded_len_estimateÁüŽ üìü
decode_helperÁ ü decode_chunkÁ üdecode_chunk_preciseÁ  ü write_u64Áò
decode_suffixÁššššššššŒ¢ ò ò
INVALID_VALUEÁò¦ ò¨ConfigÁ¨DecodeEstimateÁ¨internal_encodeÁ«BLOCKS_PER_FAST_LOOPÁ« LOW_SIX_BITSÁ«LOW_SIX_BITS_U8Á¨internal_decoded_len_estimateÁ¨internal_decodeÁ¨configÁò encode_tableÁ² ² ò decode_tableÁµ µ òread_u64Áò¹ ¹with_encode_paddingÁ¹with_decode_allow_trailing_bitsÁ¹with_decode_padding_modeÁò¾>òÀencode_paddingÁòSTANDARDÁòSTANDARD_NO_PADÁòURL_SAFEÁòURL_SAFE_NO_PADÁòPADÁòNO_PADÁå å
ååEngineÁËýËË¡ Ëÿ ˤ!Ë»!ËÎÒÒéÔŸ Ë
encode_stringÁÖÖéØŸ Ë encode_sliceÁÚÚéÜŸ ËïÞÞéàŸ Ë
decode_vecÁââéäŸ Ë decode_sliceÁææéèŸ è è Ëdecode_slice_uncheckedÁììéîŸ î åýñ•#åóìåõ alphabetÁøøøøøø
ALPHABET_SIZEÁøÿfrom_str_uncheckedÁ ÿ ÿøøÍøø«#øÒ#øCRYPTÁøBCRYPTÁø
IMAP_MUTF7ÁøBIN_HEXÁÎÎ
encode_engineÁŸ encode_engine_stringÁžŸ žencode_engine_sliceÁ¡Ÿ ¡encode_with_paddingÁ¤Ÿ  encoded_lenÁ add_paddingÁ¨Í ï³³³³³³³³»Í³³¾Í³ÀsourceÁ³Âï³ïij
decode_engineÁÆŸ Ƴdecode_engine_vecÁÉŸ ɳdecode_engine_sliceÁÌŸ ̳ì
  
â ÙÙÙÙÙPAD_BYTEÁòGeneralPurposeÁàÉ!á àç!ã à»!òæÍòèÈòGeneralPurposeConfigÁê•#êdecode_allow_trailing_bitsÁêdecode_padding_modeÁòòïÈò ò
òÍåDecodePaddingModeÁô IndifferentÁõ
ôRequireCanonicalÁ÷
ô RequireNoneÁù
ååüÈååÿÍååÕå˜åDecodeMetadataÁ×åå ŠÕå
Œ˜å ŽÍøAlphabetÁsymbolsÁ øÈøÍø˜˜ øøÕøParseAlphabetErrorÁ
InvalidLengthÁž
DuplicatedByteÁ 
 ìUnprintableByteÁ£
£ì ReservedByteÁ¦
¦ìø ©Íø
«˜ø ø ®ÕEncodeSliceErrorÁ°OutputSliceTooSmallÁ±
³ÈµÍ¸Õº˜³ DecodeErrorÁ¼ InvalidByteÁ½
½ì½í¼ù2Á
¼InvalidLastSymbolÁÃ
ÃìÃí¼InvalidPaddingÁÇ
³ÉȳËͳ³ÎÕ³ И³DecodeSliceErrorÁÒ˜5Ó
ÓìÒ¿4Ö
³
ØÈ³ Úͳ ³
Ýճߘ




!
%
%
>
>
>
G
G
i
i
i
q
q
r
s
s
|
|



¥
¦
§
©
¯
¯
³
¸
Ð
Ð
Ñ
Ó
Ó
Ô
Ö
Ö
Ø
Ø
Þ
Þ
ß











¢
¢
¢
§
«
«
«
¯
°
°
°
±
²
µ
¸
Á
Î
Î
Î
Ï
Ð
Ð
Ð
Ñ
Ò
Ô
Ô
Ö
Ö
Ø
Ø
Ø
Ú
Ú
Ü
Ü
Ü
Þ
à
à
â
â
ä
ä
ä
æ
æ
è
è
è
ì
ì
î
î
î
ò
ô


ƒ


ˆ
ˆ
ˆ

ž
ž
¡
¡
¤
¤
¤
§
©
©
©
¼
¼
¼
¿
¿
¿
Á
Æ
É
É
Ì
Ì
ç
ç
ç
é
ð
ó
ó
ó
ý



ƒ
ƒ











˜
œ
œ
ª
ª
ª
¬
¯
¯
´



¹
¹
»
Ê
Ì
Ì
Ì
Ï
Ï
Ñ
Ù
Û
Û
Û
Þ
Þ
à
ÒËñó  š C&,Ÿö»( å`//
3©
&4£
&—Ó¢™I÷  Ÿ  ??ü
Bþ&Ò<»G”B à`UU¸
Y§ IZéI[õI]ŠI^I_©IaÂIb×IcéIdIº.Ó) •’ Ÿ Ú õAà`ŒŒå§ «Ããö˜^ì*9jz9 þBŠß›C ›Cß½½÷Áô¹ݽË
{é0³ þBÔ Ò 8Ô ÒÉHÉHÊHœÜ3ËÚ¢×€JÜßÙÙúÛ¢¹VÏý¤PùåíÔ ó¼ŒÚüìüS[×¢µàïøà`àà«.áÉ!òãç!òå»!òÝ5œó5ò›Þ¾F˾Fáêêý.ë•#òì¡/òíÃ/òˆÿCš-Á‰ÞžGþžGà`žGÄžGñžGáôõö›0÷ø³0ùúÐ0 î;JS[¬ÞœHþœHà`œH¬âœHžœHœH£œH¬â«1׈Ë}Ïe‹òž©I©I£©Ià`©IÞý12Ô¿•ì z9à`ˆJ£ˆJ¬âˆJžˆJˆJˆJ 8à`žŸù2 ¡“3¢ì£¤¶3¥ì¦§Ú3¨ìu?I9ö£ùJ¬âùJžùJùJå`ùJÏùJÞ°±²¿4.f/ç÷¼vbà`¦L¬â¦Lž¦L¦L£¦Lå`¦LϦLÞ¼½¾«5¿ìÀíÁÂù2ÃÄà5ÅìÆíÇÈŽ6ئ81°·à`’M¬â’Mž’M’M£’Må`’MÏ’MÞÒÓÔ˜5ÕìÖ׿4áôÌRýà`ÒN¬âÒNžÒNÒN£ÒNå`ÒNÏÒNúÒNM"C?:/‡¨°»¼¾ÒeU™ŒæàòêÿôŽ©µ°Ë¼ÚÒxŒÌ½ÜÙ´ŒÔ
×ÉHèàïêüô³°É¼ØÒ¨àîêûôñêþô¾êÀêôš­·°Í¼ÜÒôŠ®¸°Î¼ÝÒôŒ«º°Ð¼ßÒª°½¼ÀÒÂÒ Éå`
à` ! Kß Òó ÞË1áþÄñ¬âž1£11Ïú1024Ád Œ˜T%˜T9 D˜TS ˜TV˜T ˜T$ '˜TJ˜TKüç+˜T˜Tþ˜T<טTá˜T˜TBUF_SIZEÁ˜T1024Á˜T˜T˜TBUF_SIZEÁ˜TDECODED_CHUNK_SIZEÁ˜TBUF_SIZEÁ˜TDECODED_CHUNK_SIZEÁ˜TDECODED_CHUNK_SIZEÁ˜T1024Á  ã ˜T%˜T9  ˜TT ˜TX˜T„Ø  ç ˜T$ '˜TJ˜TKü». Š˜T ˜T¯V;ؘTã˜T˜T˜TMIN_ENCODE_CHUNK_SIZEÁ˜TBUF_SIZEÁ˜TMIN_ENCODE_CHUNK_SIZEÁ˜TBUF_SIZEÁ˜T˜T˜T˜Tü„,Ô„ˆ˜T˜T* ,ˆ˜T*˜TS˜TüåL˜T¯V,ˆˆ˜T˜Tžˆ˜T˜Tü‘. Ô‘ˆ˜TŒ®˜T0 ,ˆ˜T*˜TY˜Tü‘E¤Â˜T !˜T?˜T ÕüìkŠ˜T,…˜Tå¯Vì¯V:수Té˜Tˆ˜T˜Tµ˜TÀ˜T˜T256Á˜T256Á˜T256Á˜T˜T256Áÿ255Á@˜T64Á˜T256Á´©  
$ 
²1A ¾ ´Û  
$ 
µ1A ð 4ÿ üˆ ˆ
à

§ü²ä ¾F ˆJ žG µb˜T@,ód,µb˜TýódüžG¾Ã'V»!Zˆ˜T?0x3FÁ?µb0x3FÁ„”H T§H $¨H µb˜T@ü·Hš LÅH  ÑH 
˜TüÜHo TâH ,âH êH @˜T= ëH ¼‘I ,¢I   
 '˜T˜T@= 
G˜T˜T@ aˆe ,ˆI   œûH   ˜T˜T@$  .˜T˜T@ üûH-   §I  ¨I   T¶I 
 ¿I ˜T$ 
'˜TJ
˜TüíH^  úÊI Ç
Ï øúÜHo  Äj<B ÐI d×I  äI åI ²üîF÷ ü üÁH ˆeD§G ódDG ˆeËÄjw˜T¥ÄjMƒ˜Tƒµb@˜T@O˜T䨝VrìÄjóùÃ'{É!Jö É@˜T64Á@˜T64Á„“L ¤¦L l§L ¥µb˜TL»M  ÇM 
˜TüÎMú  TÔM ,ÔM ÜM @˜T= ÝM ,¢O üþN  ¼þN 
,O     '˜T˜T@=  G˜T˜T@ a
ˆe | 
˜T O 
üñN. 
 ˜T˜T% 
/˜T˜T üñN<  µb ¬O  ­O   T·O  ÀO ˜T$ '˜TJ˜TüßMé  ÄjûÇO ô
ü ¦øûÎMú  Äj=C ÇO dÎO  ÛO ÜO µüÆK– ü ü·M¥ ¦eLÿK ódDçK ¦eî˜TÉÄj­ÄjM¨˜T¨˜Te˜TZµbY˜TYhæ¯V|õÄjüÃ'ç!vöUÒ}¥µb˜T256Á˜T256ÁüõY#  
ôüºXé
ê$ŸY ,ÍY  ¢Z ©Z ºü•X” žG$«X œH|<Ô_ ü±_H
êœH ø_ ÿ_ »üé^– žG$¢_ žG$Š_ <_ ypaddingÁ%O,»e üŒeR
êœH Ýe äe ¼üºdª žG$ýd žG$çd ,íd yèH$Çm üŸmJ
ê èm ïm ½üÈl§ žG$m žG$îl œH$ôl œHzmodeÁ#Nœq Âód#0üüp-

ϟp 
§\¥q ÆžG
7 ¨q ü×pS ¾Ftëp ód­ód´ˆJ”‘q ódÄCŠˆJ{ÆžG:BŠˆJ  ód3ˆJBŒŠˆJœÎr Ãód#0üºr0

œºr õzY4ãr ÇžG
4 ér üŽr] þFt©r ódªód±ˆJ”Ïr ódÁCŠˆJ{ÇžG:BŠˆJàód0ˆJ?ŒŠˆJœ…t Äód#0üñs-

œñs õzYšt ÆžG
4 t üÌsS ľFtàs ódªód±ˆJ”†t ódÁCˆJ{ÆžG:BˆJÄ ód0ˆJ?ŒˆJœÃu Åód#0ü¯u0

œ¯u õzY4Øu ÇžG
4 Þu üƒu] žFtžu ódªód±ˆJ”Äu ódÁCˆJ{ÇžG:BˆJÅ ód0ˆJ?ŒˆJÜèw
 Ìèw 
º!üÂwB ÆžG¤Ñw %üúx; Üúx 
Ìúx –…%2
9œ›y 
»E,¯y  Ô›y  ´y ôÔy 
ôüúxy

Ļy 
½ª=ü»y8  òy üÑx£ ÇžG¤ãx žGôžGòœH;@˜T64Á@˜T
ALPHABET_SIZEÁ@˜T
ALPHABET_SIZEÁ\…¬“$”µb˜T@œÅ
 
¹y3 ×L› §
˜Tü²q ¬¸   þ˜T7 Ì œí
   '
 8 
 K
 ˜T˜T@$ .˜T˜T@üÜ$
ÿ
  ˜T$ '˜TJ˜TüÎU Äjˆ¢¯
·
h øˆ²q Äj<B ¢<´„­
 ¼ ÂÃüÃ
üÂü²ü—¬ˆJ
 
ˆe. 
µbóŽ˜TÎÄj²Äjn®˜T®µbq˜Tq˜Tˆ˜T7+¯VÅ?ÄjGNˆe'Ã'£2Õ source_bytesÁÁö|-þ˜T@˜T
ALPHABET_SIZEÁœº
 ±‰1 Ìü×fäÚ
$à
Ýpµb4 äZþ˜Tv õü!  
üŒ&
곈JùJ ± ¼^½
Äj.4üÇü

 å 
˜TüôÅ
¬ú
 
l‚þ˜T7
 Ž d­ 2 ¹üé µb6  útÿ$ÿ4‡~µb6
Β
Äj ìüËo„Îßµb7
|3 ØC
ü°)
 Øü¬.
곈JùJ Ùàæì½
Ýü€&  
 ¥ üü+
곈JùJ ¦ ¹;~º
Äj06! Ä!
˜Tü×·" ÜÝ#$$!#$þ˜T7# ÷$ü{%¤’&\''!(( .&'(?& ¥('„Á*! ИT$ *!'˜TJ!*˜T &%Š#À
È
('Š%
ÄjF&L%+,,!”±-.,- .-, 2+, Ã,üÚ{/”Ý01122+.012?0 î21ü•(4$¸554
5 ¼5ü‘-
곈JùJ4 ½4 Ô0/ +#" ¸!L¡2§1Õ/
ÄjS0Y/„ë6! ú˜T$ 6!'˜TJ!6˜Tüù  Äj¾+;#m
u%$øŠ×·8 "Äju8|# "T :  ©˜T$ : '˜TJ :˜Tü©
  Äjk!r¸
k
s +ø‰ôÅ
< 
Äj=<C
 
üÐ">??
%ÄÐ
?1>B ñ?üÍ&
곈JùJ> ò> øùWå
¢ ¨
´64=üßš
ü®Ë üÕî
ü¢
ü®ü î@ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ˆJùJüƒ óŽ
óŽ·
Äjx
v
˜Tv
w
ü÷FùJ
Äjj ˜T˜ Äjùu ˜Tu µb8 ˜T8 ˜T- 4 Äjôñµbñ´µb´ü^ùJíµbìÄjkiµbiüß[ùJµbš˜TÄjõé˜TéÄj¬ª˜Tª˜TŸü§c¯Vpµb͘T͘TÂÉÄjµbµb|üðeùJMµbL¯V Äj%¯VügÄjovˆJHóŽHÃ'ö©
° öT  byteÁæ
 probe_indexÁH!
probe_byteÁË+óI þ˜TS þ˜TÞ ßµb2þ˜TüÃ*B @óŽ"ü¡*g

ä¡*†¤L% ‡+ü‚*‡ŠˆJD–*óŽóŽ6üà,B @óŽ"ü¾,g

ä¾,†¤L% ¤-üŸ,‡ˆJD³,óŽóŽ6ü˜/B @óŽ"üö.g

äö.†¤L% Ü/üÚ.„ŒˆJDë.óŽóŽ6ü¸0B @óŽ"ü–0g

ä–0†¤L% ü0üù/…ˆJD‹0óŽóŽ6üÎ2B @óŽ"ü¬2g

ä¬2†¤L% ’3ü‹2‰ŽˆJD¡2óŽóŽ6üà4C @óŽ"ü¾4h

ä¾4†¤L% ¥5ü 4‡ˆJD³4óŽóŽ6 L l   ˜T˜T3 C
D˜TV¬§ L¿ l¿  Ë ˜T˜T3 C D˜TV¬Ö  ü›$ 
¬›   
# 
ùÍ 0 ½ ˜T
  ¾  e
Üý   ¬‚ 

˜T¬Î 
ì 
 
 ¡  § ˜T=$ˆ 
ø°˜Tj
ÿ   ` 
¬â  ÜÝ 
ø°˜T ÷ üžà ¬Ì  üÌ$ 

 
îÍ3 î ˜T   ï ü³ \ L    ñ 
˜T
 Á 
˜T
¬   ü. 

 ã¹C5Ä¥  ¼  Æ ÝX ý í ôûîø¦ü´Ì ü…û ü£Ý üÒ® üÀ- ü޹ ø°ú°û°Ðü°ý°þ°ìHˈXêE>˜T ˜T  ˜Tê˜TêÞ˜T˜Ts˜T„½˜T´˜T¬üó$ ˜T˜T¡˜T=˜Tá˜TÖ˜T bytes_lenÁ»±vÀÏ
®complete_input_chunksÁMcomplete_chunk_outputÁì Ô¾p
encoded_remÁéÑ=µbb'='Át§#
¡%ùJ0µb7>|ÿ#
¤%ùJ0µb7>d³$
§%ùJ0µb7>
¼¾(M3˜T:µbAHŒ“
¼Ä(M3˜T:µbAH
ÒÔ%ÒN0M7>&Håø³Ùßá,ÞK¡$4†NË÷Î4€O ¬ç)lˆO ­Œ*¤—O ž®¸*œÛO ¡°†+\ðO ¦±§4„ýO°²ï4ïP ÄÑ×,l÷P ÆÒü,Œ†Q ÉÓ¥-œÇQ ÌÕì¤ÜQ ÏÖ˜5\òQ¼×â6„ÿQÒØüØRüLI Correct, fast, and configurable [base64][] decoding and encoding. Base64ÁüMKH transports binary data efficiently in contexts where only plain text isÁd™ allowed.Á¦ËüªFC [base64]: https://developer.mozilla.org/en-US/docs/Glossary/Base64ÁñË # UsageÁËü…LI Use an [`Engine`] to decode or encode base64, configured with the base64ÁüÒB? alphabet and padding behavior best suited to your application.ÁËœ™ ## Engine setupÁ­Ëü±KH There is more than one way to encode a stream of bytes as “base64â€üý1. Different applications use different encodingÁü¯'$ [alphabets][alphabet::Alphabet] andÁü×GD [padding behaviors][engine::general_purpose::GeneralPurposeConfig].ÁŸËÌ£ ### Encoding alphabetÁ½ËüÁKH Almost all base64 [alphabets][alphabet::Alphabet] use `A-Z`, `a-z`, andÁüPM `0-9`, which gives nearly 64 characters (26 + 26 + 10 = 62), but they differÁüÞ%" in their choice of their final 2.ÁËüˆOL Most applications use the [standard][alphabet::STANDARD] alphabet specifiedÁüØOL in [RFC 4648][rfc-alphabet]. If that’s all you need, you can get startedÁü¨'$ quickly by using the pre-configuredÁüÐSP [`STANDARD`][engine::general_purpose::STANDARD] engine, which is also availableÁü¤ JG in the [`prelude`] module as shown here, if you prefer a minimal `use`Á footprint.Áþ Ë¡¡
 ¥
```Á¾Ñ

Üç
 use base64::prelude::*;Áƒ Ëü‡ 41 # fn main() -> Result<(), base64::DecodeError> {Áü¼ LI assert_eq!(BASE64_STANDARD.decode(b"+uwgVQA=")?, b"\xFA\xEC\x20\x55\0");Áü‰ JG assert_eq!(BASE64_STANDARD.encode(b"\xFF\xEC\x20\x55\0"), "/+wgVQA=");Á # Ok(())Á  # }Á  ```Áñ Ëüõ KH [rfc-alphabet]: https://datatracker.ietf.org/doc/html/rfc4648#section-4ÁÁ
蟁
DA Other common alphabets are available in the [`alphabet`] module.ÁŠËÔŽ #### URL-safe alphabetÁ©Ëü­NK The standard alphabet uses `+` and `/` as its two non-alphanumeric tokens,ÁüüMJ which cannot be safely used in URL’s without encoding them as `%2B` andÁ `%2F`.ÁÕËüÙYV To avoid that, some applications use a [“URL-safe†alphabet][alphabet::URL_SAFE],Áü³MJ which uses `-` and `_` instead. To use that alternative alphabet, use theÁüPM [`URL_SAFE`][engine::general_purpose::URL_SAFE] engine. This example doesn'tÁüÒGD use [`prelude`] to show what a more explicit `use` would look like.ÁšË¡½ Á¾Ñ¾ÑüƒA> use base64::{engine::general_purpose::URL_SAFE, Engine as _};ÁÅËüÉ4‹ÒüþEB assert_eq!(URL_SAFE.decode(b"-uwgVQA=")?, b"\xFA\xEC\x20\x55\0");ÁüÄC@ assert_eq!(URL_SAFE.encode(b"\xFF\xEC\x20\x55\0"), "_-wgVQA=");ÁdˆïÓ<•ƒÔ<’Ô¥ËÔ© ### Padding charactersÁÄËüÈNK Each base64 character represents 6 bits (2â¶ = 64) of the original binaryÁü—HE data, and every 3 bytes of input binary data will encode to 4 base64Áüà52 characters (8 bits × 3 = 6 bits × 4 = 24 bits).ÁËüšNK When the input is not an even multiple of 3 bytes in length, [canonical][]ÁüéLI base64 encoders insert padding characters at the end, so that the outputÁü¶%" length is always a multiple of 4:ÁÜËüàJG [canonical]: https://datatracker.ietf.org/doc/html/rfc4648#section-3.5Á«Ë¡Î ҾѾÑü”A> use base64::{engine::general_purpose::STANDARD, Engine as _};ÁÖËüÚ,) assert_eq!(STANDARD.encode(b""), "");Áü‡0- assert_eq!(STANDARD.encode(b"f"), "Zg==");Áü¸0- assert_eq!(STANDARD.encode(b"fo"), "Zm8=");Áüé0- assert_eq!(STANDARD.encode(b"foo"), "Zm9v");Á’Ô¢Ëü¦NK Canonical encoding ensures that base64 encodings will be exactly the same,ÁüõMJ byte-for-byte, regardless of input length. But the `=` padding charactersÁüÃGD aren’t necessary for decoding, and they may be omitted by using aÁü‹>; [`NO_PAD`][engine::general_purpose::NO_PAD] configuration:ÁÊË¡í ñ¾Ñ¾Ñü³HE use base64::{engine::general_purpose::STANDARD_NO_PAD, Engine as _};ÁüËü€ 30 assert_eq!(STANDARD_NO_PAD.encode(b""), "");Áü´ 52 assert_eq!(STANDARD_NO_PAD.encode(b"f"), "Zg");Áüê 63 assert_eq!(STANDARD_NO_PAD.encode(b"fo"), "Zm8");Áü¡!74 assert_eq!(STANDARD_NO_PAD.encode(b"foo"), "Zm9v");Á<Ù!’Ôá!Ëüå!MJ The pre-configured `NO_PAD` engines will reject inputs containing paddingÁü³"LI `=` characters. To encode without padding and still accept padding whileÁü€#NK decoding, create an [engine][engine::general_purpose::GeneralPurpose] withÁüÏ#30 that [padding mode][engine::DecodePaddingMode].Áƒ$Ë¡¦$ ª$¾Ñ¾Ñ,¬$\¦$üì$JG # use base64::{engine::general_purpose::STANDARD_NO_PAD, Engine as _};Áü·%ZW assert_eq!(STANDARD_NO_PAD.decode(b"Zm8="), Err(base64::DecodeError::InvalidPadding));Á<&’Ôš&Ëìž& ### Further customizationÁ¼&ËüÀ&C@ Decoding and encoding behavior can be customized by creating anÁü„'OL [engine][engine::GeneralPurpose] with an [alphabet][alphabet::Alphabet] andÁüÔ':7 [padding configuration][engine::GeneralPurposeConfig]:Á(Ë¡²( ¶(¾Ñ¾Ñ,¸(\²(üø(0- use base64::{engi
œ›s üAœ_ QSCE¬p8L°,tù  ªâüù´ á—á—

©âé—
•˜,“  üÞMœááâ áé— âˆê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Äj˜  õ
é—encodedÁ<€ü€1t Ÿ ªâþB žËþBþB  § söD2êö þBsöD2êöšmo]4¸  þBüÊ2 Ÿ š ÓÒšîšÏüƒ2ŠÛ›îš
 þB§ üåQãäå ãîš äˆ åðDê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ÄjðD
Ô  ü©âðD ó ðD
 þBðD©
sinkÁ$=?¬Á˜T¼ç˜TD®˜Tü®
»
 Ž
 «
8÷

 ª
8<“

7á<
$ ¤
8à
ü‰
$
 ¸@C&,Ÿö»(Ë
´Õ

  E¼•»ò
 õ
 8÷ö
 ù
 8
 7á<„$ 8à$üð
$  ¸@!šü³/Áæ æE š C&,Ÿö»(æ È
! ö Åü´ »  ±8÷ ˜ °8<™ ¡7á$ ª8àü$ ##¸@$%
%¹""ÄjüñFœôçè ç¸@ èˆê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Äj¸@
" ˆ"
% $ö |ñLüda Enables base64'd output anywhere you might use a `Display` implementation, like a format string.ÁeË<i’ÔüqL¾ËüÂ(% let data = vec![0x0, 0x1, 0x2, 0x3];Áüë74 let wrapper = Base64Display::new(&data, &STANDARD);Á£Ëü§C@ assert_eq!("base64: AAECAw==", format!("base64: {}", wrapper));Á’Ô<ùL/? t&'¡$4³Ë&(å`&*œÁ`&+ÍëÁ]&-œðs&.üø&s¬¤gü¿[]LN„äAC24üÔ+ü÷\Y A convenience wrapper for base64'ing bytes into a format string without heap allocation.Á 0 1Ÿ 2120©â­A õË­A­A î@—Ó¢™I÷34íñDF|†,†&//  ˆü›&|&// § söD2êö ­AüÆ0 6 7Ÿ 8867Ò« Óâ«î@9ËÏü¸Füý63 Create a `Base64Display` with the provided engine.Á¿Ĭ  ­Aî@55
9  ­A©
§ üù< ; <Ÿ =<=;Ò« â«4‰î@>æ`>þ$&ü¼B¿éêë éî@ êÁ`Á`œÃ`è Á]Ä`bufÁÁ]Ê­\É:•ëê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ÄjѼѼÒ¼ štÀ.: Ã:
>  ­A formatterÁLÊüü 
& @AA@ 
ë²Ä£
íô°¹AÒ<»G”BB

: £
&??  Á`Á`œÃ`è Á]Ä`á¯Á]Ê­\É:•üÀ
G DEDEë²Í
¹AFG
GÅ
É
 ,“ CCرü¬ Lœ¯ ìí ì¹A íˆê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Äj¹A
C Ã C
G  †™ d¥M»„M ‡M ¢M8÷ˆM M ¡M8<ŒM ”M7,M$ M8à$Mü‚M"üA> Implementations of `io::Read` to transparently decode base64.Á$­MI¸lfU~\B<FHRSTU¡$4
ËIK˜5\
¼IL×.D)
ßIMÐ>
IOÍC
ï+IPioÁH
çI.
t
vfhTVœ8
IK;=+-ü‡
D˜
˜Tôø
Œþ
I˜Tüœ
Ӣ
I˜TüÛ4
üÂT
Q A `Read` implementation that decodes base64 data read from an underlying reader.Á
Ët
# ExamplesÁª
Ë
’Ô´¶
 use std::io::Read;ÁÄÍ
 use std::io::Cursor;Áüæ(
% use base64::engine::general_purpose;Á
Ëü“a
^ // use a cursor as the simplest possible `Read` -- in real code this is probably a file, etc.Áüõ6
3 let mut wrapped_reader = Cursor::new(b"YXNkZg==");Áü¬7
4 let mut decoder = base64::read::DecoderReader::new(Áää
 &mut wrapped_reader,Áü$
! &general_purpose::STANDARD);Á¦
蟻*
' // handle errors as you normally wouldÁüÕ
 let mut result = Vec::new();Áüö.
+ decoder.read_to_end(&mut result).unwrap();Á¥
Ëü©%
" assert_eq!(b"asdf", &result[..]);ÁÏ
Ë
’Ô
 VŸ WÚXXVW©âþB ø
©â„C ƒ
Òš
 „CD†
ášl
õAº.Ó) •’YZ[]^_abcdô
Y[VXD4
IUUÛ›

IUU„CÔ‘
T
IUUµb\
˜TŒî
IUU˜Tt­
<­
IUU˜TüŒ(

IUUµb`”¡
˜T¬à

IUU˜T”™
\™
IUU˜TÄã
΋
IUU˜Tì²

IUU„½üÔG
 fŸ gÚhgfhÝÀ Ý
íÀ è
Òš
…Á
õAiá`iÙ
.035ü¢4
¥
îïð îõA ïÁ`Á`œÃ`è Á]Ä`á¯Á]Ê­\É:•ð‡±e ©
e
i þB„C
þ °
ü§8
 kŸ lÚmlmkÝÀ °
íÀ »
Òš
…Á
õAnqrsw¬
/146ü°,
üæE
B Create a new decoder that will read from the provided reader `r`.Á·
„CÛ›õAjj
n þB„CreaderÁ4»
§ 

nn˜T” 
nn˜Tü³D
Φ
Iñò ñõA òˆê³í³î³Òï³ìð³ñ³ò³ìäs{©¶˜T  ¡Ñ
íÓ¶neò¢Ëfj È
j
q þB„C
á¯Ó
üê!5
Ӓ!
Ió óõAÈÉj €"
j
r þB„C$…"
üê&Z
lí&
Iôõ ôõA˜T õˆÈÉj û&
j
s þB„C$€'
b64_len_to_decodeÁŒ†'
ᯠ'
Ë+
s<closure_kind>Át<closure_signature>Át<upvars>ÁttstþB„CMM  UU¸
Y§ IZéI[õI]ŠI^I_©IaÂIb×IcéIdIº.Ó) •’þB„Cô4
sŠÌu¢Ìu¿ÌuusuþB„CíÍ™ÊÄjDÕ9
sŠÌv¢Ìv¿ÌvvsvþB„C˜T˜T÷Íäœ?
ü‡<Y
V Unwraps this `DecoderReader`, returning the base reader which it reads base64 encodedÁ|å<
input from.Áù<
Ëü=Y
V Because `DecoderReader` performs internal buffering, the state of the inner reader isÁüß=[
X unspecified. This function is mainly provided because the inner reader type may provideÁü¿>X
U additional functionality beyond the `Read` implementation which may still be useful.ÁT£?
õA„Cjj
w þB„C$®?
ü×?E
 yŸ zÚ{{yzÝÀ à?
íÀ ë?
Òš4ã?
…ÁDî?
õA|¡|Ü?
.035ü§D7
ü£@)
& Decode input from the wrapped reader.ÁÑ@
ËüÙ@]
Z Under non-error circumstances, this returns `Ok` with the value being the number of bytesÁ¬»A
 written in `buf`.ÁÕA
ËüÝA^
[ Where possible, this function buffers base64 to minimize the number of read() calls to theÁ¤ÀB
 delegate reader.ÁÙB
ËdáB
# ErrorsÁòB
ËüúBZ
W Any errors emitted by the delegate reader are returned. Decoding errors due to invalidÁüÙCI
F base64 are also possible, and will have `io::ErrorKind::InvalidData`.Á$ªD
ö÷ öõA ÷ˆÈÉx ¯D
x
| þB„C$´D
᯺D
”µY
||˜TäWlÖM»µM ¸M ÓM8÷¹M ¼M ÒM8<½M ÅM7,ÇM$ ÌM8à$ÎMü³M"üB? Implementations of `io::Write` to transparently handle base64.Á,ÞM¹ål‰Œá÷œ´½ãÒä\C<GŠŒ¡$4 ËÐ* ƒÍ/ ï+ø·4 ç ErrorKindÁLA ¥Hý4L žˆ¬ ‚ü7 tvdfSU<>,.üY Dj ˜TÔ»  ˜TüÁ" ¬Ç ˜Tüë5 üê^ [ A `Write` implementation that base64 encodes data before delegating to the wrapped writer.ÁÉ ËüÍ_ \ Because base64 has special handling for the end of the input data (padding, etc), there's aÁü­\ Y `finish()` method on this type that encodes any leftover input bytes and adds padding ifÁüŠ` ] appropriate. It's called automatically when deallocated (see the `Drop` implementation), butÁüë` ] any error that occurs when invoking the underlying writer will be suppressed. If you want toÁüÌ1 . handle such errors, call `finish()` yourself.Áþ Ët‚ ß¹ Ë<• ’Ô¼  use std::io::Write;Áüµ( ˺Þ Ëüâ_ \ // use a vec as the simplest possible `Write` -- in real code this is probably a file, etc.ÁüÂ\ Y let mut enc = base64::write::EncoderWriter::new(Vec::new(), &general_purpose::STANDARD);ÁŸ Ëü£ * ̽üÎ $ ! enc.write_all(b"asdf").unwrap();Áó Ëü÷ C @ // could leave this out to be called by Drop, if you don't careÁü»
@ = // about handling errors or getting the delegate writer backÁüü
) & let delegate = enc.finish().unwrap();Á¦ Ëüª ' $ // base64 was written to the writerÁüÒ + ( assert_eq!(b"YXNkZg==", &delegate[..]);Áþ Ë<‚ ’ÔŠ Ë ™’ ËüŸ _ \ Calling `write()` (or related methods) or `finish()` after `finish()` has completed withoutÁüÿ $ ! error is invalid and will panic.Á¤
Ë
°×µ
Ëü¹
_ \ Base64 encoding itself does not generate errors, but errors from the wrapped writer will beÁü™, ) returned as per the contract of `Write`.ÁÆ ËŒÊ  # PerformanceÁÜ ËüàV S It has some minor performance loss compared to encoding slices (a couple percent).Áü·' $ It does not do any heap allocation.Áß ËŒã  # LimitationsÁõ Ëüù` ] Owing to the specification of the `write` and `flush` methods on the `Write` trait and theirÁüÚ] Z implications for a buffering implementation, these methods may not behave as expected. InÁü¸_ \ particular, calling `write_all` on this interface may fail with `io::ErrorKind::WriteZero`.Áü˜R O See the documentation of the `Write` trait implementation for further details.Á  Ÿ ŽŠŽÝÀ ˆ ©â™D  Òš4‹ ß™DL– áš C^ì*9jz9˜¸ `b]_K4§ ŒŒÛ›œž  ŒŒø°ú°û°Ðü°ý°þ°ìHˈXêE>™Düù(  ŒŒµb¬‹ ˜Tüñ Äñ ŒŒ˜T´¬  ŒŒµb ˜TÔ¦ œ¦ ŒŒ˜Tt«  ŒŒü¾H  šŸ ŠœœšÝÀ Ç Çñ Ò Òš ßñ ›Cá`à 0257ü4  øùú ø›C ùÁ`Á`œÃ`è Á]Ä`á¯Á]Ê­\É:•ú‡±