use std::io::{stdin, BufRead, IsTerminal};
use anyhow::Result;
use clap::{arg, Parser, Subcommand};
#[derive(Parser)]
#[command(name = "wiki-o", author, version, about, arg_required_else_help = true)]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Commands>,
}
#[derive(Subcommand)]
pub enum Commands {
Add {
#[arg(value_name = "NOTE")]
note: String,
#[arg(short, long)]
file: Option<String>,
},
Show {
#[arg(short, long)]
file: String,
#[arg(short, long)]
complete: Option<bool>,
},
List {
#[arg(short, long)]
short: Option<bool>,
},
Delete {
#[arg(short, long)]
file: String,
},
Purge {},
Pa {
#[arg(short, long)]
file: Option<String>,
},
Config {},
}
pub fn pipe_command() -> Result<String> {
let mut input = String::new();
loop {
let mut buffer = String::new();
if stdin().is_terminal() {
break;
}
match stdin().lock().read_line(&mut buffer) {
Ok(len) => {
if len == 0 {
break;
} else {
input.push_str(&buffer);
}
}
Err(_) => {
break;
}
}
}
Ok(input)
}