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}