// This file is @generated by prost-build.
/// RGB color (0-255 per channel)
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Color {
    #[prost(uint32, tag = "1")]
    pub r: u32,
    #[prost(uint32, tag = "2")]
    pub g: u32,
    #[prost(uint32, tag = "3")]
    pub b: u32,
}
/// Terminal theme with 16 ANSI colors
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ThemeInfo {
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    #[prost(message, optional, tag = "2")]
    pub background: ::core::option::Option<Color>,
    #[prost(message, optional, tag = "3")]
    pub foreground: ::core::option::Option<Color>,
    /// 8 colors (indices 0-7)
    #[prost(message, repeated, tag = "4")]
    pub normal: ::prost::alloc::vec::Vec<Color>,
    /// 8 colors (indices 8-15)
    #[prost(message, repeated, tag = "5")]
    pub bright: ::prost::alloc::vec::Vec<Color>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ServerMessage {
    #[prost(
        oneof = "server_message::Message",
        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
    )]
    pub message: ::core::option::Option<server_message::Message>,
}
/// Nested message and enum types in `ServerMessage`.
pub mod server_message {
    #[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Message {
        #[prost(message, tag = "1")]
        Output(super::Output),
        #[prost(message, tag = "2")]
        Resize(super::Resize),
        #[prost(message, tag = "3")]
        Title(super::Title),
        #[prost(message, tag = "4")]
        Connected(super::Connected),
        #[prost(message, tag = "5")]
        Refresh(super::Refresh),
        #[prost(message, tag = "6")]
        Cursor(super::CursorPosition),
        #[prost(message, tag = "7")]
        Bell(super::Bell),
        #[prost(message, tag = "8")]
        Error(super::Error),
        #[prost(message, tag = "9")]
        Shutdown(super::Shutdown),
        #[prost(message, tag = "10")]
        Pong(super::Pong),
    }
}
/// Terminal output data (very high frequency)
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Output {
    /// UTF-8 encoded terminal output with ANSI codes
    #[prost(bytes = "vec", tag = "1")]
    pub data: ::prost::alloc::vec::Vec<u8>,
    /// Unix epoch milliseconds
    #[prost(uint64, optional, tag = "2")]
    pub timestamp: ::core::option::Option<u64>,
}
/// Terminal resize notification
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Resize {
    #[prost(uint32, tag = "1")]
    pub cols: u32,
    #[prost(uint32, tag = "2")]
    pub rows: u32,
}
/// Terminal title change
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Title {
    #[prost(string, tag = "1")]
    pub title: ::prost::alloc::string::String,
}
/// Initial connection handshake
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Connected {
    #[prost(uint32, tag = "1")]
    pub cols: u32,
    #[prost(uint32, tag = "2")]
    pub rows: u32,
    /// ANSI styled screen content
    #[prost(bytes = "vec", optional, tag = "3")]
    pub initial_screen: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, tag = "4")]
    pub session_id: ::prost::alloc::string::String,
    #[prost(message, optional, tag = "5")]
    pub theme: ::core::option::Option<ThemeInfo>,
}
/// Full screen refresh response
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Refresh {
    #[prost(uint32, tag = "1")]
    pub cols: u32,
    #[prost(uint32, tag = "2")]
    pub rows: u32,
    /// ANSI styled screen content
    #[prost(bytes = "vec", tag = "3")]
    pub screen_content: ::prost::alloc::vec::Vec<u8>,
}
/// Cursor position update
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CursorPosition {
    #[prost(uint32, tag = "1")]
    pub col: u32,
    #[prost(uint32, tag = "2")]
    pub row: u32,
    #[prost(bool, tag = "3")]
    pub visible: bool,
}
/// Bell/alert event
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Bell {}
/// Error notification
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Error {
    #[prost(string, tag = "1")]
    pub message: ::prost::alloc::string::String,
    #[prost(string, optional, tag = "2")]
    pub code: ::core::option::Option<::prost::alloc::string::String>,
}
/// Server shutdown notification
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Shutdown {
    #[prost(string, tag = "1")]
    pub reason: ::prost::alloc::string::String,
}
/// Keepalive pong response
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Pong {}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ClientMessage {
    #[prost(oneof = "client_message::Message", tags = "1, 2, 3, 4, 5")]
    pub message: ::core::option::Option<client_message::Message>,
}
/// Nested message and enum types in `ClientMessage`.
pub mod client_message {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum Message {
        #[prost(message, tag = "1")]
        Input(super::Input),
        #[prost(message, tag = "2")]
        Resize(super::ClientResize),
        #[prost(message, tag = "3")]
        Ping(super::Ping),
        #[prost(message, tag = "4")]
        Refresh(super::RequestRefresh),
        #[prost(message, tag = "5")]
        Subscribe(super::Subscribe),
    }
}
/// Keyboard input from client
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Input {
    /// UTF-8 encoded input (may include escape sequences)
    #[prost(bytes = "vec", tag = "1")]
    pub data: ::prost::alloc::vec::Vec<u8>,
}
/// Client requests terminal resize
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ClientResize {
    #[prost(uint32, tag = "1")]
    pub cols: u32,
    #[prost(uint32, tag = "2")]
    pub rows: u32,
}
/// Keepalive ping request
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Ping {}
/// Client requests full screen refresh
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RequestRefresh {}
/// Client subscribes to specific event types
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Subscribe {
    #[prost(enumeration = "EventType", repeated, tag = "1")]
    pub events: ::prost::alloc::vec::Vec<i32>,
}
/// Event types for subscription
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum EventType {
    Unspecified = 0,
    Output = 1,
    Cursor = 2,
    Bell = 3,
    Title = 4,
    Resize = 5,
}
impl EventType {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Unspecified => "EVENT_TYPE_UNSPECIFIED",
            Self::Output => "EVENT_TYPE_OUTPUT",
            Self::Cursor => "EVENT_TYPE_CURSOR",
            Self::Bell => "EVENT_TYPE_BELL",
            Self::Title => "EVENT_TYPE_TITLE",
            Self::Resize => "EVENT_TYPE_RESIZE",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "EVENT_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
            "EVENT_TYPE_OUTPUT" => Some(Self::Output),
            "EVENT_TYPE_CURSOR" => Some(Self::Cursor),
            "EVENT_TYPE_BELL" => Some(Self::Bell),
            "EVENT_TYPE_TITLE" => Some(Self::Title),
            "EVENT_TYPE_RESIZE" => Some(Self::Resize),
            _ => None,
        }
    }
}
