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 Debug for BufferAdapter<'_> {
20 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 f.debug_struct("BufferAdapter").finish()
22 }
23}
24
25impl DataProvider for BufferAdapter<'_> {
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(
31 row.values
32 .iter()
33 .map(std::string::ToString::to_string)
34 .collect(),
35 );
36 }
37 }
38
39 if let Some(datatable) = self.buffer.get_datatable() {
41 if let Some(row) = datatable.get_row_as_strings(index) {
42 return Some(row);
43 }
44 }
45
46 None
47 }
48
49 fn get_column_names(&self) -> Vec<String> {
50 if let Some(dataview) = self.buffer.get_dataview() {
52 return dataview.column_names();
53 }
54
55 if let Some(datatable) = self.buffer.get_datatable() {
57 return datatable.column_names();
58 }
59
60 Vec::new()
61 }
62
63 fn get_row_count(&self) -> usize {
64 if let Some(dataview) = self.buffer.get_dataview() {
66 return dataview.row_count();
67 }
68
69 if let Some(datatable) = self.buffer.get_datatable() {
71 return datatable.row_count();
72 }
73
74 0
75 }
76
77 fn get_column_count(&self) -> usize {
78 if let Some(dataview) = self.buffer.get_dataview() {
80 return dataview.column_count();
81 }
82
83 if let Some(datatable) = self.buffer.get_datatable() {
85 return datatable.column_count();
86 }
87
88 0
89 }
90}