custom_types/
custom_types.rs1use skytable::{
2 query,
3 query::SQParam,
4 response::{FromResponse, Response},
5 ClientResult, Config,
6};
7
8#[derive(Debug, PartialEq, Clone)]
9struct User {
10 username: String,
11 password: String,
12 followers: u64,
13 email: Option<String>,
14}
15
16impl User {
17 fn new(username: String, password: String, followers: u64, email: Option<String>) -> Self {
18 Self {
19 username,
20 password,
21 followers,
22 email,
23 }
24 }
25}
26
27impl SQParam for User {
28 fn append_param(&self, q: &mut Vec<u8>) -> usize {
29 self.username.append_param(q)
30 + self.password.append_param(q)
31 + self.followers.append_param(q)
32 + self.email.append_param(q)
33 }
34}
35
36impl FromResponse for User {
37 fn from_response(resp: Response) -> ClientResult<Self> {
38 let (username, password, followers, email) = FromResponse::from_response(resp)?;
39 Ok(Self::new(username, password, followers, email))
40 }
41}
42
43fn main() {
44 let mut db = Config::new_default("username", "password")
45 .connect()
46 .unwrap();
47
48 db.query_parse::<()>(&query!("create space myspace"))
51 .unwrap();
52 db.query_parse::<()>(&query!(
54 "create model myspace.mymodel(username: string, password: string, followers: uint64, null email: string)"
55 ))
56 .unwrap();
57
58 let our_user = User::new("myuser".into(), "pass123".into(), 0, None);
60 db.query_parse::<()>(&query!(
61 "insert into myspace.mymodel(?, ?, ?, ?)",
62 our_user.clone()
63 ))
64 .unwrap();
65
66 let ret_user: User = db
68 .query_parse(&query!(
69 "select * from myspace.mymodel WHERE username = ?",
70 &our_user.username
71 ))
72 .unwrap();
73
74 assert_eq!(our_user, ret_user);
75}