use std::collections::HashMap;
use std::io::{self, BufReader};
use crate::Transport;
use crate::transports::{BoxedHandler, Stream};
#[derive(Default)]
pub struct Stdio;
impl Stdio {
pub fn new() -> Self {
Stdio
}
}
impl<C> Transport<C> for Stdio
where
C: Send + Sync,
{
type Handler = BoxedHandler<C>;
type Output = ();
type Error = std::io::Error;
fn serve(
self,
ctx: C,
handlers: HashMap<String, Self::Handler>,
) -> Result<Self::Output, Self::Error> {
let stdin = io::stdin();
let reader = BufReader::new(stdin.lock());
let writer = io::stdout();
Stream::new(reader, writer).serve(ctx, handlers)
}
}