pub struct FileOrStdin<T = String> { /* private fields */ }
Expand description
Wrapper struct to either read in a file or contents from stdin
FileOrStdin
can wrap any type that matches the trait bounds for Arg
: FromStr
and Clone
use std::path::PathBuf;
use clap::Parser;
use clap_stdin::FileOrStdin;
#[derive(Debug, Parser)]
struct Args {
input: FileOrStdin,
}
if let Ok(args) = Args::try_parse() {
println!("input={}", args.input.contents()?);
}
$ echo "1 2 3 4" > input.txt
$ cat input.txt | ./example -
1 2 3 4
$ ./example input.txt
1 2 3 4
Implementations§
Source§impl<T> FileOrStdin<T>
impl<T> FileOrStdin<T>
Sourcepub fn is_file(&self) -> bool
pub fn is_file(&self) -> bool
Was this value read from a file (path passed in from argument values)
Sourcepub fn filename(&self) -> &str
pub fn filename(&self) -> &str
The value passed to this arg (Either “-” for stdin or a filepath)
Sourcepub fn contents(self) -> Result<T, StdinError>
pub fn contents(self) -> Result<T, StdinError>
Read the entire contents from the input source, returning T::from_str
Sourcepub fn into_reader(self) -> Result<impl Read, StdinError>
pub fn into_reader(self) -> Result<impl Read, StdinError>
Create a reader from the source, to allow user flexibility of how to read and parse (e.g. all at once or in chunks)
use std::io::Read;
use clap_stdin::FileOrStdin;
use clap::Parser;
#[derive(Parser)]
struct Args {
input: FileOrStdin,
}
let args = Args::parse();
let mut reader = args.input.into_reader()?;
let mut buf = vec![0;8];
reader.read_exact(&mut buf)?;
Trait Implementations§
Source§impl<T: Clone> Clone for FileOrStdin<T>
impl<T: Clone> Clone for FileOrStdin<T>
Source§fn clone(&self) -> FileOrStdin<T>
fn clone(&self) -> FileOrStdin<T>
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<T: Debug> Debug for FileOrStdin<T>
impl<T: Debug> Debug for FileOrStdin<T>
Auto Trait Implementations§
impl<T> Freeze for FileOrStdin<T>
impl<T> RefUnwindSafe for FileOrStdin<T>where
T: RefUnwindSafe,
impl<T> Send for FileOrStdin<T>where
T: Send,
impl<T> Sync for FileOrStdin<T>where
T: Sync,
impl<T> Unpin for FileOrStdin<T>where
T: Unpin,
impl<T> UnwindSafe for FileOrStdin<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more