|
1 | 1 | use crate::project::{systime_from_bntime, Project, ProjectFolder}; |
2 | | -use crate::rc::{CoreArrayProvider, CoreArrayProviderInner, Guard, Ref, RefCountable}; |
| 2 | +use crate::rc::{Array, CoreArrayProvider, CoreArrayProviderInner, Guard, Ref, RefCountable}; |
3 | 3 | use crate::string::{BnString, IntoCStr}; |
4 | 4 | use binaryninjacore_sys::{ |
5 | | - BNFreeProjectFile, BNFreeProjectFileList, BNNewProjectFileReference, BNProjectFile, |
6 | | - BNProjectFileExistsOnDisk, BNProjectFileExport, BNProjectFileGetCreationTimestamp, |
7 | | - BNProjectFileGetDescription, BNProjectFileGetFolder, BNProjectFileGetId, BNProjectFileGetName, |
8 | | - BNProjectFileGetPathInProject, BNProjectFileGetPathOnDisk, BNProjectFileGetProject, |
9 | | - BNProjectFileSetDescription, BNProjectFileSetFolder, BNProjectFileSetName, |
| 5 | + BNFreeProjectFile, BNFreeProjectFileList, BNNewProjectFileReference, BNProjectFile, BNProjectFileAddDependency, BNProjectFileExistsOnDisk, BNProjectFileExport, BNProjectFileGetCreationTimestamp, BNProjectFileGetDependencies, BNProjectFileGetDescription, BNProjectFileGetFolder, BNProjectFileGetId, BNProjectFileGetName, BNProjectFileGetPathInProject, BNProjectFileGetPathOnDisk, BNProjectFileGetProject, BNProjectFileGetRequiredBy, BNProjectFileRemoveDependency, BNProjectFileSetDescription, BNProjectFileSetFolder, BNProjectFileSetName |
10 | 6 | }; |
11 | 7 | use std::fmt::Debug; |
12 | 8 | use std::path::{Path, PathBuf}; |
@@ -110,6 +106,30 @@ impl ProjectFile { |
110 | 106 | let dest_raw = dest.to_cstr(); |
111 | 107 | unsafe { BNProjectFileExport(self.handle.as_ptr(), dest_raw.as_ptr()) } |
112 | 108 | } |
| 109 | + |
| 110 | + /// Add a ProjectFile as a dependency of this file |
| 111 | + pub fn add_dependency(&self, file: Ref<ProjectFile>) -> bool { |
| 112 | + unsafe { BNProjectFileAddDependency(self.handle.as_ptr(), file.handle.as_ptr()) } |
| 113 | + } |
| 114 | + |
| 115 | + /// Remove a ProjectFile as a dependency of this file |
| 116 | + pub fn remove_dependency(&self, file: Ref<ProjectFile>) -> bool { |
| 117 | + unsafe { BNProjectFileRemoveDependency(self.handle.as_ptr(), file.handle.as_ptr()) } |
| 118 | + } |
| 119 | + |
| 120 | + /// Get the ProjectFiles that this file depends on |
| 121 | + pub fn get_dependencies(&self) -> Array<ProjectFile> { |
| 122 | + let mut count = 0; |
| 123 | + let result = unsafe { BNProjectFileGetDependencies(self.handle.as_ptr(), &mut count) }; |
| 124 | + unsafe { Array::new(result, count, ()) } |
| 125 | + } |
| 126 | + |
| 127 | + /// Get the ProjectFiles that depend on this file |
| 128 | + pub fn get_required_by(&self) -> Array<ProjectFile> { |
| 129 | + let mut count = 0; |
| 130 | + let result = unsafe { BNProjectFileGetRequiredBy(self.handle.as_ptr(), &mut count) }; |
| 131 | + unsafe { Array::new(result, count, ()) } |
| 132 | + } |
113 | 133 | } |
114 | 134 |
|
115 | 135 | impl Debug for ProjectFile { |
|
0 commit comments