use std::fmt::Display;
use rmcp::model::{Content, IntoContents};
pub mod backup_tool;
pub mod create_fts_index_tool;
pub mod database_info_tool;
pub mod describe_table_tool;
pub mod execute_tool;
pub mod explain_query_tool;
pub mod list_foreign_keys_tool;
pub mod list_indexes_tool;
pub mod list_tables_tool;
pub mod list_triggers_tool;
pub mod list_views_tool;
pub mod search_fts_tool;
pub mod vacuum_tool;
#[derive(Debug, thiserror::Error)]
pub enum ToolError<E: Display> {
#[error("failed to acquire a database connection: {source}")]
Connection {
source: crate::mcp::ConnectionError,
},
#[error("access denied: {message}")]
AccessDenied {
message: String,
},
#[error("{0}")]
Tool(E),
}
impl<E: Display> IntoContents for ToolError<E> {
fn into_contents(self) -> Vec<Content> {
vec![Content::text(self.to_string())]
}
}