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

689 lines
213 KiB
Plaintext
Raw Normal View History

2026-01-24 22:59:20 +00:00
rust
QQ#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ìàýæ,°Kà$¥KænaiveÁ,®àææàúæ,º5à$¯5æ,…( à$ú' µæ,·)
à$¬)
µcoverage_gamingÁ|ÖZ
à$ËZ
æ,¨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· C½CC readÁHdecoderÁIIIIIIIIII IBASE64_CHUNK_SIZEÁIDECODED_CHUNK_SIZEÁI
DecoderReaderÁV¼ VÅ VVÍ VinnerÁV
b64_bufferÁ\ V
b64_offsetÁVb64_lenÁVdecoded_chunk_bufferÁ` Vdecoded_offsetÁV decoded_lenÁVinput_consumed_lenÁVpadding_offsetÁIf¼ fÅ ffÍIk¼ kÅ kk o o kflush_decoded_bufÁkread_from_delegateÁk
decode_to_bufÁt t t k
into_innerÁIy¼ yÅ yyí} 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ÁóóóóóóóóóóïýýýýýýýýýýGeneralPurposeEstimateÁÏ
conservative_decoded_lenÁýŠ ýŒdecoded_len_estimateÁý
decode_helperÁŽ ŽUNROLLED_INPUT_CHUNK_SIZEÁŽUNROLLED_OUTPUT_CHUNK_SIZEÁýcomplete_quads_lenÁ ýdecode_chunk_8Á ýdecode_chunk_4Á ó
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ÁµÄïµïƵ
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Á¿
¿ì¿í¾‚3Ã
Ãì¾InvalidLastSymbolÁÆ
ÆìÆí¾InvalidPaddingÁÊ
µÌȵÎ͵µÑÕµ Ó˜µDecodeSliceErrorÁÕ¡5Ö
ÖìÕÈ4Ù
µ
Ûȵ Ý͵ µ
àÕµâ˜




!
%
%
>
>
>
G
G
j
j
j
r
r
s
t
t
}
}
ž
ž
ž
¦
§
¨
ª
°
°
´
¹
Ñ
Ñ
Ò
Ô
Ô
Õ
×
×
Ù
Ù
ß
ß
à

Ž
Ž
Ž








¡
¡
¡
§
«
«
«
¯
°
°
°
±
²
µ
¸
Á
Î
Î
Î
Ï
Ð
Ð
Ð
Ñ
Ò
Ô
Ô
Ö
Ö
Ø
Ø
Ø
Ú
Ú
Ü
Ü
Ü
Þ
à
à
ã
ã
å
å
å
è
è
ê
ê
ê
í
í
ï
ï
ï
ô
ö




ˆ
Š
Š
Š

 
 
£
£
¦
¦
¦
©
«
«
«
¾
¾
¾
Á
Á
Á
Ã
È
Ë
Ë
Î
Î
é
é
é
ë
ò
õ
õ
õ
ÿ













˜
˜
˜
š
ž
ž
¬
¬
¬
®
±
±

¸
¸
¸
»
»
½
Í
Ï
Ï
Ï
Ò
Ò
Ô
Ü
Þ
Þ
Þ
á
á
ã
ÓËóõ ¦ À ”¥].N1¯· å`//¦
3Ï
&4É
&‚Ú ÿ“P· ¼ Å  ??¢Bþ&Ó,Ë©[=· ½à`VVâ
ZÍ I[I\ŸI^´I_ÅI`ÓIbòIcIdIe²IŽòNDЙ9¼ Å  ‹Bà`Í ÍÝõ˜¨ÃèÌ”Ìm!¼ ”C¼ß±C ±Cß¾¾ªÂ¦ººå|jÁhö¼ ”Cú Ó 8ú ÓÉHÉHÊHœÜ3ËÚ¢×€JÜßÚÚ­ÜÕº;?çqhàxÒú õÛˆÏ
ýýK³ŠzFÆà`ââ´.ãÈ!óåæ!óçº!óª0J+Ç´>ÞÔFËÔFáìì†/í”#óîª/óïÌ/óÇ-•ºyv—ÌÞ´Gþ´Gà`´GÄ´Gó´Gáö÷ø¤0ùú¼0ûüÙ0>h\Dª©TÞ²Hþ²Hà`²H¬â²Hž²H²H£²H¬âˆˆ´1вi±]¬žÏíž¿I¿I£¿Ià`¿IÞ†2–2½í¬„À
à`žJ£žJ¬âžJžžJžJžJ 8à`Ÿ ¡‚3¢£œ3¤ì¥¦¿3§ì¨©ã3ªìD¸ýrk²
å£K¬âKžKKå`KÏKÞ²³´È4¶G|«­¹$à`¼L¬â¼Lž¼L¼L£¼Lå`¼LϼLÞ¾¿À´5ÁìÂíÃÄ‚3ÅìÆÇñ5ÈìÉíÊËŸ6»Æ_j_ªOà`¨M¬â¨Mž¨M¨M£¨Må`¨MϨMÞÕÖס5ØìÙÚÈ4G£bOž.˜à`ñN¬âñNžñNñN£ñNå`ñNÏñNúñN¨M"C?:/‰Ÿª²½¾ÀÕfèâôìöˆ«Ÿ·²Î¾ÝÕy;ÝÚµÕ
ØÉ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Á·T256Á ·T32Áìº  Ö ·T%·T9 ̺ ·TT ·TX·Tüº ! Ú ·T% '·TK·TKü L·T ·T ÎV;Ù·Tä·T·T256Á·T256Á·T256Á·T256Á·Tÿ255Á@·T64Á·T256Á´¹  
$ 
²1A Î ´ë  
$ 
µ1A
4
ü˜ ˆ
â Ÿ
¦
§üÂä ÔF$‰ žJ ´G Ï`·T@,c,Ï`·Týcü´G¾Ì'Vº!Zˆ·T?0x3FÁ?Ï`0x3FÁ„©H T¼H $½H Ï`·T@üÌHš LÚH  æH 
·TüñHo T÷H ,÷H ÿH @·T= €I ¼¦I ,·I   
 '·T·T@= 
G·T·T@ a¢c ,I   œI   ·T·T@$  .·T·T@ üI-   ¼I  ½I   TËI 
 ÔI ·T$ 
'·TJ
·Tü‚I^  ßI Ç
Ï ø“ñHo  Þh<B åI dìI  ùI úI ²üƒG÷ ü¥HÕ üÖH ¢cD¼G cD¤G ¢cËÞhw·T¥ÞhMƒ·TƒÏ`@·T@O·TäØÎVrìÞhóùÌ'{È!Jö É@·T64Á@·T64Á„¨L ¤»L l¼L ¥Ï`·TLÐM  ÜM 
·TüãMú  TéM ,éM ñM @·T= òM ,·O ü“O  ¼“O 
,¤O     '·T·T@=  G·T·T@ a
¢c | 
·T ²O 
ü†O. 
 ·T·T% 
/·T·T ü†O<  Ï` ÁO  ÂO   TÌO  ÕO ·T$ '·TJ·TüôMé  ÞhÜO ô
ü ¦ø”ãMú  Þh=C ÜO dãO  ðO ñO µüÛK– ü¤LÍ üÌM¥ ÀcL”L cDüK Àcî·TÉÞh­ÞhM¨·T¨·Te·TZÏ`Y·TYhæÎV|õÞhüÌ'æ!vöUÒ}¥Ï`·T256Á·T256ÁüŠZ#  
öüÏXé
ì$´Y ,âY  ·Z ¾Z ºüªX” ´G$ÀX ²H|<é_ üÆ_H
ì²H ` ”` »üþ^– ´G$·_ ´G$Ÿ_ <¥_ ypaddingÁ%O,Ðe ü¡eR
ì²H òe ùe ¼üÏdª ´G$’e ´G$üd ,e yèH$Üm ü´mJ
ì ým „n ½üÝl§ ´G$¥m ´G$ƒm ²H$‰m ²HzmodeÁ#Nœ¥q Âc#0ü‘q-

œ‘q 
§\ºq Æ´G
7 ½q üìpS ÂÔFt€q c­c´žJ”¦q cÄCŒžJ{Æ´G:BŒžJ  c3žJBŒŒžJœãr Ãc#0üÏr0

œÏr yY4ør Ç´G
4 þr ü£r] ÃÔFt¾r cªc±žJ”är cÁCŒžJ{Ç´G:BŒžJàc0žJ?ŒŒžJœšt Äc#0ü†t-

œ†t yY¯t Æ´G
4 ²t üásS ÄÔFtõs cªc±žJ”›t cÁCžJ{Æ´G:BžJÄ c0žJ?ŒžJœØu Åc#0üÄu0

œÄu yY4íu Ç´G
4 óu ü˜u] ÅÔFt³u cªc±žJ”Ùu cÁCžJ{Ç´G:BžJÅ c0žJ?ŒžJÜýw
 Ìýw 
º!ü×wB Æ´G¤æw %üy; Üy 
Ìy °ƒ%2
9ϡy 
»E,Äy  Ô°y  Éy ôéy 
öüyy

ÄÐy 
½ª=üÐy8  ‡z üæx£ Ç´G¤øx ´Gô´Gò²H;@·T64Á@·T
ALPHABET_SIZEÁ@·T
ALPHABET_SIZEÁ\…¬“$”Ï`·T@œÅ
 
¹y3 ×L› §
·Tü²q ¬¸   ·T7 Ì œí
   '
 8 
 K
 ·T·T@$ .·T·T@üÜ$
ÿ
  ·T$ '·TJ·TüÎU Þh¡¢¯
·
h ø¡²q Þh<B ¢<´„­
 ¼ ÂÃüÃ
üÂü²ü—¬žJ
 
¢c. 
Ï`·TÎÞh²Þhn®·T®Ï`q·Tq·Tˆ·T7+ÎVÅ?ÞhGN¢c'Ì'£2Õ source_bytesÁÁö|-·T@·T
ALPHABET_SIZEÁœº
 ˇ1 Ìü×fäÚ
$à
ÝpÏ`4 äZ·Tv õü!  
ŸüŒ&
곞JK ± ¼^½
Þh.4üÇü

 å 
·TüôÅ
¬ú
 
l‚·T7
 Ž d­ 2 ¹üé Ï`6  útÿ$ÿ4‡~Ï`6
Β
Þh ìüËo„ÎáÏ`7
|3 ØC
ü°)
Ÿ Øü¬.
곞JK Ùàæì½
Ýü€&  
Ÿ ¥ üü+
곞JK ¦ ¹;~º
Þh06! Ä!
·Tü×·" ÜÝ#$$!#$·T7# ÷$ü{%¤’&\''!(( .&'(?& ¥('„Á*! зT$ *!'·TJ!*·T &%£#À
È
('Š%
ÞhF&L%+,,!”±-.,- .-, 2+, Ã,üÚ{/”Ý01122+.012?0 î21ü•(4$¸554
Ÿ5 ¼5ü‘-
곞JK4 ½4 Ô0/ +#" ¸!L¡2§1Õ/
ÞhS0Y/„ë6! ú·T$ 6!'·TJ!6·Tüù  Þh¾+;#m
u%$ø£×·8 "Þhu8|# "T :  ©·T$ : '·TJ :·Tü©
  Þhk!r¢¸
k
s +ø¢ôÅ
< 
Þh=<C
 
üÐ">??
%ÄÐ
?1>B ñ?üÍ&
곞JK> ò> øùWå
¢ ¨
´64=üßš
ü®Ë üÕî
ü¢
ü®ü î@ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶žJKüƒ  
·
Þhx
v
·Tv
 w
ü÷FK
Þhj ·T˜ Þhùu ·Tu Ï`8 ·T8 ·T- 4 ÞhôñÏ`ñ´Ï`´ü^KíÏ`ìÞhkiÏ`iüß[KÏ`š·TÞhõé·TéÞh¬ª·Tª·TŸü§cÎVpÏ`Í·TÍ·TÂÉÞhÏ`Ï`|üðeKMÏ`LÎV Þh%ÎVügÞhovžJHHÌ'öÏ
° öT  byteÁæ
 probe_indexÁH!
probe_byteÁË+óI ·TS ·TÞ áÏ`2·TüÃ*B @"ü¡*g

ä¡* ¢L% ‡+ü‚*‡ŒžJD–*6üà,B @"ü¾,g

ä¾, ¢L% ¤-üŸ,‡žJD³,6ü˜/B @"üö.g

äö. ¢L% Ü/üÚ.„ŽžJDë.6ü¸0B @"ü–0g

ä–0 ¢L% ü0üù/…žJD‹06üÎ2B @"ü¬2g

ä¬2 ¢L% ’3ü‹2‰žJD¡26üà4C @"ü¾4h

ä¾4 ¢L% ¥5ü 4‡žJD³46 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Á»ËtÀÏ
®complete_input_chunksÁMcomplete_chunk_outputÁì î¼p
encoded_remÁéÑ=Ï`b'='Át§#
Ÿ£%K0Ï`7>|ÿ#
Ÿ¦%K0Ï`7>d³$
Ÿ©%K0Ï`7>
¾À(¨M3·T:Ï`AHl€
¾Ä%¨M0·T7>Œú
¾Ç(¨M3·T:Ï`AH
Õ×%ñN0¨M7>&H€æúµÛáá,ÐK $4øMËùÎ4òN ®ð)lúN ¯•*¤‰O  °Á*œÍO £²+\âO ¨³°4„ïO²´ï4áP ÆÓà,léP ÈÔ…-ŒøP ËÕ®-œ¹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
)
)”ÃK)œÎL|ÒL ¢+\ ©ü43ó $4;Ë 4ÉH
œ›s üAœ_ QSCE¬p8L°,tù  ªâüù´ É–É–

©âÑ–
ý–,“  üÞMœáäå äÑ– å¢ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Þh…—  õ
Ñ–encodedÁ<€ü€1t¼ Å ªâ”C žË”C”C¼ § Í |æùùô›¼ ”C|æùùô›šmo]4¸ ¼ ”CüÊ2¼ Å ª™ Óº™Ö™Ïüƒ2ŠÚÖ™
¼ ”CÍ üåQæçè æÖ™ ç¢ è†Eê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Þh†E
ú  ü©â†E ó †E
¼ ”C†EÏ
sinkÁ$=?¬Á·T¼ç·TD®·Tü®
»
 Ž
 «
