// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://docs.gtk.org/gio/iface.DtlsClientConnection.html).
pub type DtlsClientConnection

///|
pub(open) trait IDtlsClientConnection {
  fn as_dtls_client_connection(Self) -> DtlsClientConnection
  fn get_server_identity(Self) -> SocketConnectable = _
  fn set_server_identity(Self, &ISocketConnectable) -> Unit = _
}

///|
pub impl IDtlsClientConnection for DtlsClientConnection with fn as_dtls_client_connection(
  self,
) {
  self
}

///|
#borrow(base_socket, server_identity, error)
extern "c" fn moonbit_g_dtls_client_connection_new(
  base_socket : DatagramBased,
  server_identity : @glib.Nullable[SocketConnectable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> DtlsClientConnection = "moonbit_g_dtls_client_connection_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/type_func.DtlsClientConnection.new.html).
pub fn DtlsClientConnection::new(
  base_socket : &IDatagramBased,
  server_identity : &ISocketConnectable?,
) -> DtlsClientConnection raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_dtls_client_connection_new(
    base_socket.as_datagram_based(),
    match server_identity {
      Some(v) => @glib.Nullable::some(v.as_socket_connectable())
      None => @glib.Nullable::null()
    },
    error_,
  )
  match error_.val.to_option() {
    Some(e) => raise e
    None => result
  }
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DtlsClientConnection.get_server_identity.html).
#borrow(self)
pub extern "c" fn DtlsClientConnection::get_server_identity(
  self : DtlsClientConnection,
) -> SocketConnectable = "moonbit_g_dtls_client_connection_get_server_identity"

///|
#borrow(self_, identity)
extern "c" fn moonbit_g_dtls_client_connection_set_server_identity(
  self_ : DtlsClientConnection,
  identity : SocketConnectable,
) = "moonbit_g_dtls_client_connection_set_server_identity"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DtlsClientConnection.set_server_identity.html).
pub fn DtlsClientConnection::set_server_identity(
  self : DtlsClientConnection,
  identity : &ISocketConnectable,
) -> Unit {
  moonbit_g_dtls_client_connection_set_server_identity(
    self,
    identity.as_socket_connectable(),
  )
}

///|
impl IDtlsClientConnection with fn get_server_identity(self) -> SocketConnectable {
  self.as_dtls_client_connection().get_server_identity()
}

///|
impl IDtlsClientConnection with fn set_server_identity(self, identity) -> Unit {
  self.as_dtls_client_connection().set_server_identity(identity)
}

///|
pub fn DtlsClientConnection::as_datagram_based(
  self : DtlsClientConnection,
) -> DatagramBased = "%identity"

///|
pub impl IDatagramBased for DtlsClientConnection with fn as_datagram_based(self) {
  self.as_datagram_based()
}

///|
pub fn DtlsClientConnection::as_dtls_connection(
  self : DtlsClientConnection,
) -> DtlsConnection = "%identity"

///|
pub impl IDtlsConnection for DtlsClientConnection with fn as_dtls_connection(
  self,
) {
  self.as_dtls_connection()
}