libnotcurses_sys/resizecb.rs
1//! `NcResizeCb`
2
3use crate::{c_api::NcResult_i32, NcPlane};
4
5/// A callback function called when an [`NcPlane`] is resized.
6///
7/// # See also
8/// - [`NcResizeCbUnsafe`][c_api::NcResizeCbUnsafe]
9/// - [`ncresizecb_to_rust`][c_api::ncresizecb_to_rust]
10/// - [`ncresizecb_to_c`][c_api::ncresizecb_to_c]
11pub type NcResizeCb = fn(&mut NcPlane) -> NcResult_i32;
12
13pub(crate) mod c_api {
14 use super::*;
15
16 /// The unsafe version of [`NcResizeCb`] expected by the notcurses C API.
17 pub type NcResizeCbUnsafe = unsafe extern "C" fn(*mut NcPlane) -> NcResult_i32;
18
19 /// Converts [`NcResizeCbUnsafe`] to [`NcResizeCb`].
20 pub fn ncresizecb_to_rust(resizecb: Option<NcResizeCbUnsafe>) -> Option<NcResizeCb> {
21 resizecb.map(|cb| unsafe { core::mem::transmute(cb) })
22 }
23
24 /// Converts [`NcResizeCb`] to [`NcResizeCbUnsafe`].
25 ///
26 // WAITING for https://github.com/rust-lang/rust/issues/57563
27 // to make this function const, and then `NcPlaneOptions` constructors.
28 pub fn ncresizecb_to_c(resizecb: Option<NcResizeCb>) -> Option<NcResizeCbUnsafe> {
29 resizecb.map(|cb| unsafe { core::mem::transmute(cb) })
30 }
31}