use std::mem::MaybeUninit;
use crate::{
error::{Error, Result, from_result},
ffi,
};
pub fn supports_simd() -> Result<bool> {
build_info(ffi::GhosttyBuildInfo_GHOSTTY_BUILD_INFO_SIMD)
}
pub fn supports_kitty_graphics() -> Result<bool> {
build_info(ffi::GhosttyBuildInfo_GHOSTTY_BUILD_INFO_KITTY_GRAPHICS)
}
pub fn supports_tmux_control_mode() -> Result<bool> {
build_info(ffi::GhosttyBuildInfo_GHOSTTY_BUILD_INFO_TMUX_CONTROL_MODE)
}
pub fn optimize_mode() -> Result<OptimizeMode> {
build_info::<ffi::GhosttyOptimizeMode>(ffi::GhosttyBuildInfo_GHOSTTY_BUILD_INFO_OPTIMIZE)
.and_then(|v| v.try_into().map_err(|_| Error::InvalidValue))
}
fn build_info<T>(tag: ffi::GhosttyBuildInfo) -> Result<T> {
let mut value = MaybeUninit::zeroed();
let result = unsafe { ffi::ghostty_build_info(tag, std::ptr::from_mut(&mut value).cast()) };
from_result(result)?;
Ok(unsafe { value.assume_init() })
}
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, int_enum::IntEnum)]
pub enum OptimizeMode {
Debug = ffi::GhosttyOptimizeMode_GHOSTTY_OPTIMIZE_DEBUG,
ReleaseSafe = ffi::GhosttyOptimizeMode_GHOSTTY_OPTIMIZE_RELEASE_SAFE,
ReleaseSmall = ffi::GhosttyOptimizeMode_GHOSTTY_OPTIMIZE_RELEASE_SMALL,
ReleaseFast = ffi::GhosttyOptimizeMode_GHOSTTY_OPTIMIZE_RELEASE_FAST,
}