iced?
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -1705,6 +1705,7 @@ dependencies = [
|
|||||||
"iced_core",
|
"iced_core",
|
||||||
"log",
|
"log",
|
||||||
"rustc-hash 2.1.1",
|
"rustc-hash 2.1.1",
|
||||||
|
"tokio",
|
||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
"wasm-timer",
|
"wasm-timer",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ edition = "2024"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.100"
|
anyhow = "1.0.100"
|
||||||
iced = "0.13.1"
|
iced = { version = "0.13.1", features = ["tokio"] }
|
||||||
imara-diff = "0.2.0"
|
imara-diff = "0.2.0"
|
||||||
nucleo-matcher = "0.3.1"
|
nucleo-matcher = "0.3.1"
|
||||||
rmcp = { version = "0.8.0", features = ["server", "macros", "transport-sse-server", "transport-io", "transport-streamable-http-server", "elicitation", "schemars"] }
|
rmcp = { version = "0.8.0", features = ["server", "macros", "transport-sse-server", "transport-io", "transport-streamable-http-server", "elicitation", "schemars"] }
|
||||||
|
|||||||
24
src/gui.rs
24
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) => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
33
src/main.rs
33
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 rmcp::{ServiceExt, transport::stdio};
|
||||||
|
use tokio::runtime::Runtime;
|
||||||
use tracing_subscriber::{self, EnvFilter};
|
use tracing_subscriber::{self, EnvFilter};
|
||||||
|
|
||||||
mod fossil;
|
mod fossil;
|
||||||
|
mod gui;
|
||||||
mod matcher;
|
mod matcher;
|
||||||
mod mcp;
|
mod mcp;
|
||||||
|
|
||||||
#[tokio::main]
|
fn main() -> iced::Result {
|
||||||
async fn main() {
|
|
||||||
tracing_subscriber::fmt()
|
tracing_subscriber::fmt()
|
||||||
.with_env_filter(EnvFilter::from_default_env().add_directive(tracing::Level::DEBUG.into()))
|
.with_env_filter(EnvFilter::from_default_env().add_directive(tracing::Level::DEBUG.into()))
|
||||||
.with_writer(std::io::stderr)
|
.with_writer(std::io::stderr)
|
||||||
.with_ansi(false)
|
.with_ansi(false)
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
tracing::info!("Starting MCP server");
|
let rt = Runtime::new().unwrap();
|
||||||
|
|
||||||
let editor = FossilEditor::new();
|
let editor = FossilEditor::new();
|
||||||
let service = editor
|
rt.spawn(async {
|
||||||
.serve(stdio())
|
let service = editor
|
||||||
.await
|
.serve(stdio())
|
||||||
.inspect_err(|e| {
|
.await
|
||||||
tracing::error!("serving error: {:?}", e);
|
.inspect_err(|e| {
|
||||||
})
|
tracing::error!("serving error: {:?}", e);
|
||||||
.unwrap();
|
})
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
service.waiting().await.unwrap();
|
service.waiting().await.unwrap();
|
||||||
|
});
|
||||||
|
|
||||||
|
iced::run("A cool counter", update, view)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user