Merge pull request #25 from nixops4/clone

Clone
This commit is contained in:
John Ericson 2025-12-06 13:45:46 -05:00 committed by GitHub
commit 17f0e655fd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 39 additions and 0 deletions

View file

@ -14,6 +14,38 @@ impl Derivation {
pub(crate) fn new_raw(inner: NonNull<raw::derivation>) -> Self {
Derivation { inner }
}
/// This is a low level function that you shouldn't have to call unless you are developing the Nix bindings.
///
/// Construct a new `Derivation` by first cloning the C derivation.
///
/// # Safety
///
/// This does not take ownership of the C derivation, so it should be a borrowed pointer, or you should free it.
pub unsafe fn new_raw_clone(inner: NonNull<raw::derivation>) -> Self {
Self::new_raw(
NonNull::new(raw::derivation_clone(inner.as_ptr()))
.or_else(|| panic!("nix_derivation_clone returned a null pointer"))
.unwrap(),
)
}
/// This is a low level function that you shouldn't have to call unless you are developing the Nix bindings.
///
/// Get a pointer to the underlying Nix C API derivation.
///
/// # Safety
///
/// This function is unsafe because it returns a raw pointer. The caller must ensure that the pointer is not used beyond the lifetime of this `Derivation`.
pub unsafe fn as_ptr(&self) -> *mut raw::derivation {
self.inner.as_ptr()
}
}
impl Clone for Derivation {
fn clone(&self) -> Self {
unsafe { Self::new_raw_clone(self.inner) }
}
}
impl Drop for Derivation {

View file

@ -64,6 +64,13 @@ impl StorePath {
self.raw.as_ptr()
}
}
impl Clone for StorePath {
fn clone(&self) -> Self {
unsafe { Self::new_raw_clone(self.raw) }
}
}
impl Drop for StorePath {
fn drop(&mut self) {
unsafe {