]>
git.proxmox.com Git - rustc.git/blob - vendor/minifier/src/json/read/json_read.rs
1 // Take a look at the license at the top of the repository in the LICENSE file.
4 json_minifier
::JsonMinifier
,
5 read
::byte_to_char
::{ByteToChar, CharsError}
,
9 io
::{Error, ErrorKind, Read}
,
13 pub struct JsonRead
<P
, R
> {
14 minifier
: JsonMinifier
,
16 iter
: Option
<ByteToChar
<R
>>,
19 item_iter
: Option
<IntoIter
<u8>>,
23 impl<P
, R
: Read
> JsonRead
<P
, R
> {
25 pub fn new(read
: R
, predicate
: P
) -> Self {
27 minifier
: JsonMinifier
::default(),
37 fn get_next(&mut self) -> Result
<Option
<char>, CharsError
> {
38 match self.iter
.as_mut().unwrap().next() {
40 Some(item
) => match item
{
41 Ok(item
) => Ok(Some(item
)),
47 fn add_char_to_buffer(&mut self, buf
: &mut [u8], buf_pos
: &mut usize) {
48 if let Some(ref mut iter
) = self.item_iter
{
49 while *buf_pos
< buf
.len() {
50 if let Some(byte
) = iter
.next() {
61 impl<P
, R
: Read
+ fmt
::Debug
> fmt
::Debug
for JsonRead
<P
, R
> {
62 fn fmt(&self, f
: &mut fmt
::Formatter
<'_
>) -> fmt
::Result
{
63 f
.debug_struct("Filter")
64 .field("iter", &self.iter
)
65 .field("initialized", &self.initialized
)
70 impl<P
, R
> Read
for JsonRead
<P
, R
>
73 P
: FnMut(&mut JsonMinifier
, &char, Option
<&char>) -> bool
,
75 fn read(&mut self, buf
: &mut [u8]) -> Result
<usize, Error
> {
76 let mut buf_pos
: usize = 0;
82 if !self.initialized
{
83 self.iter
= Some(ByteToChar
::new(self.read
.take().unwrap(), buf
.len())?
);
84 self.item1
= self.get_next()?
;
85 self.initialized
= true;
88 while let Some(item
) = self.item1
.take() {
89 self.item1
= self.get_next()?
;
90 if (self.predicate
)(&mut self.minifier
, &item
, self.item1
.as_ref()) {
91 self.item_iter
= Some(item
.to_string().into_bytes().into_iter());
92 self.add_char_to_buffer(buf
, &mut buf_pos
);
94 if buf_pos
>= buf
.len() {
102 impl From
<CharsError
> for Error
{
103 fn from(_
: CharsError
) -> Self {
104 Error
::from(ErrorKind
::InvalidData
)