dynamic_lists_advanced/
dynamic_lists_advanced.rs1use skytable::{
13 query::{QList, SQParam},
14 response::{FromResponse, RList},
15 Config,
16};
17
18#[derive(Debug, PartialEq)]
19struct User {
20 username: String,
21 password: String,
22 data: Vec<String>,
23}
24
25impl User {
26 fn new(username: String, password: String, data: Vec<String>) -> Self {
27 Self {
28 username,
29 password,
30 data,
31 }
32 }
33}
34
35impl SQParam for User {
36 fn append_param(&self, q: &mut Vec<u8>) -> usize {
37 self.username.append_param(q)
38 + self.password.append_param(q)
39 + QList::new(&self.data).append_param(q)
40 }
41}
42
43impl FromResponse for User {
44 fn from_response(resp: skytable::response::Response) -> skytable::ClientResult<Self> {
45 let (username, password, data) = resp.parse::<(_, _, RList<String>)>()?;
46 Ok(Self::new(username, password, data.into_values()))
47 }
48}
49
50fn get_data_from_api() -> User {
51 User {
52 username: "sayan".to_owned(),
53 password: "ulw06afuMCAg+1gh2lh1Y9xTIr/dUv2vqGLeZ39cVrE=".to_owned(),
54 data: vec![
55 "stuff".to_owned(),
56 "from".to_owned(),
57 "the".to_owned(),
58 "api".to_owned(),
59 ],
60 }
61}
62
63fn main() {
64 let mut db = Config::new_default("root", "password12345678")
65 .connect()
66 .unwrap();
67 let data_from_api = get_data_from_api();
68 db.query_parse::<()>(&skytable::query!(
69 "insert into myapp.mydb { username: ?, password: ?, data: ? }",
70 &data_from_api
71 ))
72 .unwrap();
73 let fetched_user: User = db
74 .query_parse(&skytable::query!(
75 "select * from myapp.mydb where username = ?",
76 "sayan"
77 ))
78 .unwrap();
79 assert_eq!(data_from_api, fetched_user);
80}