base64_stream/
lib.rs

1/*!
2# Base64 Stream
3
4To encode/decode large data with the standard Base64 encoding.
5
6## Examples
7
8### Encode
9
10#### ToBase64Reader
11
12```rust
13use std::io::{Cursor, Read};
14
15use base64_stream::ToBase64Reader;
16
17let test_data = b"Hi there, this is a simple sentence used for testing this crate. I hope all cases are correct.".to_vec();
18
19let mut reader = ToBase64Reader::new(Cursor::new(test_data));
20
21let mut base64 = String::new();
22
23reader.read_to_string(&mut base64).unwrap();
24
25assert_eq!("SGkgdGhlcmUsIHRoaXMgaXMgYSBzaW1wbGUgc2VudGVuY2UgdXNlZCBmb3IgdGVzdGluZyB0aGlzIGNyYXRlLiBJIGhvcGUgYWxsIGNhc2VzIGFyZSBjb3JyZWN0Lg==", base64);
26```
27
28#### ToBase64Writer
29
30```rust
31use std::fs::{self, File};
32use std::io::Write;
33use std::path::Path;
34
35use base64_stream::ToBase64Writer;
36
37const DATA_FOLDER: &str = "data";
38const ENCODE_OUTPUT: &str = "encode_output.txt";
39
40let test_data = b"Hi there, this is a simple sentence used for testing this crate. I hope all cases are correct.".as_ref();
41
42let file_path = Path::new("tests").join(DATA_FOLDER).join(ENCODE_OUTPUT);
43
44let base64 = File::create(file_path.as_path()).unwrap();
45
46let mut writer = ToBase64Writer::new(base64);
47
48writer.write_all(test_data).unwrap();
49
50writer.flush().unwrap(); // the flush method is only used when the full plain data has been written
51
52assert_eq!("SGkgdGhlcmUsIHRoaXMgaXMgYSBzaW1wbGUgc2VudGVuY2UgdXNlZCBmb3IgdGVzdGluZyB0aGlzIGNyYXRlLiBJIGhvcGUgYWxsIGNhc2VzIGFyZSBjb3JyZWN0Lg==", fs::read_to_string(file_path).unwrap());
53```
54
55### Decode
56
57#### FromBase64Reader
58
59```rust
60use std::io::Cursor;
61
62use std::io::Read;
63
64use base64_stream::FromBase64Reader;
65
66let base64 = b"SGkgdGhlcmUsIHRoaXMgaXMgYSBzaW1wbGUgc2VudGVuY2UgdXNlZCBmb3IgdGVzdGluZyB0aGlzIGNyYXRlLiBJIGhvcGUgYWxsIGNhc2VzIGFyZSBjb3JyZWN0Lg==".to_vec();
67
68let mut reader = FromBase64Reader::new(Cursor::new(base64));
69
70let mut test_data = String::new();
71
72reader.read_to_string(&mut test_data).unwrap();
73
74assert_eq!("Hi there, this is a simple sentence used for testing this crate. I hope all cases are correct.", test_data);
75```
76
77#### FromBase64Writer
78
79```rust
80use std::fs::{self, File};
81use std::io::Write;
82use std::path::Path;
83
84use base64_stream::FromBase64Writer;
85
86const DATA_FOLDER: &str = "data";
87const DECODE_OUTPUT: &str = "decode_output.txt";
88
89let base64 = b"SGkgdGhlcmUsIHRoaXMgaXMgYSBzaW1wbGUgc2VudGVuY2UgdXNlZCBmb3IgdGVzdGluZyB0aGlzIGNyYXRlLiBJIGhvcGUgYWxsIGNhc2VzIGFyZSBjb3JyZWN0Lg==".as_ref();
90
91let file_path = Path::new("tests").join(DATA_FOLDER).join(DECODE_OUTPUT);
92
93let test_data = File::create(file_path.as_path()).unwrap();
94
95let mut writer = FromBase64Writer::new(test_data);
96
97writer.write_all(base64).unwrap();
98
99writer.flush().unwrap(); // the flush method is only used when the full base64 data has been written
100
101assert_eq!("Hi there, this is a simple sentence used for testing this crate. I hope all cases are correct.", fs::read_to_string(file_path).unwrap());
102```
103
104## Change the Buffer Size
105
106The default buffer size is 4096 bytes. If you want to change that, you can use the `new2` associated function and define a length explicitly to create an instance of the above structs.
107
108For example, to change the buffer size to 256 bytes,
109
110```rust
111use std::io::{Cursor, Read};
112
113use base64_stream::ToBase64Reader;
114use base64_stream::generic_array::typenum::U256;
115
116let test_data = b"Hi there, this is a simple sentence used for testing this crate. I hope all cases are correct.".to_vec();
117
118let mut reader: ToBase64Reader<_, U256> = ToBase64Reader::new2(Cursor::new(test_data));
119
120let mut base64 = String::new();
121
122reader.read_to_string(&mut base64).unwrap();
123
124assert_eq!("SGkgdGhlcmUsIHRoaXMgaXMgYSBzaW1wbGUgc2VudGVuY2UgdXNlZCBmb3IgdGVzdGluZyB0aGlzIGNyYXRlLiBJIGhvcGUgYWxsIGNhc2VzIGFyZSBjb3JyZWN0Lg==", base64);
125```
126*/
127
128pub extern crate base64;
129pub extern crate generic_array;
130
131#[macro_use]
132extern crate educe;
133
134mod from_base64_reader;
135mod from_base64_writer;
136mod to_base64_reader;
137mod to_base64_writer;
138
139pub use from_base64_reader::*;
140pub use from_base64_writer::*;
141pub use to_base64_reader::*;
142pub use to_base64_writer::*;