use std::collections::HashMap;
use anyhow::Result;
use kcmc::websocket::WebSocketRequest;
use kcmc::websocket::WebSocketResponse;
use kittycad_modeling_cmds::{self as kcmc};
use uuid::Uuid;
use crate::KclError;
use crate::SourceRange;
use crate::engine_connection::TransportCloseError;
#[async_trait::async_trait]
pub trait EngineTransport: Send + Sync + 'static {
async fn inner_fire_modeling_cmd(
&self,
cmd_id: uuid::Uuid,
source_range: SourceRange,
cmd: WebSocketRequest,
id_to_source_range: HashMap<Uuid, SourceRange>,
) -> Result<(), KclError>;
async fn inner_send_modeling_cmd(
&self,
cmd_id: uuid::Uuid,
source_range: SourceRange,
cmd: WebSocketRequest,
id_to_source_range: HashMap<Uuid, SourceRange>,
) -> Result<WebSocketResponse, KclError>;
async fn start_new_session(&self, _source_range: SourceRange) -> Result<(), KclError> {
Ok(())
}
async fn close(&self) -> Result<(), TransportCloseError>;
}