8÷

 ª
8<“

7á<
$ ¤
8à
ü‰
$
· Î@”¥].N1¯Ë
´Õ

 · ¦E¼•»ò
 õ
 8÷ö
 ù
 8
 7á<„$ 8à$üð
$·  Î@!šü³/Áé é¦E¦ À ”¥].N1¯é È
!· ö Åü´ »  ±8÷ ˜ °8<™ ¡7á$ ª8àü$· ##Î@$%
%¹""ÞhüñFœôêë êÎ@ ë¢ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ÞhÎ@
" ˆ"
%· $ö |ã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¼ „A‚Ú ÿ“P34íñDF|†,†&// · ¢ü›&|&//§ Í |æùùô›¼ ÃAüÆ0· 6¼ 7Å 8867ºª Óʪ„A9ËÏü¸Füý63 Create a `Base64Display` with the provided engine.Á¿¬« ¼ ÃA„A55
9· ¼ ÃAÏ
Í üù<· ;¼ <Å =<=;ºª ʪ4‰„A>æ`>þ$&ü¼B¿ìíî ì„A íÁ`Á`œÃ`è Á]Ä`bufÁÁ]Ê­\É:•îê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ÞhѼѼÒ¼ štÀ.: Ã:
>· ¼ ÃA formatterÁLÊüü 
&· @½AA@½· 
ӱģ
½½íô°ÏAÓ,Ë©[=B

: £
&?? · Á`Á`œÃ`è Á]Ä`É®Á]Ê­\É:•½üÀ
G· D½EDEÓ±Í
ÏAFG
GÅ
É
 ,“ CCÀ°ü¬ Lœ¯ ïð ïÏA ð¢ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ÞhÏA
C Ã C
G· ½ î— d—M»öL ùL ”M8÷úL ýL “M8<þL †M7,ˆM$ M8à$MüôL"üA> Implementations of `io::Read` to transparently decode base64.Á$ŸMIâlfV\B<FHSTUV $4
ËIK¡5\
¾ILÙó6„)
ÕIMÚ¤.D;
áINÐP
IPÍU
ï+IQioÁZ
çI@
t
Œ|~jlXZœJ
MO?A/1ü™

·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[..]);Áá
Ë
ùÒ
¼ WÅ XYXWY©â”C Š
©âšC 
º™4
 šCD˜
É™
‹BŽòNDЙ9Z[\^_`bcde
Y[VXD4¨
IVVÚ

IVVšCÔ¤
IVVÏ`]
·TŒ„
T„
IVV·Ttä
IVV·TüÉ.
¤É
IVVÏ`a”ä
·T¬¾

IVV·T”©

IVV·TÌš
”š
IVV·Tìë

IVVž»ü»G
¼ gÅ highiß¿ Ä
ï¿ Ï
º™
‡À
Bjá`jÀ
.035ü‰4
Œ
ñòó ñ‹B òÁ`Á`œÃ`è Á]Ä`É®Á]Ê­\É:•óï¯f 
f
j¼ ”CšC$
þ 
üœ8
¼ lÅ mnnmlß¿ ¥
ï¿ °
º™
‡À
Borstx¡
/146ü¥,
üÛE
B Create a new decoder that will read from the provided reader `r`.Á¬
šCÚBkk
o¼ ”CšCreaderÁ4°
Í 

oo·T”›
oo·Tü¯D
Œ²
Iôõ ô‹B õ¢ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶·T  ¡Ñ
íÓ¶neò¢Ëfk Ä
k
r¼ ”CšC
É®Ï
üì#5
ӕ#
Iö ö‹BÊÈk ‚$
k
s¼ ”CšC$‡$
ü²)Z
lµ)
I÷ø ÷‹B·T ø¢ÊÈk Ã)
k
t¼ ”CšC$È)
b64_len_to_decodeÁŒÎ)
É®è)
,“.
t<closure_kind>Áu<closure_signature>Áu<upvars>Áuutu”CšCñN¨M  VVâ
ZÍ I[I\ŸI^´I_ÅI`ÓIbòIcIdIe²IŽòNDЙ9”CšC½;
tŒËv¤ËvÁËvvtv”CšC¨M›ÉÞhDž@
tŒËw¤ËwÁËwwtw”CšC·T·TùÌäçE
üÒBY
V Unwraps this `DecoderReader`, returning the base reader which it reads base64 encodedÁ|°C
input from.ÁÄC
ËüÌCY
V Because `DecoderReader` performs internal buffering, the state of the inner reader is矻D[
X unspecified. This function is mainly provided because the inner reader type may provideÁüŠEX
U additional functionality beyond the `Read` implementation which may still be useful.ÁTîE
BšCkk
x¼ ”CšC$ùE
ü¢FE
¼ zÅ {||z{ß¿ «F
ï¿ ¶F
º™4®F
‡ÀD¹F
B}¡}§F
.035üòJ7
üîF)
& Decode input from the wrapped reader.ÁœG
Ëü¤G]
Z Under non-error circumstances, this returns `Ok` with the value being the number of bytesÁ¬†H
 written in `buf`.Á H
