// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/class.ServerMessage.html).
pub type ServerMessage

///|
pub(open) trait IServerMessage {
  fn as_server_message(Self) -> ServerMessage
  fn get_http_version(Self) -> HTTPVersion = _
  fn get_local_address(Self) -> @gio.SocketAddress? = _
  fn get_method(Self) -> String = _
  fn get_reason_phrase(Self) -> String? = _
  fn get_remote_address(Self) -> @gio.SocketAddress? = _
  fn get_remote_host(Self) -> String? = _
  fn get_status(Self) -> UInt = _
  fn get_tls_peer_certificate(Self) -> @gio.TlsCertificate? = _
  fn get_tls_peer_certificate_errors(Self) -> @gio.TlsCertificateFlags = _
  fn get_uri(Self) -> @glib.Uri = _
  fn is_options_ping(Self) -> Bool = _
  fn pause(Self) -> Unit = _
  fn set_http_version(Self, HTTPVersion) -> Unit = _
  fn set_redirect(Self, UInt, String) -> Unit = _
  fn set_status(Self, UInt, String?) -> Unit = _
  fn steal_connection(Self) -> @gio.IOStream = _
  fn unpause(Self) -> Unit = _
  fn connect_accept_certificate(
    Self,
    (ServerMessage, @gio.TlsCertificate, @gio.TlsCertificateFlags) -> Bool,
  ) -> UInt64 = _
  fn connect_connected(Self, (ServerMessage) -> Unit) -> UInt64 = _
  fn connect_disconnected(Self, (ServerMessage) -> Unit) -> UInt64 = _
  fn connect_finished(Self, (ServerMessage) -> Unit) -> UInt64 = _
  fn connect_got_body(Self, (ServerMessage) -> Unit) -> UInt64 = _
  fn connect_got_chunk(Self, (ServerMessage, Bytes) -> Unit) -> UInt64 = _
  fn connect_got_headers(Self, (ServerMessage) -> Unit) -> UInt64 = _
  fn connect_wrote_body(Self, (ServerMessage) -> Unit) -> UInt64 = _
  fn connect_wrote_body_data(Self, (ServerMessage, UInt) -> Unit) -> UInt64 = _
  fn connect_wrote_chunk(Self, (ServerMessage) -> Unit) -> UInt64 = _
  fn connect_wrote_headers(Self, (ServerMessage) -> Unit) -> UInt64 = _
  fn connect_wrote_informational(Self, (ServerMessage) -> Unit) -> UInt64 = _
}

///|
pub impl IServerMessage for ServerMessage with fn as_server_message(self) {
  self
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_http_version.html).
#borrow(self)
pub extern "c" fn ServerMessage::get_http_version(
  self : ServerMessage,
) -> HTTPVersion = "moonbit_soup_server_message_get_http_version"

///|
#borrow(self_)
extern "c" fn moonbit_soup_server_message_get_local_address(
  self_ : ServerMessage,
) -> @glib.Nullable[@gio.SocketAddress] = "moonbit_soup_server_message_get_local_address"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_local_address.html).
pub fn ServerMessage::get_local_address(
  self : ServerMessage,
) -> @gio.SocketAddress? {
  let raw_result = moonbit_soup_server_message_get_local_address(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_soup_server_message_get_method(
  self_ : ServerMessage,
) -> Bytes = "moonbit_soup_server_message_get_method"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_method.html).
pub fn ServerMessage::get_method(self : ServerMessage) -> String {
  @encoding/utf8.decode_lossy(moonbit_soup_server_message_get_method(self))
}

///|
#borrow(self_)
extern "c" fn moonbit_soup_server_message_get_reason_phrase(
  self_ : ServerMessage,
) -> @glib.Nullable[Bytes] = "moonbit_soup_server_message_get_reason_phrase"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_reason_phrase.html).
pub fn ServerMessage::get_reason_phrase(self : ServerMessage) -> String? {
  let result = moonbit_soup_server_message_get_reason_phrase(self)
  match result.to_option() {
    Some(bytes) => Some(@encoding/utf8.decode_lossy(bytes))
    None => None
  }
}

