rest_api/database/
response.rs1use 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}