use serde::Serialize;
use utoipa::ToSchema;
use crate::index::admin_levels_hierarchy_tantivy::tantivy_index;
const SQL_COORDINATES_PROBE: &str = "
SELECT 1
FROM admin_levels_rtree
LIMIT 1
";
#[derive(Serialize, ToSchema)]
pub(crate) struct status_output {
pub(crate) is_ok: bool,
pub(crate) databases: Vec<database_status>,
}
#[derive(Serialize, ToSchema)]
pub(crate) struct database_status {
pub(crate) file: String,
pub(crate) text_to_address: bool,
pub(crate) coordinates_to_address: bool,
}
pub(crate) fn build(
file: &str,
conn: &rusqlite::Connection,
index: Option<&tantivy_index>,
) -> status_output {
assemble(file, index.is_some(), probe_coordinates(conn))
}
fn assemble(file: &str, text_to_address: bool, coordinates_to_address: bool) -> status_output {
let database = database_status {
file: file.to_string(),
text_to_address,
coordinates_to_address,
};
let is_ok = database.text_to_address && database.coordinates_to_address;
status_output {
is_ok,
databases: vec![database],
}
}
fn probe_coordinates(conn: &rusqlite::Connection) -> bool {
conn.prepare(SQL_COORDINATES_PROBE).is_ok()
}
#[cfg(test)]
#[path = "status.test.rs"]
mod tests;