///|
#borrow(self_)
extern "c" fn moonbit_soup_server_message_get_remote_address(
  self_ : ServerMessage,
) -> @glib.Nullable[@gio.SocketAddress] = "moonbit_soup_server_message_get_remote_address"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_remote_address.html).
pub fn ServerMessage::get_remote_address(
  self : ServerMessage,
) -> @gio.SocketAddress? {
  let raw_result = moonbit_soup_server_message_get_remote_address(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_soup_server_message_get_remote_host(
  self_ : ServerMessage,
) -> @glib.Nullable[Bytes] = "moonbit_soup_server_message_get_remote_host"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_remote_host.html).
pub fn ServerMessage::get_remote_host(self : ServerMessage) -> String? {
  let result = moonbit_soup_server_message_get_remote_host(self)
  match result.to_option() {
    Some(bytes) => Some(@encoding/utf8.decode_lossy(bytes))
    None => None
  }
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_status.html).
#borrow(self)
pub extern "c" fn ServerMessage::get_status(self : ServerMessage) -> UInt = "moonbit_soup_server_message_get_status"

///|
#borrow(self_)
extern "c" fn moonbit_soup_server_message_get_tls_peer_certificate(
  self_ : ServerMessage,
) -> @glib.Nullable[@gio.TlsCertificate] = "moonbit_soup_server_message_get_tls_peer_certificate"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_tls_peer_certificate.html).
pub fn ServerMessage::get_tls_peer_certificate(
  self : ServerMessage,
) -> @gio.TlsCertificate? {
  let raw_result = moonbit_soup_server_message_get_tls_peer_certificate(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_soup_server_message_get_tls_peer_certificate_errors(
  self_ : ServerMessage,
) -> Int = "moonbit_soup_server_message_get_tls_peer_certificate_errors"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_tls_peer_certificate_errors.html).
pub fn ServerMessage::get_tls_peer_certificate_errors(
  self : ServerMessage,
) -> @gio.TlsCertificateFlags {
  @gio.TlsCertificateFlags::from_int(
    moonbit_soup_server_message_get_tls_peer_certificate_errors(self),
  )
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.get_uri.html).
#borrow(self)
pub extern "c" fn ServerMessage::get_uri(self : ServerMessage) -> @glib.Uri = "moonbit_soup_server_message_get_uri"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.is_options_ping.html).
#borrow(self)
pub extern "c" fn ServerMessage::is_options_ping(self : ServerMessage) -> Bool = "moonbit_soup_server_message_is_options_ping"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.pause.html).
#borrow(self)
pub extern "c" fn ServerMessage::pause(self : ServerMessage) = "moonbit_soup_server_message_pause"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.set_http_version.html).
#borrow(self)
pub extern "c" fn ServerMessage::set_http_version(
  self : ServerMessage,
  version : HTTPVersion,
) = "moonbit_soup_server_message_set_http_version"

///|
#borrow(self_, redirect_uri)
extern "c" fn moonbit_soup_server_message_set_redirect(
  self_ : ServerMessage,
  status_code : UInt,
  redirect_uri : Bytes,
) = "moonbit_soup_server_message_set_redirect"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.set_redirect.html).
pub fn ServerMessage::set_redirect(
  self : ServerMessage,
  status_code : UInt,
  redirect_uri : String,
) -> Unit {
  moonbit_soup_server_message_set_redirect(
    self,
    status_code,
    @encoding/utf8.encode(redirect_uri),
  )
}

