1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use crate::{Alpm, LoadedPackage, Package, Result};

use alpm_sys::*;

pub unsafe trait PkgAdd {
    fn as_alpm_pkg_t(&self) -> *mut alpm_pkg_t;
}

unsafe impl<'a> PkgAdd for Package<'a> {
    fn as_alpm_pkg_t(&self) -> *mut alpm_pkg_t {
        self.pkg
    }
}
unsafe impl<'a> PkgAdd for LoadedPackage<'a> {
    fn as_alpm_pkg_t(&self) -> *mut alpm_pkg_t {
        self.pkg.pkg
    }
}

impl Alpm {
    pub fn trans_add_pkg(&self, pkg: Package) -> Result<()> {
        let ret = unsafe { alpm_add_pkg(self.handle, pkg.pkg) };
        let ok = self.check_ret(ret);
        if ok.is_ok() {
            std::mem::forget(pkg);
        }
        ok
    }
}