mirror of
https://github.com/herdrdev/herdr.git
synced 2026-11-06 00:06:18 +00:00
* refactor: share cli and api command contracts * fix: address cli contract review findings
59 lines
2.6 KiB
Rust
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,
|
|
}
|