Struct RawStdio

Source
pub struct RawStdio { /* private fields */ }

Implementations§

Source§

impl RawStdio

Source

pub fn new(handle: &Handle) -> Result<Self>

Examples found in repository?
examples/echo.rs (line 40)
35fn main() {
36    // Create the event loop that will drive this server
37    let mut l = Core::new().unwrap();
38    let handle = l.handle();
39
40    let stdio = async_readline::RawStdio::new(&handle).unwrap();
41    let (stdin, stdout, _) = stdio.split();
42
43    let framed_in = stdin.framed(CharCodec);
44    let framed_out = stdout.framed(CharCodec);
45
46    let done = framed_in
47        .map(move |ch| {
48            format!("got: {}\n", ch)
49        })
50        .forward(framed_out);
51
52    l.run(done).unwrap();
53}
More examples
Hide additional examples
examples/readline.rs (line 20)
13fn main() {
14    // Create the event loop that will drive this server
15    let mut l = Core::new().unwrap();
16    let handle = l.handle();
17
18    let periodic_timer1 = tokio_core::reactor::Interval::new(std::time::Duration::from_millis(2500), &handle).unwrap();
19    let periodic_timer2 = tokio_core::reactor::Interval::new(std::time::Duration::from_millis(500), &handle).unwrap();
20    let stdio = async_readline::RawStdio::new(&handle).unwrap();
21    let (stdin, stdout, _) = stdio.split();
22
23
24    let (commands, rl_writer) = async_readline::init(stdin, stdout);
25
26    let acc1 = Rc::new(RefCell::new(0));
27    let acc2 = acc1.clone();
28    let acc3 = acc1.clone();
29    let connected1 = Rc::new(RefCell::new(false));
30    let connected2 = connected1.clone();
31    let connected3 = connected1.clone();
32
33    let done = commands
34        .map(move |line| {
35            *connected1.borrow_mut() = false;
36            *acc1.borrow_mut() = 0;
37
38            let mut v = vec!();
39            let _ = write!(v, "\n> ");
40            v.append(&mut line.line.clone());
41            v
42        })
43        .select(
44            periodic_timer1
45            .map(|_| {
46                let mut v = vec!();
47                if *connected2.borrow() {
48                    *acc2.borrow_mut() += 1;
49                    let _ = write!(v, "\nFiles ready: {} ", *acc2.borrow());
50                }
51                v
52            })
53            )
54        .select(
55            periodic_timer2.map(|_| {
56                let mut v = vec!();
57                if !*connected3.borrow() {
58                    *acc3.borrow_mut() += 1;
59                    if *acc3.borrow() > 3 {
60                        let _ = write!(v, "\nConnected!");
61                        *acc3.borrow_mut() = 0;
62                        *connected3.borrow_mut() = true;
63                    } else {
64                        let _ = write!(v, "\nConnecting... ");
65                    }
66                } else if *acc3.borrow() > 10 {
67                    let _ = write!(v, "Disconnecting... ");
68                    *acc3.borrow_mut() = 0;
69                    *connected3.borrow_mut() = false;
70                } else if *acc3.borrow() > 5 {
71                    let _ = write!(v, "Error... ");
72                }
73
74                v
75            })
76            )
77            .forward(rl_writer);
78
79    l.run(done).unwrap();
80}
Source

pub fn split( self, ) -> (PollEvented<StdioFd>, PollEvented<StdioFd>, PollEvented<StdioFd>)

Examples found in repository?
examples/echo.rs (line 41)
35fn main() {
36    // Create the event loop that will drive this server
37    let mut l = Core::new().unwrap();
38    let handle = l.handle();
39
40    let stdio = async_readline::RawStdio::new(&handle).unwrap();
41    let (stdin, stdout, _) = stdio.split();
42
43    let framed_in = stdin.framed(CharCodec);
44    let framed_out = stdout.framed(CharCodec);
45
46    let done = framed_in
47        .map(move |ch| {
48            format!("got: {}\n", ch)
49        })
50        .forward(framed_out);
51
52    l.run(done).unwrap();
53}
More examples
Hide additional examples
examples/readline.rs (line 21)
13fn main() {
14    // Create the event loop that will drive this server
15    let mut l = Core::new().unwrap();
16    let handle = l.handle();
17
18    let periodic_timer1 = tokio_core::reactor::Interval::new(std::time::Duration::from_millis(2500), &handle).unwrap();
19    let periodic_timer2 = tokio_core::reactor::Interval::new(std::time::Duration::from_millis(500), &handle).unwrap();
20    let stdio = async_readline::RawStdio::new(&handle).unwrap();
21    let (stdin, stdout, _) = stdio.split();
22
23
24    let (commands, rl_writer) = async_readline::init(stdin, stdout);
25
26    let acc1 = Rc::new(RefCell::new(0));
27    let acc2 = acc1.clone();
28    let acc3 = acc1.clone();
29    let connected1 = Rc::new(RefCell::new(false));
30    let connected2 = connected1.clone();
31    let connected3 = connected1.clone();
32
33    let done = commands
34        .map(move |line| {
35            *connected1.borrow_mut() = false;
36            *acc1.borrow_mut() = 0;
37
38            let mut v = vec!();
39            let _ = write!(v, "\n> ");
40            v.append(&mut line.line.clone());
41            v
42        })
43        .select(
44            periodic_timer1
45            .map(|_| {
46                let mut v = vec!();
47                if *connected2.borrow() {
48                    *acc2.borrow_mut() += 1;
49                    let _ = write!(v, "\nFiles ready: {} ", *acc2.borrow());
50                }
51                v
52            })
53            )
54        .select(
55            periodic_timer2.map(|_| {
56                let mut v = vec!();
57                if !*connected3.borrow() {
58                    *acc3.borrow_mut() += 1;
59                    if *acc3.borrow() > 3 {
60                        let _ = write!(v, "\nConnected!");
61                        *acc3.borrow_mut() = 0;
62                        *connected3.borrow_mut() = true;
63                    } else {
64                        let _ = write!(v, "\nConnecting... ");
65                    }
66                } else if *acc3.borrow() > 10 {
67                    let _ = write!(v, "Disconnecting... ");
68                    *acc3.borrow_mut() = 0;
69                    *connected3.borrow_mut() = false;
70                } else if *acc3.borrow() > 5 {
71                    let _ = write!(v, "Error... ");
72                }
73
74                v
75            })
76            )
77            .forward(rl_writer);
78
79    l.run(done).unwrap();
80}

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.