use serde::{Deserialize, Serialize};
use super::CommandOutput;
use crate::WebShareScope;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WebShareResponse {
Created(WebShareCreatedResponse),
List(WebShareListResponse),
Stopped(WebShareStoppedResponse),
StoppedAll(WebShareStoppedAllResponse),
Lookup(WebShareLookupResponse),
Config(WebShareConfigResponse),
}
impl WebShareResponse {
#[must_use]
pub fn command_output(&self) -> Option<&CommandOutput> {
match self {
Self::Created(response) => Some(&response.output),
Self::List(response) => Some(&response.output),
Self::Stopped(response) => Some(&response.output),
Self::StoppedAll(response) => Some(&response.output),
Self::Lookup(response) => Some(&response.output),
Self::Config(response) => Some(&response.output),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WebShareCreatedResponse {
pub share_id: String,
pub scope: WebShareScope,
#[serde(default)]
pub spectator_url: Option<String>,
#[serde(default)]
pub operator_url: Option<String>,
#[serde(default)]
pub tunnel_provider: Option<String>,
#[serde(default)]
pub tunnel_public_url: Option<String>,
#[serde(default)]
pub expires_at_unix: Option<u64>,
#[serde(default)]
pub operator_pairing_code: Option<String>,
#[serde(default)]
pub spectator_pairing_code: Option<String>,
#[serde(default)]
pub max_spectators: Option<u16>,
#[serde(default)]
pub max_operators: Option<u16>,
pub operator: bool,
pub spectator: bool,
pub controls: bool,
pub kill_session_on_expire: bool,
pub output: CommandOutput,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WebShareListResponse {
pub shares: Vec<WebShareSummary>,
pub output: CommandOutput,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WebShareStoppedResponse {
pub share_id: String,
pub stopped: bool,
pub output: CommandOutput,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WebShareStoppedAllResponse {
pub stopped: u32,
pub output: CommandOutput,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WebShareLookupResponse {
#[serde(default)]
pub share: Option<WebShareSummary>,
pub output: CommandOutput,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WebShareConfigResponse {
pub listener: WebShareListener,
pub output: CommandOutput,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WebShareSummary {
pub share_id: String,
pub scope: WebShareScope,
#[serde(default)]
pub spectator_url: Option<String>,
pub operator: bool,
pub spectator: bool,
pub controls: bool,
pub active_spectators: u16,
pub active_operators: u16,
#[serde(default)]
pub max_spectators: Option<u16>,
#[serde(default)]
pub max_operators: Option<u16>,
#[serde(default)]
pub expires_at_unix: Option<u64>,
#[serde(default)]
pub kill_session_on_expire: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WebShareListener {
pub host: String,
pub port: u16,
pub frontend_origin: String,
}