client.rs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. use serde_json::Value;
  2. use spiral_rs::client::*;
  3. use spiral_rs::util::*;
  4. use std::env;
  5. use std::time::Instant;
  6. fn send_api_req_text(api_url: &str, path: &str, data: Vec<u8>) -> Result<String, reqwest::Error> {
  7. let client = reqwest::blocking::Client::builder()
  8. .timeout(None)
  9. .build()
  10. .unwrap();
  11. client
  12. .post(format!("{}{}", api_url, path))
  13. .body(data)
  14. .send()?
  15. .text()
  16. }
  17. fn send_api_req_vec(api_url: &str, path: &str, data: Vec<u8>) -> Result<Vec<u8>, reqwest::Error> {
  18. let client = reqwest::blocking::Client::builder()
  19. .timeout(None)
  20. .build()
  21. .unwrap();
  22. Ok(client
  23. .post(format!("{}{}", api_url, path))
  24. .body(data)
  25. .send()?
  26. .bytes()?
  27. .to_vec())
  28. }
  29. fn main() {
  30. let cfg_expand = r#"
  31. {'n': 2,
  32. 'nu_1': 10,
  33. 'nu_2': 6,
  34. 'p': 512,
  35. 'q2_bits': 21,
  36. 's_e': 85.83255142749422,
  37. 't_gsw': 10,
  38. 't_conv': 4,
  39. 't_exp_left': 16,
  40. 't_exp_right': 56,
  41. 'instances': 11,
  42. 'db_item_size': 100000 }
  43. "#;
  44. let _cfg_direct = r#"
  45. {'direct_upload': 1,
  46. 'n': 5,
  47. 'nu_1': 11,
  48. 'nu_2': 3,
  49. 'p': 65536,
  50. 'q2_bits': 27,
  51. 's_e': 57.793748020122216,
  52. 't_gsw': 3,
  53. 't_conv': 56,
  54. 't_exp_left': 56,
  55. 't_exp_right': 56}
  56. "#;
  57. let cfg = cfg_expand;
  58. let cfg = cfg.replace("'", "\"");
  59. let params = params_from_json(&cfg);
  60. let args: Vec<String> = env::args().collect();
  61. let api_url = &args[1];
  62. let idx_target: usize = (&args[2]).parse().unwrap();
  63. println!("initializing client");
  64. let mut c = Client::init(&params);
  65. println!("generating public parameters");
  66. let pub_params = c.generate_keys();
  67. let pub_params_buf = pub_params.serialize();
  68. println!("pub_params size {}", pub_params_buf.len());
  69. let query = c.generate_query(idx_target);
  70. let mut query_buf = query.serialize();
  71. println!("initial query size {}", query_buf.len());
  72. let setup_resp_str = send_api_req_text(api_url, "/setup", pub_params_buf).unwrap();
  73. println!("{}", setup_resp_str);
  74. let resp_json: Value = serde_json::from_str(&setup_resp_str).unwrap();
  75. let id = resp_json["id"].as_str().unwrap();
  76. let mut full_query_buf = id.as_bytes().to_vec();
  77. full_query_buf.append(&mut query_buf);
  78. let now = Instant::now();
  79. let query_resp = send_api_req_vec(api_url, "/query", full_query_buf).unwrap();
  80. let duration = now.elapsed().as_millis();
  81. println!("duration of query processing is {} ms", duration);
  82. println!("query_resp len {}", query_resp.len());
  83. // println!("query_resp {:x?}", query_resp);
  84. let result = c.decode_response(query_resp.as_slice());
  85. println!("{:x?}", result);
  86. }