Files
herdr/src/api/schema/server.rs
T
Can Celik 241b99cd39 refactor: share cli and api command contracts (#5212)
* refactor: share cli and api command contracts

* fix: address cli contract review findings
2026-10-13 04:25:38 +03:00

59 lines
2.6 KiB
Rust

use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)]
pub struct PingParams {}
crate::cli::projection::cli_params! {
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ServerLiveHandoffParams => ServerLiveHandoffProjection {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub import_exe: Option<String> => crate::cli::projection::Field::new(None).input(
crate::cli::projection::Input::value("import-exe", "path", |slot, value| {
*slot = Some(value.to_owned());
Ok(())
}).path()
),
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expected_protocol: Option<u32> => crate::cli::projection::Field::new(None).input(
crate::cli::projection::Input::value("expected-protocol", "n", |slot, value| {
*slot = Some(value.parse::<u32>().map_err(|_| {
crate::cli::projection::ParseError::Usage(format!("invalid expected protocol: {value}"))
})?);
Ok(())
})
),
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expected_version: Option<String> => crate::cli::projection::Field::new(None).input(
crate::cli::projection::Input::value("expected-version", "version", |slot, value| {
*slot = Some(value.to_owned());
Ok(())
})
),
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ServerSshAgentRegisterParams {
/// Absolute remote-host agent socket. Registration lasts until this API connection closes.
pub socket_path: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ServerCapabilities {
pub live_handoff: bool,
#[serde(default)]
pub detached_server_daemon: bool,
/// Stable client-owned endpoint generation supported by this server.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub endpoint_protocol_generation: Option<u32>,
/// Whether this server supports explicit client-shell surface interest.
#[serde(default)]
pub surface_interest: bool,
/// Whether this server supports endpoint health probes.
#[serde(default)]
pub health_check: bool,
/// Supports connection-scoped `server.ssh_agent.register` on the local JSON API.
#[serde(default)]
pub ssh_agent_registration: bool,
}