///|
pub fn SysMessage::client_id(self : SysMessage) -> String {
  match self {
    Register(..)
    | Registered(..)
    | RegisterRejected(..)
    | TaskExited(..)
    | 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 {
    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()
    Codex(client_id~, ..) => client_id
  }
}

///|
pub fn FsMessage::client_id(self : FsMessage) -> String {
  match self {
    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
  }
}