fix get/set global_settings

This commit is contained in:
do butterflies cry? 2026-04-13 20:30:28 +10:00
parent 642fe57408
commit a64c61e3d3
Signed by: cry
GPG key ID: F68745A836CA0412

View file

@ -1,21 +1,26 @@
use std::ffi::c_void;
use std::ffi::{CString, c_void};
use crate::NixideResult;
use crate::errors::ErrorContext;
use crate::stdext::AsCPtr as _;
use crate::errors::{AsNixideResult as _, ErrorContext};
use crate::util::wrap;
use crate::util::wrappers::AsInnerPtr as _;
// DEBUG: should this really be unsafe?
/// # Note
/// This function is intentionally marked unsafe to discourage its use.
/// Please prefer [nixide::FlakeSettings] and [nixide::FetchersSettings].
///
pub unsafe fn get_global_setting<S: AsRef<str>>(key: S) -> NixideResult<String> {
let key = key.as_c_ptr()?;
pub unsafe fn get_global_setting(key: &str) -> NixideResult<String> {
let key = CString::new(key).to_nixide_result()?;
wrap::nix_string_callback!(
|callback, userdata: *mut __UserData, ctx: &ErrorContext| unsafe {
sys::nix_setting_get(ctx.as_ptr(), key, Some(callback), userdata as *mut c_void);
sys::nix_setting_get(
ctx.as_ptr(),
key.as_ptr(),
Some(callback),
userdata as *mut c_void,
);
}
)
}
@ -24,14 +29,12 @@ pub unsafe fn get_global_setting<S: AsRef<str>>(key: S) -> NixideResult<String>
/// This function is intentionally marked unsafe to discourage its use.
/// Please prefer [nixide::FlakeSettings] and [nixide::FetchersSettings].
///
pub unsafe fn set_global_setting<S: AsRef<str>, T: AsRef<str>>(
key: S,
value: T,
) -> NixideResult<()> {
let key = key.as_c_ptr()?;
let value = value.as_c_ptr()?;
pub unsafe fn set_global_setting(key: &str, value: &str) -> NixideResult<()> {
// DEBUG: TODO: write a convenient way to convert this to NixideResult
let key = CString::new(key).unwrap();
let value = CString::new(value).unwrap();
wrap::nix_fn!(|ctx: &ErrorContext| unsafe {
sys::nix_setting_set(ctx.as_ptr(), key, value);
sys::nix_setting_set(ctx.as_ptr(), key.as_ptr(), value.as_ptr());
})
}