Skip to main content

zmodem2_bin/
lib.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2// Copyright (c) 2017-2020 Alexey Arbuzov
3// Copyright (c) 2023-2025 Jarkko Sakkinen
4
5use std::io::{stdin, stdout, Read as StdRead, Stdin, Stdout, Write as StdWrite};
6
7pub trait ReadWrite: zmodem2::Read + zmodem2::Write + StdRead + StdWrite {}
8
9impl<T: zmodem2::Read + zmodem2::Write + StdRead + StdWrite> ReadWrite for T {}
10
11pub struct CombinedStdInOut {
12    stdin: Stdin,
13    stdout: Stdout,
14}
15
16impl Default for CombinedStdInOut {
17    fn default() -> Self {
18        Self::new()
19    }
20}
21
22impl CombinedStdInOut {
23    pub fn new() -> CombinedStdInOut {
24        CombinedStdInOut {
25            stdin: stdin(),
26            stdout: stdout(),
27        }
28    }
29}
30
31impl StdRead for CombinedStdInOut {
32    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
33        self.stdin.read(buf)
34    }
35}
36
37impl StdWrite for CombinedStdInOut {
38    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
39        self.stdout.write(buf)
40    }
41
42    fn flush(&mut self) -> std::io::Result<()> {
43        self.stdout.flush()
44    }
45}