datafusion_dft/tui/state/
mod.rspub mod tabs;
use crate::tui::state::tabs::sql::SQLTabState;
use crate::tui::ui::SelectedTab;
use log::{debug, error, info};
use std::path::PathBuf;
use self::tabs::{history::HistoryTabState, logs::LogsTabState};
use crate::config::AppConfig;
#[cfg(feature = "flightsql")]
use crate::tui::state::tabs::flightsql::FlightSQLTabState;
#[derive(Debug)]
pub struct Tabs {
pub selected: SelectedTab,
}
impl Default for Tabs {
fn default() -> Self {
Self {
selected: SelectedTab::SQL,
}
}
}
#[derive(Debug)]
pub struct AppState<'app> {
pub config: AppConfig,
pub should_quit: bool,
pub sql_tab: SQLTabState<'app>,
#[cfg(feature = "flightsql")]
pub flightsql_tab: FlightSQLTabState<'app>,
pub logs_tab: LogsTabState,
pub history_tab: HistoryTabState,
pub tabs: Tabs,
}
pub fn initialize<'app>(config_path: PathBuf) -> AppState<'app> {
debug!("Initializing state");
debug!("Config path: {:?}", config_path);
let config = if config_path.exists() {
debug!("Config exists");
let maybe_config_contents = std::fs::read_to_string(config_path);
if let Ok(config_contents) = maybe_config_contents {
let maybe_parsed_config: std::result::Result<AppConfig, toml::de::Error> =
toml::from_str(&config_contents);
match maybe_parsed_config {
Ok(parsed_config) => {
info!("Parsed config: {:?}", parsed_config);
parsed_config
}
Err(err) => {
error!("Error parsing config: {:?}", err);
AppConfig::default()
}
}
} else {
AppConfig::default()
}
} else {
debug!("No config, using default");
AppConfig::default()
};
AppState::new(config)
}
impl AppState<'_> {
pub fn new(config: AppConfig) -> Self {
let tabs = Tabs::default();
let sql_tab_state = SQLTabState::new(&config);
#[cfg(feature = "flightsql")]
let flightsql_tab_state = FlightSQLTabState::new(&config);
let logs_tab_state = LogsTabState::default();
let history_tab_state = HistoryTabState::default();
AppState {
config,
tabs,
sql_tab: sql_tab_state,
#[cfg(feature = "flightsql")]
flightsql_tab: flightsql_tab_state,
logs_tab: logs_tab_state,
history_tab: history_tab_state,
should_quit: false,
}
}
}