use std::path::PathBuf;
use serde::{Deserialize, Serialize};
pub const DEFAULT_SHUTDOWN_GRACE_MS: u64 = 2000;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ParticipantLaunch {
pub participant_id: String,
pub namespace: String,
pub robot_id: String,
#[serde(default)]
pub bus: BusProfile,
#[serde(default)]
pub clock: ClockMode,
#[serde(default)]
pub config: Option<serde_json::Value>,
#[serde(default)]
pub bundle_root: Option<PathBuf>,
#[serde(default)]
pub component_instance: Option<String>,
#[serde(default = "default_grace")]
pub shutdown_grace_ms: u64,
}
fn default_grace() -> u64 {
DEFAULT_SHUTDOWN_GRACE_MS
}
impl ParticipantLaunch {
pub fn local(participant_id: impl Into<String>, robot_id: impl Into<String>) -> Self {
ParticipantLaunch {
participant_id: participant_id.into(),
namespace: "dev".to_string(),
robot_id: robot_id.into(),
bus: BusProfile::default(),
clock: ClockMode::Real,
config: None,
bundle_root: None,
component_instance: None,
shutdown_grace_ms: DEFAULT_SHUTDOWN_GRACE_MS,
}
}
pub fn with_bundle_root(mut self, root: impl Into<PathBuf>) -> Self {
self.bundle_root = Some(root.into());
self
}
pub fn with_component_instance(mut self, instance: impl Into<String>) -> Self {
self.component_instance = Some(instance.into());
self
}
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct BusProfile {
#[serde(default)]
pub connect_endpoints: Vec<String>,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ClockMode {
#[default]
Real,
Simulation,
}