// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IMessage {
  fn as_message(Self) -> Message
  fn add_flags(Self, MessageFlags) -> Unit = _
  fn get_connection_id(Self) -> UInt64 = _
  fn get_first_party(Self) -> @glib.Uri = _
  fn get_flags(Self) -> MessageFlags = _
  fn get_force_http1(Self) -> Bool = _
  fn get_http_version(Self) -> HTTPVersion = _
  fn get_is_options_ping(Self) -> Bool = _
  fn get_is_top_level_navigation(Self) -> Bool = _
  fn get_method(Self) -> String = _
  fn get_priority(Self) -> MessagePriority = _
  fn get_reason_phrase(Self) -> String? = _
  fn get_remote_address(Self) -> @gio.SocketAddress? = _
  fn get_site_for_cookies(Self) -> @glib.Uri = _
  fn get_status(Self) -> Status = _
  fn get_tls_ciphersuite_name(Self) -> String = _
  fn get_tls_peer_certificate(Self) -> @gio.TlsCertificate? = _
  fn get_tls_peer_certificate_errors(Self) -> @gio.TlsCertificateFlags = _
  fn get_tls_protocol_version(Self) -> @gio.TlsProtocolVersion = _
  fn get_uri(Self) -> @glib.Uri = _
  fn is_keepalive(Self) -> Bool = _
  fn query_flags(Self, MessageFlags) -> Bool = _
  fn remove_flags(Self, MessageFlags) -> Unit = _
  fn set_first_party(Self, @glib.Uri) -> Unit = _
  fn set_flags(Self, MessageFlags) -> Unit = _
  fn set_force_http1(Self, Bool) -> Unit = _
  fn set_is_options_ping(Self, Bool) -> Unit = _
  fn set_is_top_level_navigation(Self, Bool) -> Unit = _
  fn set_method(Self, String) -> Unit = _
  fn set_priority(Self, MessagePriority) -> Unit = _
  fn set_request_body(Self, String?, &@gio.IInputStream?, Int64) -> Unit = _
  fn set_request_body_from_bytes(Self, String?, Bytes) -> Unit = _
  fn set_site_for_cookies(Self, @glib.Uri?) -> Unit = _
  fn set_tls_client_certificate(Self, &@gio.ITlsCertificate?) -> Unit = _
  fn set_uri(Self, @glib.Uri) -> Unit = _
  fn tls_client_certificate_password_request_complete(Self) -> Unit = _
  fn connect_accept_certificate(
    Self,
    (Message, @gio.TlsCertificate, @gio.TlsCertificateFlags) -> Bool,
  ) -> UInt64 = _
  fn connect_finished(Self, (Message) -> Unit) -> UInt64 = _
  fn connect_got_body(Self, (Message) -> Unit) -> UInt64 = _
  fn connect_got_body_data(Self, (Message, UInt) -> Unit) -> UInt64 = _
  fn connect_got_headers(Self, (Message) -> Unit) -> UInt64 = _
  fn connect_got_informational(Self, (Message) -> Unit) -> UInt64 = _
  fn connect_hsts_enforced(Self, (Message) -> Unit) -> UInt64 = _
  fn connect_network_event(
    Self,
    (Message, @gio.SocketClientEvent, @gio.IOStream) -> Unit,
  ) -> UInt64 = _
  fn connect_request_certificate(
    Self,
    (Message, @gio.TlsClientConnection) -> Bool,
  ) -> UInt64 = _
  fn connect_request_certificate_password(
    Self,
    (Message, @gio.TlsPassword) -> Bool,
  ) -> UInt64 = _
  fn connect_restarted(Self, (Message) -> Unit) -> UInt64 = _
  fn connect_starting(Self, (Message) -> Unit) -> UInt64 = _
  fn connect_wrote_body(Self, (Message) -> Unit) -> UInt64 = _
  fn connect_wrote_body_data(Self, (Message, UInt) -> Unit) -> UInt64 = _
  fn connect_wrote_headers(Self, (Message) -> Unit) -> UInt64 = _
}

///|
pub impl IMessage for Message with fn as_message(self) {
  self
}

///|
#borrow(method_, uri_string)
extern "c" fn moonbit_soup_message_new(
  method_ : Bytes,
  uri_string : Bytes,
) -> @glib.Nullable[Message] = "moonbit_soup_message_new"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/ctor.Message.new.html).
pub fn Message::new(method_ : String, uri_string : String) -> Message? {
  let raw_result = moonbit_soup_message_new(
    @encoding/utf8.encode(method_),
    @encoding/utf8.encode(uri_string),
  )
  raw_result.to_option()
}

