diff --git a/Cargo.lock b/Cargo.lock index aeb3fb5..51105c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1705,6 +1705,7 @@ dependencies = [ "iced_core", "log", "rustc-hash 2.1.1", + "tokio", "wasm-bindgen-futures", "wasm-timer", ] diff --git a/Cargo.toml b/Cargo.toml index bf48ddb..4b5d1c7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" [dependencies] anyhow = "1.0.100" -iced = "0.13.1" +iced = { version = "0.13.1", features = ["tokio"] } imara-diff = "0.2.0" nucleo-matcher = "0.3.1" rmcp = { version = "0.8.0", features = ["server", "macros", "transport-sse-server", "transport-io", "transport-streamable-http-server", "elicitation", "schemars"] } diff --git a/src/gui.rs b/src/gui.rs index e69de29..78e09b0 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -0,0 +1,24 @@ +use iced::{Element, widget::text_editor}; + +#[derive(Default)] +pub struct State { + content: text_editor::Content, +} + +#[derive(Debug, Clone)] +pub enum Message { + Edit(text_editor::Action), +} + +pub fn view(state: &State) -> Element<'_, Message> { + text_editor(&state.content) + .placeholder("Type something here...") + .on_action(Message::Edit) + .into() +} + +pub fn update(state: &mut State, message: Message) { + match message { + Message::Edit(action) => {} + } +} diff --git a/src/main.rs b/src/main.rs index e3bedae..f25be96 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,29 +1,38 @@ -use crate::mcp::FossilEditor; +use crate::{ + gui::{update, view}, + mcp::FossilEditor, +}; +use iced::Executor; use rmcp::{ServiceExt, transport::stdio}; +use tokio::runtime::Runtime; use tracing_subscriber::{self, EnvFilter}; mod fossil; +mod gui; mod matcher; mod mcp; -#[tokio::main] -async fn main() { +fn main() -> iced::Result { tracing_subscriber::fmt() .with_env_filter(EnvFilter::from_default_env().add_directive(tracing::Level::DEBUG.into())) .with_writer(std::io::stderr) .with_ansi(false) .init(); - tracing::info!("Starting MCP server"); + let rt = Runtime::new().unwrap(); let editor = FossilEditor::new(); - let service = editor - .serve(stdio()) - .await - .inspect_err(|e| { - tracing::error!("serving error: {:?}", e); - }) - .unwrap(); + rt.spawn(async { + let service = editor + .serve(stdio()) + .await + .inspect_err(|e| { + tracing::error!("serving error: {:?}", e); + }) + .unwrap(); - service.waiting().await.unwrap(); + service.waiting().await.unwrap(); + }); + + iced::run("A cool counter", update, view) }