use super::*; use std::time::Duration; #[derive(Clone)] pub(crate) struct EnvironmentRequestProcessor { environment_manager: Arc, } impl EnvironmentRequestProcessor { pub(crate) fn new(environment_manager: Arc) -> Self { Self { environment_manager, } } pub(crate) async fn environment_add( &self, params: EnvironmentAddParams, ) -> Result, JSONRPCErrorError> { self.environment_manager .upsert_environment( params.environment_id, params.exec_server_url, params.connect_timeout_ms.map(Duration::from_millis), ) .map_err(|err| invalid_request(err.to_string()))?; Ok(Some(EnvironmentAddResponse {}.into())) } pub(crate) async fn environment_info( &self, params: EnvironmentInfoParams, ) -> Result, JSONRPCErrorError> { let environment_id = params.environment_id; let environment = self .environment_manager .get_environment(&environment_id) .ok_or_else(|| invalid_request(format!("unknown environment id `{environment_id}`")))?; let info = environment.info().await.map_err(|err| { internal_error(format!( "failed to get info for environment `{environment_id}`: {err}" )) })?; Ok(Some( EnvironmentInfoResponse { shell: EnvironmentShellInfo { name: info.shell.name, path: info.shell.path, }, cwd: info.cwd, } .into(), )) } }