///|
#borrow(method_, uri_string, encoded_form)
extern "c" fn moonbit_soup_message_new_from_encoded_form(
  method_ : Bytes,
  uri_string : Bytes,
  encoded_form : Bytes,
) -> @glib.Nullable[Message] = "moonbit_soup_message_new_from_encoded_form"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/ctor.Message.new_from_encoded_form.html).
pub fn Message::new_from_encoded_form(
  method_ : String,
  uri_string : String,
  encoded_form : String,
) -> Message? {
  let raw_result = moonbit_soup_message_new_from_encoded_form(
    @encoding/utf8.encode(method_),
    @encoding/utf8.encode(uri_string),
    @encoding/utf8.encode(encoded_form),
  )
  raw_result.to_option()
}

///|
#borrow(method_, uri)
extern "c" fn moonbit_soup_message_new_from_uri(
  method_ : Bytes,
  uri : @glib.Uri,
) -> Message = "moonbit_soup_message_new_from_uri"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/ctor.Message.new_from_uri.html).
pub fn Message::new_from_uri(method_ : String, uri : @glib.Uri) -> Message {
  moonbit_soup_message_new_from_uri(@encoding/utf8.encode(method_), uri)
}

///|
#borrow(base_uri)
extern "c" fn moonbit_soup_message_new_options_ping(
  base_uri : @glib.Uri,
) -> Message = "moonbit_soup_message_new_options_ping"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/ctor.Message.new_options_ping.html).
pub fn Message::new_options_ping(base_uri : @glib.Uri) -> Message {
  moonbit_soup_message_new_options_ping(base_uri)
}

///|
#borrow(self_)
extern "c" fn moonbit_soup_message_add_flags(self_ : Message, flags : Int) = "moonbit_soup_message_add_flags"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.add_flags.html).
pub fn Message::add_flags(self : Message, flags : MessageFlags) -> Unit {
  moonbit_soup_message_add_flags(self, flags.to_int())
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.get_connection_id.html).
#borrow(self)
pub extern "c" fn Message::get_connection_id(self : Message) -> UInt64 = "moonbit_soup_message_get_connection_id"

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

///|
#borrow(self_)
extern "c" fn moonbit_soup_message_get_flags(self_ : Message) -> Int = "moonbit_soup_message_get_flags"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.get_flags.html).
pub fn Message::get_flags(self : Message) -> MessageFlags {
  MessageFlags::from_int(moonbit_soup_message_get_flags(self))
}

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

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

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

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

///|
#borrow(self_)
extern "c" fn moonbit_soup_message_get_method(self_ : Message) -> Bytes = "moonbit_soup_message_get_method"

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.get_priority.html).
#borrow(self)
pub extern "c" fn Message::get_priority(self : Message) -> MessagePriority = "moonbit_soup_message_get_priority"

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.get_reason_phrase.html).
pub fn Message::get_reason_phrase(self : Message) -> String? {
  let result = moonbit_soup_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_message_get_remote_address(
  self_ : Message,
) -> @glib.Nullable[@gio.SocketAddress] = "moonbit_soup_message_get_remote_address"

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

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

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

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

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

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

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

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

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

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

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

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

///|
#borrow(self_)
extern "c" fn moonbit_soup_message_query_flags(
  self_ : Message,
  flags : Int,
) -> Bool = "moonbit_soup_message_query_flags"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.query_flags.html).
pub fn Message::query_flags(self : Message, flags : MessageFlags) -> Bool {
  moonbit_soup_message_query_flags(self, flags.to_int())
}

///|
#borrow(self_)
extern "c" fn moonbit_soup_message_remove_flags(self_ : Message, flags : Int) = "moonbit_soup_message_remove_flags"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.remove_flags.html).
pub fn Message::remove_flags(self : Message, flags : MessageFlags) -> Unit {
  moonbit_soup_message_remove_flags(self, flags.to_int())
}

///|
#borrow(self_, first_party)
extern "c" fn moonbit_soup_message_set_first_party(
  self_ : Message,
  first_party : @glib.Uri,
) = "moonbit_soup_message_set_first_party"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_first_party.html).
pub fn Message::set_first_party(
  self : Message,
  first_party : @glib.Uri,
) -> Unit {
  moonbit_soup_message_set_first_party(self, first_party)
}