///|
#borrow(self_, reason_phrase)
extern "c" fn moonbit_soup_server_message_set_status(
  self_ : ServerMessage,
  status_code : UInt,
  reason_phrase : @glib.Nullable[Bytes],
) = "moonbit_soup_server_message_set_status"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.set_status.html).
pub fn ServerMessage::set_status(
  self : ServerMessage,
  status_code : UInt,
  reason_phrase : String?,
) -> Unit {
  moonbit_soup_server_message_set_status(
    self,
    status_code,
    match reason_phrase {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
  )
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.steal_connection.html).
#borrow(self)
pub extern "c" fn ServerMessage::steal_connection(
  self : ServerMessage,
) -> @gio.IOStream = "moonbit_soup_server_message_steal_connection"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.ServerMessage.unpause.html).
#borrow(self)
pub extern "c" fn ServerMessage::unpause(self : ServerMessage) = "moonbit_soup_server_message_unpause"

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_accept_certificate(
  instance : ServerMessage,
  function : FuncRef[
    (
      ServerMessage,
      @gio.TlsCertificate,
      Int,
      (ServerMessage, @gio.TlsCertificate, @gio.TlsCertificateFlags) -> Bool,
    ) -> Bool,
  ],
  closure : (ServerMessage, @gio.TlsCertificate, @gio.TlsCertificateFlags) -> Bool,
) -> UInt64 = "moonbit_soup_server_message_connect_accept_certificate"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.accept-certificate.html).
pub fn ServerMessage::connect_accept_certificate(
  self : ServerMessage,
  f : (ServerMessage, @gio.TlsCertificate, @gio.TlsCertificateFlags) -> Bool,
) -> UInt64 {
  soup_server_message_connect_accept_certificate(
    self,
    fn(instance_, tls_peer_certificate, tls_peer_errors, f) {
      f(
        instance_,
        tls_peer_certificate,
        @gio.TlsCertificateFlags::from_int(tls_peer_errors),
      )
    },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_connected(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_connected"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.connected.html).
pub fn ServerMessage::connect_connected(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_connected(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_disconnected(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_disconnected"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.disconnected.html).
pub fn ServerMessage::connect_disconnected(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_disconnected(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_finished(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_finished"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.finished.html).
pub fn ServerMessage::connect_finished(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_finished(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_got_body(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_got_body"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.got-body.html).
pub fn ServerMessage::connect_got_body(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_got_body(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_got_chunk(
  instance : ServerMessage,
  function : FuncRef[
    (ServerMessage, Bytes, (ServerMessage, Bytes) -> Unit) -> Unit,
  ],
  closure : (ServerMessage, Bytes) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_got_chunk"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.got-chunk.html).
pub fn ServerMessage::connect_got_chunk(
  self : ServerMessage,
  f : (ServerMessage, Bytes) -> Unit,
) -> UInt64 {
  soup_server_message_connect_got_chunk(
    self,
    fn(instance_, chunk, f) { f(instance_, chunk) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_got_headers(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_got_headers"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.got-headers.html).
pub fn ServerMessage::connect_got_headers(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_got_headers(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_wrote_body(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_wrote_body"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.wrote-body.html).
pub fn ServerMessage::connect_wrote_body(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_wrote_body(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_wrote_body_data(
  instance : ServerMessage,
  function : FuncRef[
    (ServerMessage, UInt, (ServerMessage, UInt) -> Unit) -> Unit,
  ],
  closure : (ServerMessage, UInt) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_wrote_body_data"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.wrote-body-data.html).
pub fn ServerMessage::connect_wrote_body_data(
  self : ServerMessage,
  f : (ServerMessage, UInt) -> Unit,
) -> UInt64 {
  soup_server_message_connect_wrote_body_data(
    self,
    fn(instance_, chunk_size, f) { f(instance_, chunk_size) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_wrote_chunk(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_wrote_chunk"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.wrote-chunk.html).
pub fn ServerMessage::connect_wrote_chunk(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_wrote_chunk(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_wrote_headers(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_wrote_headers"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.wrote-headers.html).
pub fn ServerMessage::connect_wrote_headers(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_wrote_headers(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_server_message_connect_wrote_informational(
  instance : ServerMessage,
  function : FuncRef[(ServerMessage, (ServerMessage) -> Unit) -> Unit],
  closure : (ServerMessage) -> Unit,
) -> UInt64 = "moonbit_soup_server_message_connect_wrote_informational"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.ServerMessage.wrote-informational.html).
pub fn ServerMessage::connect_wrote_informational(
  self : ServerMessage,
  f : (ServerMessage) -> Unit,
) -> UInt64 {
  soup_server_message_connect_wrote_informational(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
impl IServerMessage with fn get_http_version(self) -> HTTPVersion {
  self.as_server_message().get_http_version()
}

///|
impl IServerMessage with fn get_local_address(self) -> @gio.SocketAddress? {
  self.as_server_message().get_local_address()
}

///|
impl IServerMessage with fn get_method(self) -> String {
  self.as_server_message().get_method()
}

///|
impl IServerMessage with fn get_reason_phrase(self) -> String? {
  self.as_server_message().get_reason_phrase()
}

///|
impl IServerMessage with fn get_remote_address(self) -> @gio.SocketAddress? {
  self.as_server_message().get_remote_address()
}

///|
impl IServerMessage with fn get_remote_host(self) -> String? {
  self.as_server_message().get_remote_host()
}

///|
impl IServerMessage with fn get_status(self) -> UInt {
  self.as_server_message().get_status()
}

///|
impl IServerMessage with fn get_tls_peer_certificate(self) -> @gio.TlsCertificate? {
  self.as_server_message().get_tls_peer_certificate()
}

///|
impl IServerMessage with fn get_tls_peer_certificate_errors(self) -> @gio.TlsCertificateFlags {
  self.as_server_message().get_tls_peer_certificate_errors()
}

///|
impl IServerMessage with fn get_uri(self) -> @glib.Uri {
  self.as_server_message().get_uri()
}

///|
impl IServerMessage with fn is_options_ping(self) -> Bool {
  self.as_server_message().is_options_ping()
}

///|
impl IServerMessage with fn pause(self) -> Unit {
  self.as_server_message().pause()
}

///|
impl IServerMessage with fn set_http_version(self, version) -> Unit {
  self.as_server_message().set_http_version(version)
}

///|
impl IServerMessage with fn set_redirect(self, status_code, redirect_uri) -> Unit {
  self.as_server_message().set_redirect(status_code, redirect_uri)
}

///|
impl IServerMessage with fn set_status(self, status_code, reason_phrase) -> Unit {
  self.as_server_message().set_status(status_code, reason_phrase)
}

///|
impl IServerMessage with fn steal_connection(self) -> @gio.IOStream {
  self.as_server_message().steal_connection()
}

///|
impl IServerMessage with fn unpause(self) -> Unit {
  self.as_server_message().unpause()
}

///|
impl IServerMessage with fn connect_accept_certificate(self, f) -> UInt64 {
  self.as_server_message().connect_accept_certificate(f)
}

///|
impl IServerMessage with fn connect_connected(self, f) -> UInt64 {
  self.as_server_message().connect_connected(f)
}

///|
impl IServerMessage with fn connect_disconnected(self, f) -> UInt64 {
  self.as_server_message().connect_disconnected(f)
}

///|
impl IServerMessage with fn connect_finished(self, f) -> UInt64 {
  self.as_server_message().connect_finished(f)
}

///|
impl IServerMessage with fn connect_got_body(self, f) -> UInt64 {
  self.as_server_message().connect_got_body(f)
}

///|
impl IServerMessage with fn connect_got_chunk(self, f) -> UInt64 {
  self.as_server_message().connect_got_chunk(f)
}

///|
impl IServerMessage with fn connect_got_headers(self, f) -> UInt64 {
  self.as_server_message().connect_got_headers(f)
}

///|
impl IServerMessage with fn connect_wrote_body(self, f) -> UInt64 {
  self.as_server_message().connect_wrote_body(f)
}

///|
impl IServerMessage with fn connect_wrote_body_data(self, f) -> UInt64 {
  self.as_server_message().connect_wrote_body_data(f)
}

///|
impl IServerMessage with fn connect_wrote_chunk(self, f) -> UInt64 {
  self.as_server_message().connect_wrote_chunk(f)
}

///|
impl IServerMessage with fn connect_wrote_headers(self, f) -> UInt64 {
  self.as_server_message().connect_wrote_headers(f)
}

///|
impl IServerMessage with fn connect_wrote_informational(self, f) -> UInt64 {
  self.as_server_message().connect_wrote_informational(f)
}

///|
pub fn ServerMessage::as_gobject_object(
  self : ServerMessage,
) -> @gobject.Object = "%identity"

///|
pub impl @gobject.IObject for ServerMessage with fn as_object(self) {
  self.as_gobject_object()
}