#[derive(Debug, Clone, Default, PartialEq)]
pub struct QueryResult {
pub headers: Vec<String>,
pub rows: Vec<Vec<QueryValue>>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum QueryValue {
Null,
Bool(bool),
Int(i64),
Float(f64),
Str(String),
Other(String),
}
impl QueryResult {
pub fn new(headers: Vec<String>, rows: Vec<Vec<QueryValue>>) -> Self {
Self { headers, rows }
}
pub fn is_empty(&self) -> bool {
self.rows.is_empty()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn empty_result_is_empty() {
assert!(QueryResult::default().is_empty());
}
#[test]
fn non_empty_result_carries_its_rows() {
let r = QueryResult::new(
vec!["n".to_owned()],
vec![vec![QueryValue::Int(1)], vec![QueryValue::Int(2)]],
);
assert_eq!(r.headers, vec!["n".to_owned()]);
assert_eq!(r.rows.len(), 2);
assert!(!r.is_empty());
}
}