mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-05 19:58:32 +00:00
Auto merge of #86847 - tlyu:stdin-forwarders, r=joshtriplett
add `Stdin::lines`, `Stdin::split` forwarder methods Add forwarder methods `Stdin::lines` and `Stdin::split`, which consume and lock a `Stdin` handle, and forward on to the corresponding `BufRead` methods. This should make it easier for beginners to use those iterator constructors without explicitly dealing with locks or lifetimes. Replaces #86412. ~~Based on #86846 to get the tracking issue number for the `stdio_locked` feature.~~ Rebased after merge, so it's only one commit now. r? `@joshtriplett` `@rustbot` label +A-io +C-enhancement +D-newcomer-roadblock +T-libs-api
This commit is contained in:
commit
cf932aa584
@ -7,7 +7,7 @@ use crate::io::prelude::*;
|
|||||||
|
|
||||||
use crate::cell::{Cell, RefCell};
|
use crate::cell::{Cell, RefCell};
|
||||||
use crate::fmt;
|
use crate::fmt;
|
||||||
use crate::io::{self, BufReader, Initializer, IoSlice, IoSliceMut, LineWriter};
|
use crate::io::{self, BufReader, Initializer, IoSlice, IoSliceMut, LineWriter, Lines, Split};
|
||||||
use crate::lazy::SyncOnceCell;
|
use crate::lazy::SyncOnceCell;
|
||||||
use crate::pin::Pin;
|
use crate::pin::Pin;
|
||||||
use crate::sync::atomic::{AtomicBool, Ordering};
|
use crate::sync::atomic::{AtomicBool, Ordering};
|
||||||
@ -446,6 +446,49 @@ impl Stdin {
|
|||||||
pub fn into_locked(self) -> StdinLock<'static> {
|
pub fn into_locked(self) -> StdinLock<'static> {
|
||||||
self.lock_any()
|
self.lock_any()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Consumes this handle and returns an iterator over input lines.
|
||||||
|
///
|
||||||
|
/// For detailed semantics of this method, see the documentation on
|
||||||
|
/// [`BufRead::lines`].
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```no_run
|
||||||
|
/// #![feature(stdin_forwarders)]
|
||||||
|
/// use std::io;
|
||||||
|
///
|
||||||
|
/// let lines = io::stdin().lines();
|
||||||
|
/// for line in lines {
|
||||||
|
/// println!("got a line: {}", line.unwrap());
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "stdin_forwarders", issue = "87096")]
|
||||||
|
pub fn lines(self) -> Lines<StdinLock<'static>> {
|
||||||
|
self.into_locked().lines()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Consumes this handle and returns an iterator over input bytes,
|
||||||
|
/// split at the specified byte value.
|
||||||
|
///
|
||||||
|
/// For detailed semantics of this method, see the documentation on
|
||||||
|
/// [`BufRead::split`].
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```no_run
|
||||||
|
/// #![feature(stdin_forwarders)]
|
||||||
|
/// use std::io;
|
||||||
|
///
|
||||||
|
/// let splits = io::stdin().split(b'-');
|
||||||
|
/// for split in splits {
|
||||||
|
/// println!("got a chunk: {}", String::from_utf8_lossy(&split.unwrap()));
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "stdin_forwarders", issue = "87096")]
|
||||||
|
pub fn split(self, byte: u8) -> Split<StdinLock<'static>> {
|
||||||
|
self.into_locked().split(byte)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "std_debug", since = "1.16.0")]
|
#[stable(feature = "std_debug", since = "1.16.0")]
|
||||||
|
Loading…
Reference in New Issue
Block a user