You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
obws/src/events.rs

280 lines
7.5 KiB
Rust

//! All events that can be received from the API.
use std::{collections::BTreeMap, path::PathBuf};
use serde::Deserialize;
/// All possible event types that can occur while the user interacts with OBS.
#[derive(Clone, Debug, Deserialize)]
#[serde(tag = "eventType", content = "eventData")]
pub enum Event {
// --------------------------------
// Config
// --------------------------------
#[serde(rename_all = "camelCase")]
CurrentSceneCollectionChanged {
scene_collection_name: String,
},
#[serde(rename_all = "camelCase")]
SceneCollectionListChanged {
scene_collections: Vec<String>,
},
#[serde(rename_all = "camelCase")]
CurrentProfileChanged {
profile_name: String,
},
#[serde(rename_all = "camelCase")]
ProfileListChanged {
profiles: Vec<String>,
},
// --------------------------------
// Filters
// --------------------------------
// --------------------------------
// General
// --------------------------------
ExitStarted,
#[serde(rename_all = "camelCase")]
StudioModeStateChanged {
studio_mode_enabled: bool,
},
// --------------------------------
// Inputs
// --------------------------------
#[serde(rename_all = "camelCase")]
InputCreated {
input_name: String,
input_kind: String,
unversioned_input_kind: String,
input_settings: serde_json::Value,
default_input_settings: serde_json::Value,
},
#[serde(rename_all = "camelCase")]
InputRemoved {
input_name: String,
},
#[serde(rename_all = "camelCase")]
InputNameChanged {
old_input_name: String,
input_name: String,
},
#[serde(rename_all = "camelCase")]
InputActiveStateChanged {
input_name: String,
video_active: bool,
},
#[serde(rename_all = "camelCase")]
InputShowStateChanged {
input_name: String,
video_showing: bool,
},
#[serde(rename_all = "camelCase")]
InputMuteStateChanged {
input_name: String,
input_muted: bool,
},
#[serde(rename_all = "camelCase")]
InputVolumeChanged {
input_name: String,
input_volume_mul: f64,
input_volume_db: f64,
},
#[serde(rename_all = "camelCase")]
InputAudioSyncOffsetChanged {
input_name: String,
input_audio_sync_offset: i64,
},
#[serde(rename_all = "camelCase")]
InputAudioTracksChanged {
input_name: String,
input_audio_tracks: BTreeMap<String, bool>,
},
// --------------------------------
// Media Inputs
// --------------------------------
#[serde(rename_all = "camelCase")]
MediaInputPlaybackStarted {
input_name: String,
},
#[serde(rename_all = "camelCase")]
MediaInputPlaybackEnded {
input_name: String,
},
#[serde(rename_all = "camelCase")]
MediaInputActionTriggered {
input_name: String,
media_action: MediaAction,
},
// --------------------------------
// Outputs
// --------------------------------
#[serde(rename_all = "camelCase")]
StreamStateChanged {
output_active: bool,
output_state: OutputState,
},
#[serde(rename_all = "camelCase")]
RecordStateChanged {
output_active: bool,
output_state: OutputState,
},
#[serde(rename_all = "camelCase")]
ReplayBufferStateChanged {
output_active: bool,
output_state: OutputState,
},
#[serde(rename_all = "camelCase")]
VirtualcamStateChanged {
output_active: bool,
output_state: OutputState,
},
#[serde(rename_all = "camelCase")]
ReplayBufferSaved {
saved_replay_path: PathBuf,
},
// --------------------------------
// Scene Items
// --------------------------------
#[serde(rename_all = "camelCase")]
SceneItemCreated {
scene_name: String,
input_name: String,
scene_item_id: u64,
scene_item_index: u32,
},
#[serde(rename_all = "camelCase")]
SceneItemRemoved {
scene_name: String,
input_name: String,
scene_item_id: u64,
scene_item_index: u32,
},
#[serde(rename_all = "camelCase")]
SceneItemReindexed {
scene_name: String,
scene_items: Vec<BasicSceneItem>,
},
#[serde(rename_all = "camelCase")]
SceneItemEnableStateChanged {
scene_name: String,
scene_item_id: u64,
scene_item_enabled: bool,
},
#[serde(rename_all = "camelCase")]
SceneItemLockStateChanged {
scene_name: String,
scene_item_id: u64,
scene_item_locked: bool,
},
SceneItemTransformChanged,
// --------------------------------
// Scenes
// --------------------------------
#[serde(rename_all = "camelCase")]
SceneCreated {
scene_name: String,
is_group: bool,
},
#[serde(rename_all = "camelCase")]
SceneRemoved {
scene_name: String,
is_group: bool,
},
#[serde(rename_all = "camelCase")]
SceneNameChanged {
old_scene_name: String,
scene_name: String,
},
#[serde(rename_all = "camelCase")]
CurrentSceneChanged {
scene_name: String,
},
#[serde(rename_all = "camelCase")]
CurrentPreviewSceneChanged {
scene_name: String,
},
#[serde(rename_all = "camelCase")]
SceneListChanged {
scenes: Vec<Scene>,
},
// --------------------------------
// Transitions
// --------------------------------
#[serde(rename_all = "camelCase")]
TransitionCreated {
transition_name: String,
transition_kind: String,
transition_fixed: bool,
},
#[serde(rename_all = "camelCase")]
TransitionRemoved {
transition_name: String,
},
#[serde(rename_all = "camelCase")]
TransitionNameChanged {
old_transition_name: String,
transition_name: String,
},
// --------------------------------
// Custom
// --------------------------------
/// WebSocket server is stopping.
ServerStopping,
/// WebSocket server has stopped.
ServerStopped,
/// Fallback value for any unknown event type.
#[serde(other)]
Unknown,
}
#[derive(Clone, Copy, Debug, Deserialize)]
pub enum MediaAction {
#[serde(rename = "OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PAUSE")]
Pause,
#[serde(rename = "OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PLAY")]
Play,
#[serde(rename = "OBS_WEBSOCKET_MEDIA_INPUT_ACTION_RESTART")]
Restart,
#[serde(rename = "OBS_WEBSOCKET_MEDIA_INPUT_ACTION_STOP")]
Stop,
#[serde(rename = "OBS_WEBSOCKET_MEDIA_INPUT_ACTION_NEXT")]
Next,
#[serde(rename = "OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PREVIOUS")]
Previous,
#[serde(other)]
Unknown,
}
#[derive(Clone, Copy, Debug, Deserialize)]
pub enum OutputState {
#[serde(rename = "OBS_WEBSOCKET_OUTPUT_STARTING")]
Starting,
#[serde(rename = "OBS_WEBSOCKET_OUTPUT_STARTED")]
Started,
#[serde(rename = "OBS_WEBSOCKET_OUTPUT_STOPPING")]
Stopping,
#[serde(rename = "OBS_WEBSOCKET_OUTPUT_STOPPED")]
Stopped,
#[serde(rename = "OBS_WEBSOCKET_OUTPUT_PAUSED")]
Paused,
#[serde(rename = "OBS_WEBSOCKET_OUTPUT_RESUMED")]
Resumed,
#[serde(other)]
Unknown,
}
#[derive(Clone, Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BasicSceneItem {
scene_item_id: u64,
scene_item_index: u32,
}
#[derive(Clone, Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Scene {
scene_name: String,
scene_index: u32,
is_group: bool,
}