rust_rcs_core/io/
async_io.rs

1// Copyright 2023 宋昊文
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use std::{
16    io::Read,
17    pin::Pin,
18    task::{Context, Poll},
19};
20
21use futures::AsyncRead;
22
23use super::{BytesReader, DynamicChain};
24
25impl AsyncRead for BytesReader<'_> {
26    fn poll_read(
27        self: Pin<&mut Self>,
28        _cx: &mut Context<'_>,
29        buf: &mut [u8],
30    ) -> Poll<std::io::Result<usize>> {
31        let p = self.get_mut();
32        match p.read(buf) {
33            Ok(size) => Poll::Ready(Ok(size)),
34            Err(e) => Poll::Ready(Err(e)),
35        }
36    }
37}
38
39impl AsyncRead for DynamicChain<'_> {
40    fn poll_read(
41        self: Pin<&mut Self>,
42        _cx: &mut Context<'_>,
43        buf: &mut [u8],
44    ) -> Poll<std::io::Result<usize>> {
45        let p = self.get_mut();
46        match p.read(buf) {
47            Ok(size) => Poll::Ready(Ok(size)),
48            Err(e) => Poll::Ready(Err(e)),
49        }
50    }
51}