sql_cli/data/adapters/
buffer_adapter.rs1use crate::buffer::BufferAPI;
5use crate::data::data_provider::DataProvider;
6use std::fmt::Debug;
7
8pub struct BufferAdapter<'a> {
10 buffer: &'a (dyn BufferAPI + Send + Sync),
11}
12
13impl<'a> BufferAdapter<'a> {
14 pub fn new(buffer: &'a (dyn BufferAPI + Send + Sync)) -> Self {
15 Self { buffer }
16 }
17}
18
19impl<'a> Debug for BufferAdapter<'a> {
20 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 f.debug_struct("BufferAdapter").finish()
22 }
23}
24
25impl<'a> DataProvider for BufferAdapter<'a> {
26 fn get_row(&self, index: usize) -> Option<Vec<String>> {
27 if let Some(dataview) = self.buffer.get_dataview() {
29 if let Some(row) = dataview.get_row(index) {
30 return Some(row.values.iter().map(|v| v.to_string()).collect());
31 }
32 }
33
34 if let Some(datatable) = self.buffer.get_datatable() {
36 if let Some(row) = datatable.get_row_as_strings(index) {
37 return Some(row);
38 }
39 }
40
41 None
42 }
43
44 fn get_column_names(&self) -> Vec<String> {
45 if let Some(dataview) = self.buffer.get_dataview() {
47 return dataview.column_names();
48 }
49
50 if let Some(datatable) = self.buffer.get_datatable() {
52 return datatable.column_names();
53 }
54
55 Vec::new()
56 }
57
58 fn get_row_count(&self) -> usize {
59 if let Some(dataview) = self.buffer.get_dataview() {
61 return dataview.row_count();
62 }
63
64 if let Some(datatable) = self.buffer.get_datatable() {
66 return datatable.row_count();
67 }
68
69 0
70 }
71
72 fn get_column_count(&self) -> usize {
73 if let Some(dataview) = self.buffer.get_dataview() {
75 return dataview.column_count();
76 }
77
78 if let Some(datatable) = self.buffer.get_datatable() {
80 return datatable.column_count();
81 }
82
83 0
84 }
85}