From 2e1fb0a60a671cd609ff603fa5a371341b7e0fe9 Mon Sep 17 00:00:00 2001 From: Mroik Date: Wed, 5 Mar 2025 10:01:11 +0100 Subject: Add capability to pipe in text Can now pipe in text instead of specifying the filename. --- src/main.rs | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 4803c26..ad66a3e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,12 @@ pub mod error; pub mod event; pub mod state; -use std::{error::Error, fs::read_to_string, path::Path}; +use std::{ + error::Error, + fs::read_to_string, + io::{stdin, IsTerminal, Read}, + path::Path, +}; use app::App; use clap::Parser; @@ -36,13 +41,18 @@ fn generate_quotes(path: &Path) -> Result, Box> { #[tokio::main] async fn main() -> Result<(), Box> { - let args = Args::parse(); - let path = Path::new(&args.quote); - let mut quotes = generate_quotes(path).unwrap(); - let mut rng = thread_rng(); - let chosen = rng.gen_range(0..quotes.len()); - let quote = quotes.remove(chosen); - drop(quotes); + let quote = if !stdin().is_terminal() { + let mut b = Vec::new(); + stdin().read_to_end(&mut b).unwrap(); + String::from_utf8(b).unwrap() + } else { + let args = Args::parse(); + let path = Path::new(&args.quote); + let mut quotes = generate_quotes(path).unwrap(); + let mut rng = thread_rng(); + let chosen = rng.gen_range(0..quotes.len()); + quotes.remove(chosen) + }; // TODO Add more options to choose quotes let mut app = App::new("e); -- cgit v1.3