skimmer 0.0.3

Simple streams reader
Documentation
use crate::reader::{BytesReader, IoreadeofReader, Read, SliceReader};

use std::fs;
use std::io;
use std::net;

#[cfg(unix)]
use std::os::unix::net::UnixStream;

pub trait IntoReader
where
    Self::Reader: Read,
{
    type Reader;

    fn into_reader(self) -> Self::Reader;
}

impl IntoReader for &'static str {
    type Reader = SliceReader;

    fn into_reader(self) -> SliceReader {
        SliceReader::new(self.as_bytes())
    }
}

impl IntoReader for String {
    type Reader = BytesReader;

    fn into_reader(self) -> BytesReader {
        BytesReader::new(self.into_bytes())
    }
}

impl IntoReader for Vec<u8> {
    type Reader = BytesReader;

    fn into_reader(self) -> BytesReader {
        let s = String::from_utf8(self);

        let bytes = match s {
            Ok(s) => s.into_bytes(),
            Err(_) => Vec::new(),
        };

        BytesReader::new(bytes)
    }
}

impl IntoReader for fs::File {
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

impl<'a> IntoReader for &'a fs::File {
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

impl IntoReader for net::TcpStream {
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

impl<'a> IntoReader for &'a net::TcpStream {
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

#[cfg(unix)]
impl IntoReader for UnixStream {
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

#[cfg(unix)]
impl<'a> IntoReader for &'a UnixStream {
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

impl<R> IntoReader for io::BufReader<R>
where
    R: io::Read,
{
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

impl<T> IntoReader for io::Cursor<T>
where
    T: AsRef<[u8]>,
{
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

impl<'a, R> IntoReader for &'a mut R
where
    R: io::Read + ?Sized,
{
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

impl<R> IntoReader for Box<R>
where
    R: io::Read + ?Sized,
{
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}

impl<'a> IntoReader for &'a [u8] {
    type Reader = IoreadeofReader;

    fn into_reader(self) -> IoreadeofReader {
        IoreadeofReader::new(self)
    }
}