cidre 0.16.0

Apple frameworks bindings for rust
Documentation
use std::ffi::CStr;

use crate::{arc, nw};

#[cfg(feature = "sec")]
use crate::sec;

impl nw::ProtocolDefinition {
    #[doc(alias = "nw_protocol_copy_quic_definition")]
    #[inline]
    pub fn quic() -> arc::R<Self> {
        unsafe { nw_protocol_copy_quic_definition() }
    }
}

impl nw::ProtocolMetadata {
    #[doc(alias = "nw_quic_copy_sec_protocol_metadata")]
    #[cfg(feature = "sec")]
    #[inline]
    pub fn quic_sec_protocol_metadata(&self) -> arc::R<sec::ProtocolMetadata> {
        unsafe { nw_quic_copy_sec_protocol_metadata(self) }
    }
}

impl nw::ProtocolOpts {
    #[doc(alias = "nw_quic_add_tls_application_protocol")]
    #[inline]
    pub fn quic_add_tls_application_protocol(&mut self, application_protocol: &CStr) {
        unsafe { nw_quic_add_tls_application_protocol(self, application_protocol.as_ptr()) }
    }

    #[doc(alias = "nw_quic_copy_sec_protocol_options")]
    #[inline]
    pub fn quic_sec_protocol_opts(&self) -> arc::R<nw::SecProtocolOpts> {
        unsafe { nw_quic_copy_sec_protocol_options(self) }
    }

    #[doc(alias = "nw_quic_set_idle_timeout")]
    #[inline]
    pub fn quic_set_idle_timeout(&mut self, idle_timeout: u32) {
        unsafe { nw_quic_set_idle_timeout(self, idle_timeout) }
    }

    #[doc(alias = "nw_quic_set_stream_is_unidirectional")]
    #[inline]
    pub fn quic_set_stream_is_unidirectional(&mut self, is_unidirectional: bool) {
        unsafe { nw_quic_set_stream_is_unidirectional(self, is_unidirectional) }
    }
}

unsafe extern "C-unwind" {
    fn nw_protocol_copy_quic_definition() -> arc::R<nw::ProtocolDefinition>;

    #[cfg(feature = "sec")]
    fn nw_quic_copy_sec_protocol_metadata(
        metadata: &nw::ProtocolMetadata,
    ) -> arc::R<sec::ProtocolMetadata>;

    fn nw_quic_add_tls_application_protocol(
        options: &mut nw::ProtocolOpts,
        application_protocol: *const std::ffi::c_char,
    );
    fn nw_quic_copy_sec_protocol_options(options: &nw::ProtocolOpts)
    -> arc::R<nw::SecProtocolOpts>;
    fn nw_quic_set_idle_timeout(options: &mut nw::ProtocolOpts, idle_timeout: u32);
    fn nw_quic_set_stream_is_unidirectional(
        options: &mut nw::ProtocolOpts,
        is_unidirectional: bool,
    );
}