summaryrefslogtreecommitdiff
path: root/rust
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2025-08-26 15:49:45 -0400
committerAlexander Taylor <alex@vector35.com>2025-11-04 22:08:25 -0500
commitae1dbe7e69e3a1d5cc69fa5362fba1b85ba5b6b8 (patch)
tree034f72677b3751a8d467d229192646f5ce1b40e0 /rust
parent21324fa57b44ba77e46be4952a02484cb8c3ef5c (diff)
Add project file dependencies
Diffstat (limited to 'rust')
-rw-r--r--rust/src/project/file.rs32
1 files changed, 26 insertions, 6 deletions
diff --git a/rust/src/project/file.rs b/rust/src/project/file.rs
index 178a9a65..6950766c 100644
--- a/rust/src/project/file.rs
+++ b/rust/src/project/file.rs
@@ -1,12 +1,8 @@
use crate::project::{systime_from_bntime, Project, ProjectFolder};
-use crate::rc::{CoreArrayProvider, CoreArrayProviderInner, Guard, Ref, RefCountable};
+use crate::rc::{Array, CoreArrayProvider, CoreArrayProviderInner, Guard, Ref, RefCountable};
use crate::string::{BnString, IntoCStr};
use binaryninjacore_sys::{
- BNFreeProjectFile, BNFreeProjectFileList, BNNewProjectFileReference, BNProjectFile,
- BNProjectFileExistsOnDisk, BNProjectFileExport, BNProjectFileGetCreationTimestamp,
- BNProjectFileGetDescription, BNProjectFileGetFolder, BNProjectFileGetId, BNProjectFileGetName,
- BNProjectFileGetPathInProject, BNProjectFileGetPathOnDisk, BNProjectFileGetProject,
- BNProjectFileSetDescription, BNProjectFileSetFolder, BNProjectFileSetName,
+ BNFreeProjectFile, BNFreeProjectFileList, BNNewProjectFileReference, BNProjectFile, BNProjectFileAddDependency, BNProjectFileExistsOnDisk, BNProjectFileExport, BNProjectFileGetCreationTimestamp, BNProjectFileGetDependencies, BNProjectFileGetDescription, BNProjectFileGetFolder, BNProjectFileGetId, BNProjectFileGetName, BNProjectFileGetPathInProject, BNProjectFileGetPathOnDisk, BNProjectFileGetProject, BNProjectFileGetRequiredBy, BNProjectFileRemoveDependency, BNProjectFileSetDescription, BNProjectFileSetFolder, BNProjectFileSetName
};
use std::fmt::Debug;
use std::path::{Path, PathBuf};
@@ -110,6 +106,30 @@ impl ProjectFile {
let dest_raw = dest.to_cstr();
unsafe { BNProjectFileExport(self.handle.as_ptr(), dest_raw.as_ptr()) }
}
+
+ /// Add a ProjectFile as a dependency of this file
+ pub fn add_dependency(&self, file: Ref<ProjectFile>) -> bool {
+ unsafe { BNProjectFileAddDependency(self.handle.as_ptr(), file.handle.as_ptr()) }
+ }
+
+ /// Remove a ProjectFile as a dependency of this file
+ pub fn remove_dependency(&self, file: Ref<ProjectFile>) -> bool {
+ unsafe { BNProjectFileRemoveDependency(self.handle.as_ptr(), file.handle.as_ptr()) }
+ }
+
+ /// Get the ProjectFiles that this file depends on
+ pub fn get_dependencies(&self) -> Array<ProjectFile> {
+ let mut count = 0;
+ let result = unsafe { BNProjectFileGetDependencies(self.handle.as_ptr(), &mut count) };
+ unsafe { Array::new(result, count, ()) }
+ }
+
+ /// Get the ProjectFiles that depend on this file
+ pub fn get_required_by(&self) -> Array<ProjectFile> {
+ let mut count = 0;
+ let result = unsafe { BNProjectFileGetRequiredBy(self.handle.as_ptr(), &mut count) };
+ unsafe { Array::new(result, count, ()) }
+ }
}
impl Debug for ProjectFile {