rest_api/database/
response.rs

1use sqlite3::Value as SqlValue;
2
3use json::JsonValue;
4
5pub trait ResponseBuilder<T> {
6    fn from_row_data(row_data: Vec<Vec<T>>) -> String;
7}
8
9pub struct Sqlite3ResponseBuilder;
10impl ResponseBuilder<SqlValue> for Sqlite3ResponseBuilder {
11    fn from_row_data(row_data: Vec<Vec<SqlValue>>) -> String {
12        let mut root = JsonValue::Array(vec![]);
13        
14        for row in row_data {
15            let mut row_root = JsonValue::Array(vec![]);
16
17            for val in row {
18                let json_value = match val {
19                    SqlValue::Float(f) => JsonValue::Number(json::number::Number::from(f)),
20                    SqlValue::Integer(i) => JsonValue::Number(json::number::Number::from(i)),
21                    SqlValue::String(s) => JsonValue::String(s),
22                    SqlValue::Null => JsonValue::Null,
23                    t => {
24                        log::debug!("Invalid SQLite3 type: {:?}", t);
25                        continue
26                    }
27                };
28                let _ = row_root.push(json_value);
29            }
30
31            let _ = root.push(row_root);
32        }
33
34        root.to_string()
35    }
36}