cppstreams 1.1.0

C++ streams in rust
Documentation
use std::{
    io::{Read, StdinLock},
    ops::Shr,
    str::FromStr,
};

use super::{IStream, Status, as_read::AsRead, into_istream::IntoIStream};

pub struct Cin;

impl IntoIStream for Cin {
    type Reader = StdinLock<'static>;

    #[inline]
    fn into_istream(self) -> IStream<Self::Reader> {
        IStream::new(std::io::stdin().lock())
    }
}

impl From<Cin> for IStream<StdinLock<'static>> {
    #[inline]
    fn from(cin: Cin) -> Self {
        cin.into_istream()
    }
}

impl<T: FromStr> Shr<&mut T> for Cin {
    type Output = Result<Status, T::Err>;

    #[inline]
    fn shr(self, rhs: &mut T) -> Self::Output {
        Into::<IStream<StdinLock>>::into(self) >> rhs
    }
}

impl AsRead for &mut Cin {
    #[inline]
    fn as_read(&mut self) -> impl Read {
        std::io::stdin().lock()
    }
}

impl AsRead for Cin {
    #[inline]
    fn as_read(&mut self) -> impl Read {
        std::io::stdin().lock()
    }
}