diff options
| author | Josh Ferrell <josh@vector35.com> | 2025-08-26 15:49:45 -0400 |
|---|---|---|
| committer | Alexander Taylor <alex@vector35.com> | 2025-11-04 22:08:25 -0500 |
| commit | ae1dbe7e69e3a1d5cc69fa5362fba1b85ba5b6b8 (patch) | |
| tree | 034f72677b3751a8d467d229192646f5ce1b40e0 /rust/src/project | |
| parent | 21324fa57b44ba77e46be4952a02484cb8c3ef5c (diff) | |
Add project file dependencies
Diffstat (limited to 'rust/src/project')
| -rw-r--r-- | rust/src/project/file.rs | 32 |
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 { |