蟬H^
[ Where possible, this function buffers base64 to minimize the number of read() calls to theÁ¤‹I
 delegate reader.Á¤I
Ëd¬I
# ErrorsÁ½I
蟁IZ
W Any errors emitted by the delegate reader are returned. Decoding errors due to invalidÁü¤JI
F base64 are also possible, and will have `io::ErrorKind::InvalidData`.Á$õJ
ùú ù‹B ú¢ÊÈy úJ
y
}¼ ”CšC$ÿJ
É®…K
”€`
}}·TäW¢lÈ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èÌ”Ìm!˜¹ `b]_K4§ Úœž  ø°ú°û°Ðü°ý°þ°ìHˈXêE>¯Düù(  Ï`¬‹ ·Tüñ Äñ ·T´¬  Ï` ·TÔ¦ œ¦ ·Tt«  ü¾H ¼ Å œ¼œß¿ Ç Ëð Ò º™ ãð ±Cžá`žÃ 0257ü4  ûüý û±C üÁ`Á`œÃ`è Á]Ä`É®Á]Ê­\É:•ýﯚ  š
ž¼ ”C¯D$• þ  üï9 ¼  Å ¡¼¢¢ ¡ß¿ ø Ëð ƒ º™ ãðL† ±C£¦§¨ª«ô 79<>üýA ü¯I F Create a new encoder that will write to the provided delegate writer.Á ¯DÚ±CŸŸ
£¼ ”C¯DÍ Í 4• ¬²! ££·TD" ££·TüÕ(% üî"\ Y Encode all remaining buffered data and write it, including any trailing incomplete inputÁüÏ## triples and associated padding.Á÷# Ëüÿ#N K Once this succeeds, no further writes or calls to this method are allowed.ÁÒ$ ËüÚ$_ \ This may write to the delegate writer multiple times if the delegate writer does not acceptÁü¾%6 3 all input provided to its `write` each invocation.Áù% Ëü&] Z If you don't care about error handling, it is not necessary to call this function, as theÁüã&5 2 equivalent finalization is done by the Drop impl.Á' Ëü¥'8 5 Returns the writer that this was constructed around.Áâ' Ëdê' ³Öû' Ëüƒ(M J The first error that is not of `ErrorKind::Interrupted` will be returned.Á4Ü( þ þ±Cê³í³î³Òï³ìð³ñ³ò³ìäs{©¶¯D›ÉŸ ã( Ÿ
¦¼ ”C¯D$è( üø,1 ¬û, ÿ ÿ±Cê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Þh›ÉŸ ‘- Ÿ
§¼ ”C¯D$–- ü¾7H ŒÁ7  ±C·T—Ÿ Ó7 Ÿ
¨¼ ”C¯D$Ø7 current_output_lenÁ”Þ7 T€: ¨ŒË©¤Ë©ÁË©©¨©”C¯DÊÏÞh ·T  Í ÍÝõ˜¨ÃèÌ”Ìm!”C¯Dü­B4 İB  ±CŸ ÉB Ÿ
ª¼ ”C¯D$ÎB üM üªG[ X Unwraps this `EncoderWriter`, returning the base writer it writes base64 encoded outputÁ<ŠH
an error.ÁÁU ËdÉU ³ÖÚU ËüâU; 8 Any errors emitted by the delegate writer are returned.Á,¥V ƒ ±C ƒ¢ÊȬ «V ¬
°¼ ”C¯D$°V inputÁ,¶V â] °ŒË±¤Ë±Á˱±°±”C¯DÞh·TÞh¥ °ŒË²¤Ë²Á˲²°²”C¯DË–ƒ„ƒ„ñ °ŒË³¤Ë³Á˳³°³”C¯D›É›Éˆ„ƒ„ü®ƒ! ü®Y V Because this is usually treated as OK to call multiple times, it will *not* flush anyÁüŒ‚0 - incomplete chunks of input or write padding.ÁdÁ‚ ³ÖÒ‚ ËüÚ‚O L The first error that is not of [`ErrorKind::Interrupted`] will be returned.Á,±ƒ  ±C¬ ·ƒ ¬
´¼ ”C¯D$¼ƒ üô„B ¼ Å ·¼¸·¸ß¿ ý„ Ëð ˆ… º™4€… ãðL‹… ±C¹ ¹ù„ 579;”½… $À…  ±CÞhµ Å… µ
¹¼ ”C¯D$Ê… ÌP¬T¾ÓÚlº» $46˺¼ö¶G纽ì=¬'.<BüÍ
=üLc` A `Write` implementation that base64-encodes data using the provided config and accumulates theÁü°a^ resulting base64 utf8 `&str` in a [StrConsumer] implementation (typically `String`), which isÁü’$! then exposed via `into_inner()`.Á·Ëá¸ÊËüÎ" Buffer base64 in a new String:ÁñËùÒ¼ýøáü•(͹¾ËüÂVS let mut enc = base64::write::EncoderStringWriter::new(&general_purpose::STANDARD);ÁËü$•äÂËüÆ // get the resulting StringÁüæ&# let b64_string = enc.into_inner();ÁËü‘(% assert_eq!("YXNkZg==", &b64_string);ÁùÒÂËüÆGD Or, append to an existing `String`, which implements `StrConsumer`:ÁŽË<’ùÒ¼šøáü²(͹ÛËüß+( let mut buf = String::from("base64: ");ÁËüDA let mut enc = base64::write::EncoderStringWriter::from_consumer(ÁŒÔ &mut buf,Áüæ$–¼Ëü$•ä´Ëü¸(% // release the &mut reference on bufÁìá let _ = enc.into_inner();ÁÿËüƒ )& assert_eq!("base64: YXNkZg==", &buf);Á<­ ùÒµ ËŒ¹ šêË ËüÏ a^ Because it has to validate that the base64 is UTF-8, it is about 80% as fast as writing plainÁܱ
 bytes to a `io::Write`.ÁœØ
¼ ¿Å Àú ÁÁ¿Àß¿ ð
¸ û
º™
Ó†E
É™WÐDºå|jÁhöÂì
HJMOü‘ :<‘ º¾¾Í ÍÝõ˜¨ÃèÌ”Ìm!¼ ”CÚÚ­ÜÕº;?çqhàxÒ†EüÐ A¼ ÄÅ Åú ÆÅÄÆß¿ Ù ¸ ä º™ º© ÐDÇÈÕ +-02üí <ü˜ PM Create a EncoderStringWriter that will append to the provided `StrConsumer`.Álô †EÚÐDÃÃ
Ǽ ”C†EÕd‚