bronzedb-client 0.1.1

client lib for bronzedb
Documentation
use bronzedb_client::Connection;
use bronzedb_util::status::{Error, Result, StatusCode};
use std::io::{self, Write};
use std::net::TcpStream;

fn main() -> Result<()> {
    let mut addr = String::new();
    print!("Please enter address: ");
    io::stdout().flush()?;
    io::stdin().read_line(&mut addr)?;
    let stream = TcpStream::connect(addr.trim_end())?;
    let mut client = Connection::new(stream);
    loop {
        let mut buf = String::new();
        io::stdin().read_line(&mut buf)?;
        let action: Vec<&str> = buf.trim_end().split(' ').collect();
        debug_assert!(action.len() > 0);
        match action[0].to_lowercase().as_str() {
            "set" => {
                debug_assert!(action.len() == 3);
                client.set(
                    action[1].as_bytes().to_vec().into(),
                    action[2].as_bytes().to_vec(),
                )?;
                println!("OK")
            }

            "get" => {
                debug_assert!(action.len() == 2);
                let value = client.get(action[1].as_bytes().to_vec().into())?;
                match value {
                    Some(data) => println!("{}", String::from_utf8(data).unwrap()),
                    None => println!("<None>"),
                }
            }

            "delete" => {
                debug_assert!(action.len() == 2);
                client.delete(action[1].as_bytes().to_vec().into())?;
                println!("OK")
            }

            "scan" => {
                let mut lower_key = String::new();
                let mut upper_key = String::new();
                print!("lower_bound(default <None>): ");
                io::stdout().flush()?;
                io::stdin().read_line(&mut lower_key)?;
                let lower_bound = match lower_key.trim_end() {
                    "" => None,
                    key => Some(key.as_bytes().to_vec().into()),
                };

                print!("upper_bound(default <None>): ");
                io::stdout().flush()?;
                io::stdin().read_line(&mut upper_key)?;
                let upper_bound = match upper_key.trim_end() {
                    "" => None,
                    key => Some(key.as_bytes().to_vec().into()),
                };
                let scanner = client.scan(lower_bound, upper_bound)?;
                let mut counter = 0;
                for item in scanner {
                    let (key, value) = item?;
                    println!(
                        "{}: {}",
                        String::from_utf8(key.to_vec()).unwrap(),
                        String::from_utf8(value).unwrap()
                    );
                    counter += 1;
                }
                println!("{} items:", counter);
            }
            _ => {
                break Err(Error::new(
                    StatusCode::UnknownAction,
                    format!("unknown action: {}", action[0]),
                ));
            }
        }
    }
}