///|
#borrow(self_)
extern "c" fn moonbit_soup_message_set_flags(self_ : Message, flags : Int) = "moonbit_soup_message_set_flags"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_flags.html).
pub fn Message::set_flags(self : Message, flags : MessageFlags) -> Unit {
  moonbit_soup_message_set_flags(self, flags.to_int())
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_force_http1.html).
#borrow(self)
pub extern "c" fn Message::set_force_http1(self : Message, value : Bool) = "moonbit_soup_message_set_force_http1"

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_is_top_level_navigation.html).
#borrow(self)
pub extern "c" fn Message::set_is_top_level_navigation(
  self : Message,
  is_top_level_navigation : Bool,
) = "moonbit_soup_message_set_is_top_level_navigation"

///|
#borrow(self_, method_)
extern "c" fn moonbit_soup_message_set_method(self_ : Message, method_ : Bytes) = "moonbit_soup_message_set_method"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_method.html).
pub fn Message::set_method(self : Message, method_ : String) -> Unit {
  moonbit_soup_message_set_method(self, @encoding/utf8.encode(method_))
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_priority.html).
#borrow(self)
pub extern "c" fn Message::set_priority(
  self : Message,
  priority : MessagePriority,
) = "moonbit_soup_message_set_priority"

///|
#borrow(self_, content_type, stream)
extern "c" fn moonbit_soup_message_set_request_body(
  self_ : Message,
  content_type : @glib.Nullable[Bytes],
  stream : @glib.Nullable[@gio.InputStream],
  content_length : Int64,
) = "moonbit_soup_message_set_request_body"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_request_body.html).
pub fn Message::set_request_body(
  self : Message,
  content_type : String?,
  stream : &@gio.IInputStream?,
  content_length : Int64,
) -> Unit {
  moonbit_soup_message_set_request_body(
    self,
    match content_type {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
    match stream {
      Some(v) => @glib.Nullable::some(v.as_input_stream())
      None => @glib.Nullable::null()
    },
    content_length,
  )
}

///|
#borrow(self_, content_type, bytes)
extern "c" fn moonbit_soup_message_set_request_body_from_bytes(
  self_ : Message,
  content_type : @glib.Nullable[Bytes],
  bytes : Bytes,
) = "moonbit_soup_message_set_request_body_from_bytes"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_request_body_from_bytes.html).
pub fn Message::set_request_body_from_bytes(
  self : Message,
  content_type : String?,
  bytes : Bytes,
) -> Unit {
  moonbit_soup_message_set_request_body_from_bytes(
    self,
    match content_type {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
    bytes,
  )
}

///|
#borrow(self_, site_for_cookies)
extern "c" fn moonbit_soup_message_set_site_for_cookies(
  self_ : Message,
  site_for_cookies : @glib.Nullable[@glib.Uri],
) = "moonbit_soup_message_set_site_for_cookies"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_site_for_cookies.html).
pub fn Message::set_site_for_cookies(
  self : Message,
  site_for_cookies : @glib.Uri?,
) -> Unit {
  moonbit_soup_message_set_site_for_cookies(
    self,
    match site_for_cookies {
      Some(v) => @glib.Nullable::some(v)
      None => @glib.Nullable::null()
    },
  )
}

///|
#borrow(self_, certificate)
extern "c" fn moonbit_soup_message_set_tls_client_certificate(
  self_ : Message,
  certificate : @glib.Nullable[@gio.TlsCertificate],
) = "moonbit_soup_message_set_tls_client_certificate"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_tls_client_certificate.html).
pub fn Message::set_tls_client_certificate(
  self : Message,
  certificate : &@gio.ITlsCertificate?,
) -> Unit {
  moonbit_soup_message_set_tls_client_certificate(
    self,
    match certificate {
      Some(v) => @glib.Nullable::some(v.as_tls_certificate())
      None => @glib.Nullable::null()
    },
  )
}

