@@ -213,9 +213,40 @@ expose `is_failed()` and fail closed after malformed Base64 input; unchecked
213213` into_inner() ` remains available for explicit recovery of the wrapped object
214214after a decode error.
215215
216- The ` tokio ` feature is reserved for future async wrappers. It is currently
217- inert and dependency-free; use the explicit ` stream ` feature for ` std::io `
218- wrappers.
216+ The core crate's ` tokio ` feature is reserved, inert, and dependency-free. For
217+ Tokio applications, use the optional ` base64-ng-tokio ` companion crate instead:
218+
219+ ``` toml
220+ [dependencies ]
221+ base64-ng = " 1.3.3"
222+ base64-ng-tokio = " 1.3.3"
223+ tokio = { version = " 1.52.3" , features = [" io-util" ] }
224+ ```
225+
226+ ``` rust
227+ use base64_ng :: STANDARD ;
228+ use base64_ng_tokio :: {encode_reader_to_writer_limited, EncoderReader , EncoderWriter };
229+ use tokio :: io :: {AsyncReadExt , AsyncWriteExt };
230+
231+ # async fn example () -> std :: io :: Result <()> {
232+ let mut input = & b " hello" [.. ];
233+ let mut output = Vec :: new ();
234+ encode_reader_to_writer_limited (& STANDARD , & mut input , & mut output , 1024 ). await ? ;
235+ assert_eq! (output , b " aGVsbG8=" );
236+
237+ let mut reader = EncoderReader :: new (& b " hello" [.. ], STANDARD );
238+ let mut streamed = Vec :: new ();
239+ reader . read_to_end (& mut streamed ). await ? ;
240+ assert_eq! (streamed , b " aGVsbG8=" );
241+
242+ let mut writer = EncoderWriter :: new (Vec :: new (), STANDARD );
243+ writer . write_all (b " hello" ). await ? ;
244+ writer . shutdown (). await ? ;
245+ let encoded = writer . into_inner ()? ;
246+ assert_eq! (encoded , b " aGVsbG8=" );
247+ # Ok (())
248+ # }
249+ ```
219250
220251## Security Notes
221252
0 commit comments