storage_macro_chunk/
storage_macro_chunk.rs1use colink::{decode_jwt_without_validation, CoLink};
2use rand::Rng;
3use std::env;
4
5const CHUNK_SIZE: usize = 1024 * 1024; #[tokio::main]
8async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
9 let args = env::args().skip(1).collect::<Vec<_>>();
10 let addr = &args[0];
11 let jwt = &args[1];
12 let length = if args.len() > 2 {
13 args[2].parse::<usize>().unwrap()
14 } else {
15 5e6 as usize };
17 let user_id = decode_jwt_without_validation(jwt).unwrap().user_id;
18 println!("user_id: {}", user_id);
19 let cl = CoLink::new(addr, jwt);
20 let key_name = "storage_macro_demo:$chunk";
21 let payload = rand::thread_rng()
22 .sample_iter(&rand::distributions::Standard)
23 .take(length)
24 .collect::<Vec<u8>>();
25
26 println!("Creating entry...");
28 let response = cl.create_entry(key_name, &payload.clone()).await?;
29 println!("created entry at key name: {}", response);
30
31 println!("Reading entry...");
33 let data = cl.read_entry(key_name).await?;
34 assert_eq!(data, payload);
35 println!(
36 "Read payload of {}MB ({} bytes), verified to be same as bytes written",
37 payload.len() as f32 / CHUNK_SIZE as f32,
38 payload.len()
39 );
40
41 println!("Updating entry...");
43 let new_payload = rand::thread_rng()
44 .sample_iter(&rand::distributions::Standard)
45 .take(length / 2)
46 .collect::<Vec<u8>>();
47 let response = cl.update_entry(key_name, &new_payload.clone()).await?;
48 println!("updated entry at key name: {}", response);
49
50 println!("Reading entry again...");
52 let data = cl.read_entry(key_name).await?;
53 assert_eq!(data, new_payload);
54 println!(
55 "Read payload of {}MB ({} bytes), verified to be same as the updated payload bytes",
56 new_payload.len() as f32 / CHUNK_SIZE as f32,
57 new_payload.len()
58 );
59
60 println!("Deleting entry...");
62 cl.delete_entry(key_name).await?;
63 Ok(())
64}