# Cinner (pronounced "Sinner") is an utility to write I/O operation in C++ style
### It features C++ like style for `cin` and `cout`
---
## Why?
- Because I'm bored of writing `std::io::stdin().read_line(&mut holder).trim().parse::()` and `println!("{}", )` all the time
- Because I didn't find any other library that does this
- Because I didn't have anything to do
- Because ~~I'm a C++ programmer~~ I like C++ style
### Also, I wanted to learn more "advanced" Rust lmao
### I learnt:
- `Operator overloading` with `traits` (I'm still not sure if I did it right)
- The importance of `.trim()` (I forgot to add it in the first version and it took >5hrs to find the bug)
- Using `trait bounds` in `generic functions`
- `Variadics` (they're so cool)
- Publishing crates to `crates.io`
# Usage
- Add `cinner = ""` to your `Cargo.toml` file
### You can use:
```rust
use cinner::{cin, cout};
fn main(){
let mut i = 0;
let _ = cin >> &mut i;
let _ = cout << i << "\n";
}
```
### As opposed to:
```rust
fn main(){
let mut holder = String::new();
let i = std::io::stdin().read_line(&mut holder).trim().parse::().unwrap();
println!("{}", i);
}
```
## Also it's recursive, so you can do:
```rust
use cinner::{cin, cout};
fn main(){
let mut i = 0;
let mut j = 0_f32;
let _ = cin >> &mut i >> &mut j;
let _ = cout << i << "\n";
}
```
## If you have any suggestions, `DCDA`
# Updates
- Cinner now supports "endl" functionality
© 2022 Sarad (Chronos Ltd.)