use atty::Stream;
use copypasta::{ClipboardContext, ClipboardProvider};
use std::env::args;
use std::fs;
use std::io::{stdin, Read};
use std::path::PathBuf;
fn write_to_clipboard<T: AsRef<str>>(content: T) {
let mut ctx: ClipboardContext = ClipboardContext::new().unwrap();
ctx.set_contents(content.as_ref().to_owned()).unwrap();
}
fn print_to_terminal() {
let mut ctx: ClipboardContext = ClipboardContext::new().unwrap();
if let Ok(r) = ctx.get_contents(){
if !r.is_empty(){
println!("{}",r);
}
}
}
fn main() {
if atty::isnt(Stream::Stdin) {
let mut buffer = String::new();
stdin().read_to_string(&mut buffer).unwrap();
write_to_clipboard(buffer.trim());
return;
}
match args().len() {
1 => return print_to_terminal(),
2 => {
if let Some(path) = args().nth(1) {
let abs_path = PathBuf::from(path)
.canonicalize()
.expect("Failed to canonicalize path");
let res = fs::read_to_string(abs_path).expect("File does not exist");
return write_to_clipboard(res);
}
}
_ => panic!("unexpected number of args"),
}
}