macro_rules! prt {
    ($var:expr) => {
        println!(
            "{:2} {:2} {:p} {:15?} '{}'",
            $var.len(),
            $var.capacity(),
            &$var,
            $var.as_ptr(),
            $var
        );
    };
}

fn main() {
    let res = read_file("cat.txt");
    println!("{:?}", res);
    prt!(res);
}

// fn read_file(file: &str) -> &str {
//     let data = std::fs::read_to_string(file).unwrap();
//     let short = data.trim_end();
//     short
//     // cannot return value referencing local variable `data`
//     // returns a value referencing data owned by the current function
// }

fn read_file(file: &str) -> String {
    let data = std::fs::read_to_string(file).unwrap();
    prt!(data);
    let short = data.trim_end();
    //prt!(short);
    short.to_owned() // this to_owned also copies the data
}
