#![type_length_limit = "8165158"]
mod common;
use tikv_client::Config;
use tikv_client::IntoOwnedRange;
use tikv_client::Key;
use tikv_client::KvPair;
use tikv_client::RawClient as Client;
use tikv_client::Result;
use tikv_client::Value;
use crate::common::parse_args;
const KEY: &str = "TiKV";
const VALUE: &str = "Rust";
#[tokio::main]
async fn main() -> Result<()> {
env_logger::init();
let args = parse_args("raw");
let config = if let (Some(ca), Some(cert), Some(key)) = (args.ca, args.cert, args.key) {
Config::default().with_security(ca, cert, key)
} else {
Config::default()
}
.with_default_keyspace();
let client = Client::new_with_config(args.pd, config).await?;
client.put(KEY.to_owned(), VALUE.to_owned()).await.unwrap(); println!("Put key {KEY:?}, value {VALUE:?}.");
let value: Option<Value> = client.get(KEY.to_owned()).await?;
assert_eq!(value, Some(Value::from(VALUE.to_owned())));
println!("Get key `{KEY}` returned value {value:?}.");
client
.delete(KEY.to_owned())
.await
.expect("Could not delete value");
println!("Key: `{KEY}` deleted");
let value: Option<Value> = client
.get(KEY.to_owned())
.await
.expect("Could not get just deleted entry");
assert!(value.is_none());
let pairs = vec![
KvPair::from(("k1".to_owned(), "v1".to_owned())),
KvPair::from(("k2".to_owned(), "v2".to_owned())),
KvPair::from(("k3".to_owned(), "v3".to_owned())),
];
client.batch_put(pairs).await.expect("Could not put pairs");
let keys = vec![Key::from("k1".to_owned()), Key::from("k2".to_owned())];
let values = client
.batch_get(keys.clone())
.await
.expect("Could not get values");
println!("Found values: {values:?} for keys: {keys:?}");
let start = "k1";
let end = "k2";
let pairs = client
.scan((start..=end).into_owned(), 10)
.await
.expect("Could not scan");
let keys: Vec<_> = pairs.into_iter().map(|p| p.key().clone()).collect();
assert_eq!(
&keys,
&[Key::from("k1".to_owned()), Key::from("k2".to_owned()),]
);
println!("Scanning from {start:?} to {end:?} gives: {keys:?}");
let k1 = "k1";
let k2 = "k2";
let k3 = "k3";
let batch_scan_keys = vec![
(k1.to_owned()..=k2.to_owned()),
(k2.to_owned()..=k3.to_owned()),
(k1.to_owned()..=k3.to_owned()),
];
let kv_pairs = client
.batch_scan(batch_scan_keys.to_owned(), 10)
.await
.expect("Could not batch scan");
let vals: Vec<_> = kv_pairs
.into_iter()
.map(|p| String::from_utf8(p.1).unwrap())
.collect();
assert_eq!(
&vals,
&[
"v1".to_owned(),
"v2".to_owned(),
"v2".to_owned(),
"v3".to_owned(),
"v1".to_owned(),
"v2".to_owned(),
"v3".to_owned()
]
);
println!("Scanning batch scan from {batch_scan_keys:?} gives: {vals:?}");
client.delete_range("".to_owned().."".to_owned()).await?;
Ok(())
}