nnsdk 0.6.2

Cleanroom reverse-engineered bindings for nnsdk (Nintendo Switch SDK)
Documentation
use self::super::root;
use self::super::{OfflineHtmlPageReturnValue, ShowOfflineHtmlPageArg};
#[repr(C)]
#[derive(Debug)]
pub struct OfflineWebSession {
    pub inner_web_impl: *const u8,
}
impl OfflineWebSession {
    pub fn new() -> Self {
        let web_impl_size = unsafe { GetWorkBufferSize() };
        let inner_web_impl =
            alloc::vec![0u8; web_impl_size].leak().as_ptr() as *const u8;

        let session = Self { inner_web_impl };

        unsafe {
            Initialize(&session, inner_web_impl, web_impl_size);
        }

        session
    }
}

impl Drop for OfflineWebSession {
    fn drop(&mut self) {
        unsafe {
            Finalize(self);
            let web_impl_size = GetWorkBufferSize();
            if web_impl_size != 0 {
                alloc::alloc::dealloc(
                    self.inner_web_impl as *mut u8,
                    alloc::alloc::Layout::from_size_align_unchecked(web_impl_size, 1),
                );
            }
        }
    }
}

extern "C" {
    #[link_name = "\u{1}_ZN2nn3web17OfflineWebSession17GetWorkBufferSizeEv"]
    pub fn GetWorkBufferSize() -> usize;
}
extern "C" {
    #[link_name = "\u{1}_ZN2nn3web17OfflineWebSession10InitializeEPvm"]
    pub fn Initialize(
        session: *const OfflineWebSession,
        offline_web_impl: *const u8,
        offline_web_impl_size: usize,
    );
}
extern "C" {
    #[link_name = "\u{1}_ZN2nn3web17OfflineWebSession8FinalizeEv"]
    pub fn Finalize(session: *const OfflineWebSession);
}
extern "C" {
    #[link_name = "\u{1}_ZN2nn3web17OfflineWebSession5StartEPPNS_2os15SystemEventTypeERKNS0_22ShowOfflineHtmlPageArgE"]
    pub fn Start(
        session: &OfflineWebSession,
        system_evt: &&root::nn::os::SystemEventType,
        webpage_arg: &ShowOfflineHtmlPageArg,
    );
}
extern "C" {
    #[link_name = "\u{1}_ZN2nn3web17OfflineWebSession6AppearEv"]
    pub fn Appear(session: &OfflineWebSession) -> bool;
}
extern "C" {
    #[link_name = "\u{1}_ZN2nn3web17OfflineWebSession21TrySendContentMessageEPKcm"]
    pub fn TrySendContentMessage(
        session: &OfflineWebSession,
        buffer: *const u8,
        buf_len: usize,
    ) -> bool;
}
extern "C" {
    #[link_name = "\u{1}_ZN2nn3web17OfflineWebSession24TryReceiveContentMessageEPmPcm"]
    pub fn TryReceiveContentMessage(
        session: &OfflineWebSession,
        out_size: *mut usize,
        buffer: *const u8,
        buf_len: usize,
    ) -> bool;
}
extern "C" {
    #[link_name = "\u{1}_ZN2nn3web17OfflineWebSession11WaitForExitEPNS0_26OfflineHtmlPageReturnValueE"]
    pub fn WaitForExit(
        session: &OfflineWebSession,
        return_val: &OfflineHtmlPageReturnValue,
    ) -> root::Result;
}