use crate::error::Result;
use crate::tool::IcarusTool;
use async_trait::async_trait;
use candid::Principal;
use rmcp::ServerHandler;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Version {
pub major: u8,
pub minor: u8,
pub patch: u8,
}
impl Version {
pub fn new(major: u8, minor: u8, patch: u8) -> Self {
Self {
major,
minor,
patch,
}
}
}
#[async_trait]
pub trait IcarusServer: ServerHandler + Send + Sync {
async fn on_canister_init(&mut self) -> Result<()> {
Ok(())
}
async fn on_canister_upgrade(&mut self, _from_version: Version) -> Result<()> {
Ok(())
}
async fn on_pre_upgrade(&mut self) -> Result<()> {
Ok(())
}
async fn on_post_upgrade(&mut self) -> Result<()> {
Ok(())
}
fn canister_id(&self) -> Option<Principal> {
None
}
fn register_tool(&mut self, tool: Box<dyn IcarusTool>) -> Result<()>;
}