///|
#borrow(self_, uri)
extern "c" fn moonbit_soup_message_set_uri(self_ : Message, uri : @glib.Uri) = "moonbit_soup_message_set_uri"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/method.Message.set_uri.html).
pub fn Message::set_uri(self : Message, uri : @glib.Uri) -> Unit {
  moonbit_soup_message_set_uri(self, uri)
}

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

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.Message.accept-certificate.html).
pub fn Message::connect_accept_certificate(
  self : Message,
  f : (Message, @gio.TlsCertificate, @gio.TlsCertificateFlags) -> Bool,
) -> UInt64 {
  soup_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_message_connect_finished(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_finished"

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

///|
#borrow(instance)
extern "c" fn soup_message_connect_got_body(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_got_body"

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

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

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

///|
#borrow(instance)
extern "c" fn soup_message_connect_got_headers(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_got_headers"

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

///|
#borrow(instance)
extern "c" fn soup_message_connect_got_informational(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_got_informational"

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

///|
#borrow(instance)
extern "c" fn soup_message_connect_hsts_enforced(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_hsts_enforced"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.Message.hsts-enforced.html).
pub fn Message::connect_hsts_enforced(
  self : Message,
  f : (Message) -> Unit,
) -> UInt64 {
  soup_message_connect_hsts_enforced(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn soup_message_connect_network_event(
  instance : Message,
  function : FuncRef[
    (
      Message,
      @gio.SocketClientEvent,
      @gio.IOStream,
      (Message, @gio.SocketClientEvent, @gio.IOStream) -> Unit,
    ) -> Unit,
  ],
  closure : (Message, @gio.SocketClientEvent, @gio.IOStream) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_network_event"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.Message.network-event.html).
pub fn Message::connect_network_event(
  self : Message,
  f : (Message, @gio.SocketClientEvent, @gio.IOStream) -> Unit,
) -> UInt64 {
  soup_message_connect_network_event(
    self,
    fn(instance_, event, connection, f) { f(instance_, event, connection) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_message_connect_request_certificate(
  instance : Message,
  function : FuncRef[
    (
      Message,
      @gio.TlsClientConnection,
      (Message, @gio.TlsClientConnection) -> Bool,
    ) -> Bool,
  ],
  closure : (Message, @gio.TlsClientConnection) -> Bool,
) -> UInt64 = "moonbit_soup_message_connect_request_certificate"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.Message.request-certificate.html).
pub fn Message::connect_request_certificate(
  self : Message,
  f : (Message, @gio.TlsClientConnection) -> Bool,
) -> UInt64 {
  soup_message_connect_request_certificate(
    self,
    fn(instance_, tls_connection, f) { f(instance_, tls_connection) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_message_connect_request_certificate_password(
  instance : Message,
  function : FuncRef[
    (Message, @gio.TlsPassword, (Message, @gio.TlsPassword) -> Bool) -> Bool,
  ],
  closure : (Message, @gio.TlsPassword) -> Bool,
) -> UInt64 = "moonbit_soup_message_connect_request_certificate_password"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.Message.request-certificate-password.html).
pub fn Message::connect_request_certificate_password(
  self : Message,
  f : (Message, @gio.TlsPassword) -> Bool,
) -> UInt64 {
  soup_message_connect_request_certificate_password(
    self,
    fn(instance_, tls_password, f) { f(instance_, tls_password) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn soup_message_connect_restarted(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_restarted"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.Message.restarted.html).
pub fn Message::connect_restarted(
  self : Message,
  f : (Message) -> Unit,
) -> UInt64 {
  soup_message_connect_restarted(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn soup_message_connect_starting(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_starting"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/signal.Message.starting.html).
pub fn Message::connect_starting(
  self : Message,
  f : (Message) -> Unit,
) -> UInt64 {
  soup_message_connect_starting(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn soup_message_connect_wrote_body(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_wrote_body"

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

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

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

///|
#borrow(instance)
extern "c" fn soup_message_connect_wrote_headers(
  instance : Message,
  function : FuncRef[(Message, (Message) -> Unit) -> Unit],
  closure : (Message) -> Unit,
) -> UInt64 = "moonbit_soup_message_connect_wrote_headers"

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libsoup/libsoup-3.0/property.Message.status-code.html).
#borrow(self_)
pub extern "c" fn Message::get_status_code(self_ : Message) -> UInt = "moonbit_soup_message_get_status_code"

///|
impl IMessage with fn add_flags(self, flags) -> Unit {
  self.as_message().add_flags(flags)
}

///|
impl IMessage with fn get_connection_id(self) -> UInt64 {
  self.as_message().get_connection_id()
}

///|
impl IMessage with fn get_first_party(self) -> @glib.Uri {
  self.as_message().get_first_party()
}

///|
impl IMessage with fn get_flags(self) -> MessageFlags {
  self.as_message().get_flags()
}

///|
impl IMessage with fn get_force_http1(self) -> Bool {
  self.as_message().get_force_http1()
}

///|
impl IMessage with fn get_http_version(self) -> HTTPVersion {
  self.as_message().get_http_version()
}

///|
impl IMessage with fn get_is_options_ping(self) -> Bool {
  self.as_message().get_is_options_ping()
}

///|
impl IMessage with fn get_is_top_level_navigation(self) -> Bool {
  self.as_message().get_is_top_level_navigation()
}

///|
impl IMessage with fn get_method(self) -> String {
  self.as_message().get_method()
}

///|
impl IMessage with fn get_priority(self) -> MessagePriority {
  self.as_message().get_priority()
}

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

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

///|
impl IMessage with fn get_site_for_cookies(self) -> @glib.Uri {
  self.as_message().get_site_for_cookies()
}

///|
impl IMessage with fn get_status(self) -> Status {
  self.as_message().get_status()
}

///|
impl IMessage with fn get_tls_ciphersuite_name(self) -> String {
  self.as_message().get_tls_ciphersuite_name()
}

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

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

///|
impl IMessage with fn get_tls_protocol_version(self) -> @gio.TlsProtocolVersion {
  self.as_message().get_tls_protocol_version()
}

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

///|
impl IMessage with fn is_keepalive(self) -> Bool {
  self.as_message().is_keepalive()
}

///|
impl IMessage with fn query_flags(self, flags) -> Bool {
  self.as_message().query_flags(flags)
}

///|
impl IMessage with fn remove_flags(self, flags) -> Unit {
  self.as_message().remove_flags(flags)
}

///|
impl IMessage with fn set_first_party(self, first_party) -> Unit {
  self.as_message().set_first_party(first_party)
}

///|
impl IMessage with fn set_flags(self, flags) -> Unit {
  self.as_message().set_flags(flags)
}

///|
impl IMessage with fn set_force_http1(self, value) -> Unit {
  self.as_message().set_force_http1(value)
}

///|
impl IMessage with fn set_is_options_ping(self, is_options_ping) -> Unit {
  self.as_message().set_is_options_ping(is_options_ping)
}

///|
impl IMessage with fn set_is_top_level_navigation(self, is_top_level_navigation) -> Unit {
  self.as_message().set_is_top_level_navigation(is_top_level_navigation)
}

///|
impl IMessage with fn set_method(self, method_) -> Unit {
  self.as_message().set_method(method_)
}

///|
impl IMessage with fn set_priority(self, priority) -> Unit {
  self.as_message().set_priority(priority)
}

///|
impl IMessage with fn set_request_body(
  self,
  content_type,
  stream,
  content_length,
) -> Unit {
  self.as_message().set_request_body(content_type, stream, content_length)
}

///|
impl IMessage with fn set_request_body_from_bytes(self, content_type, bytes) -> Unit {
  self.as_message().set_request_body_from_bytes(content_type, bytes)
}

///|
impl IMessage with fn set_site_for_cookies(self, site_for_cookies) -> Unit {
  self.as_message().set_site_for_cookies(site_for_cookies)
}

///|
impl IMessage with fn set_tls_client_certificate(self, certificate) -> Unit {
  self.as_message().set_tls_client_certificate(certificate)
}

///|
impl IMessage with fn set_uri(self, uri) -> Unit {
  self.as_message().set_uri(uri)
}

///|
impl IMessage with fn tls_client_certificate_password_request_complete(self) -> Unit {
  self.as_message().tls_client_certificate_password_request_complete()
}

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

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

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

///|
impl IMessage with fn connect_got_body_data(self, f) -> UInt64 {
  self.as_message().connect_got_body_data(f)
}

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

///|
impl IMessage with fn connect_got_informational(self, f) -> UInt64 {
  self.as_message().connect_got_informational(f)
}

///|
impl IMessage with fn connect_hsts_enforced(self, f) -> UInt64 {
  self.as_message().connect_hsts_enforced(f)
}

///|
impl IMessage with fn connect_network_event(self, f) -> UInt64 {
  self.as_message().connect_network_event(f)
}

///|
impl IMessage with fn connect_request_certificate(self, f) -> UInt64 {
  self.as_message().connect_request_certificate(f)
}

///|
impl IMessage with fn connect_request_certificate_password(self, f) -> UInt64 {
  self.as_message().connect_request_certificate_password(f)
}

///|
impl IMessage with fn connect_restarted(self, f) -> UInt64 {
  self.as_message().connect_restarted(f)
}

///|
impl IMessage with fn connect_starting(self, f) -> UInt64 {
  self.as_message().connect_starting(f)
}

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

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

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

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

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