// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IDtlsServerConnection {
  fn as_dtls_server_connection(Self) -> DtlsServerConnection
}

///|
pub impl IDtlsServerConnection for DtlsServerConnection with fn as_dtls_server_connection(
  self,
) {
  self
}

///|
#borrow(base_socket, certificate, error)
extern "c" fn moonbit_g_dtls_server_connection_new(
  base_socket : DatagramBased,
  certificate : @glib.Nullable[TlsCertificate],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> DtlsServerConnection = "moonbit_g_dtls_server_connection_new"

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

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

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

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

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