///|
pub fn SysMessage::client_id(self : SysMessage) -> String {
  match self {
    Register(..)
    | Registered(..)
    | RegisterRejected(..)
    | TaskExited(..)
    | Title(..)
    | Connect(..)
    | Connected(..)
    | TaskOnline(..)
    | Error(_)
    | AuthError(..) => ""
    NewClient(client_id~, ..) => client_id
    ClientDisconnected(client_id~) => client_id
  }
}

///|
pub fn TermMessage::client_id(self : TermMessage) -> String {
  match self {
    ClientReplayCursor(client_id~, ..) => client_id
    Viewport(client_id~, ..) => client_id
    RenderFrame(client_id~, ..) => client_id
    RenderState(client_id~, ..) => client_id
    InputText(client_id~, ..) => client_id
    InputKey(client_id~, ..) => client_id
    InputPaste(client_id~, ..) => client_id
    InputMouse(client_id~, ..) => client_id
    InputScroll(client_id~, ..) => client_id
    ScrollToLive(client_id~) => client_id
    Theme(client_id~, ..) => client_id
    Data(client_id~, ..) => client_id
    Exited(client_id~, ..) => client_id
  }
}

///|
pub fn Message::client_id(self : Message) -> String {
  match self {
    Sys(msg) => msg.client_id()
    Term(msg) => msg.client_id()
    Fs(msg) => msg.client_id()
    Ide(msg) => msg.client_id()
    Codex(client_id~, ..) => client_id
  }
}

///|
pub fn IdeMessage::client_id(self : IdeMessage) -> String {
  match self {
    Hover(client_id~, ..) => client_id
    CancelHover(client_id~, ..) => client_id
    HoverResult(client_id~, ..) => client_id
    IdeError(client_id~, ..) => client_id
  }
}

///|
pub fn FsMessage::client_id(self : FsMessage) -> String {
  match self {
    WatchFile(client_id~, ..) => client_id
    UnwatchFile(client_id~, ..) => client_id
    WatchFileReady(client_id~, ..) => client_id
    FileChanged(client_id~, ..) => client_id
    Stat(client_id~, ..) => client_id
    StatResult(client_id~, ..) => client_id
    Readdir(client_id~, ..) => client_id
    ReaddirResult(client_id~, ..) => client_id
    ReadFile(client_id~, ..) => client_id
    ReadFileResult(client_id~, ..) => client_id
    WriteFile(client_id~, ..) => client_id
    Mkdir(client_id~, ..) => client_id
    FsDelete(client_id~, ..) => client_id
    FsRename(client_id~, ..) => client_id
    FsOk(client_id~, ..) => client_id
    FsError(client_id~, ..) => client_id
  }
}