1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*a Copyright
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@file lib.rs
@brief UTF-8 stream reader
*/
//a Documentation
/*!
# UTF8 reader
The `utf8-read` module provides a streaming `char` [Reader] that
converts any stream with the [std::io::Read] into a stream of `char`
values, performing UTF8 decoding incrementally.
If the [std::io::Read] stream comes from a file then this is just a
streaming version of (e.g.) std::fs::read_to_string, but if the it
comes from, e.g., a [std::net::TcpStream] then it has more value:
iterating through the characters of the stream will terminate when the
TCP stream has stalled mid-UTF8, and can restart when the TCP stream
gets more data.
The [Reader] provided also allows for reading large UTF8 files
piecewise; it only reads up to 2kB of data at a time from its stream.
# Example
An example use would be:
```
use utf8_read::Reader;
let str = "This is a \u{1f600} string\nWith a newline\n";
let mut buf_bytes = str.as_bytes();
let mut reader = Reader::new(&mut buf_bytes);
for x in reader.into_iter() {
// use char x
}
```
From a file, one could do:
```
use utf8_read::Reader;
let in_file = std::fs::File::open("Cargo.toml").unwrap();
let mut reader = Reader::new(&in_file);
for x in reader.into_iter() {
// use char x
}
```
!*/
//a Imports
//a Exports
pub use ;
pub use StreamPosition;
pub use Reader;