summaryrefslogtreecommitdiff
path: root/rust/src/project
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-05-07 19:22:21 -0400
committerMason Reed <35282038+emesare@users.noreply.github.com>2025-05-12 17:45:24 -0400
commit2f214f6c9935e8ce8df4732cde44a540a003258c (patch)
tree6fe319433ef0d2ad75fcc58a50eaa632bb627ec9 /rust/src/project
parentb4cf0be8816182c9efca037e27e9439482f8bf36 (diff)
[Rust] Reduce usage of `IntoCStr` in function signatures
This is being done to reduce complexity in function signatures, specifically many of the strings we are passing ultimately should be new types themselves instead of "just strings", things such as type ids. Another place which was confusing was dealing with filesystem related APIs, this commit turns most of those params into a stricter `Path` type. This is bringing the rust api more inline with both python and C++, where the wrapper eagerly converts the string into the languages standard string type. Special consideration must be made for symbols or other possible non utf-8 objects. This commit will be followed up with one that adds the `IntoCStr` bound on API's we want to keep as invalid utf-8 so we can for example, get section by name on a section with invalid utf-8.
Diffstat (limited to 'rust/src/project')
-rw-r--r--rust/src/project/file.rs9
-rw-r--r--rust/src/project/folder.rs12
2 files changed, 10 insertions, 11 deletions
diff --git a/rust/src/project/file.rs b/rust/src/project/file.rs
index 4a1d6fec..3b3e48f7 100644
--- a/rust/src/project/file.rs
+++ b/rust/src/project/file.rs
@@ -9,6 +9,7 @@ use binaryninjacore_sys::{
BNProjectFileSetFolder, BNProjectFileSetName,
};
use std::fmt::Debug;
+use std::path::Path;
use std::ptr::{null_mut, NonNull};
use std::time::SystemTime;
@@ -56,7 +57,7 @@ impl ProjectFile {
}
/// Set the name of this file
- pub fn set_name<S: IntoCStr>(&self, value: S) -> bool {
+ pub fn set_name(&self, value: &str) -> bool {
let value_raw = value.to_cstr();
unsafe { BNProjectFileSetName(self.handle.as_ptr(), value_raw.as_ptr()) }
}
@@ -67,7 +68,7 @@ impl ProjectFile {
}
/// Set the description of this file
- pub fn set_description<S: IntoCStr>(&self, value: S) -> bool {
+ pub fn set_description(&self, value: &str) -> bool {
let value_raw = value.to_cstr();
unsafe { BNProjectFileSetDescription(self.handle.as_ptr(), value_raw.as_ptr()) }
}
@@ -92,8 +93,8 @@ impl ProjectFile {
/// Export this file to disk, `true' if the export succeeded
///
- /// * `dest` - Destination path for the exported contents
- pub fn export<S: IntoCStr>(&self, dest: S) -> bool {
+ /// * `dest` - Destination file path for the exported contents, passing a directory will append the file name.
+ pub fn export(&self, dest: &Path) -> bool {
let dest_raw = dest.to_cstr();
unsafe { BNProjectFileExport(self.handle.as_ptr(), dest_raw.as_ptr()) }
}
diff --git a/rust/src/project/folder.rs b/rust/src/project/folder.rs
index acb663fb..d5d95e76 100644
--- a/rust/src/project/folder.rs
+++ b/rust/src/project/folder.rs
@@ -10,6 +10,7 @@ use binaryninjacore_sys::{
};
use std::ffi::c_void;
use std::fmt::Debug;
+use std::path::Path;
use std::ptr::{null_mut, NonNull};
#[repr(transparent)]
@@ -46,7 +47,7 @@ impl ProjectFolder {
}
/// Set the name of this folder
- pub fn set_name<S: IntoCStr>(&self, value: S) -> bool {
+ pub fn set_name(&self, value: &str) -> bool {
let value_raw = value.to_cstr();
unsafe { BNProjectFolderSetName(self.handle.as_ptr(), value_raw.as_ptr()) }
}
@@ -57,7 +58,7 @@ impl ProjectFolder {
}
/// Set the description of this folder
- pub fn set_description<S: IntoCStr>(&self, value: S) -> bool {
+ pub fn set_description(&self, value: &str) -> bool {
let value_raw = value.to_cstr();
unsafe { BNProjectFolderSetDescription(self.handle.as_ptr(), value_raw.as_ptr()) }
}
@@ -74,22 +75,19 @@ impl ProjectFolder {
unsafe { BNProjectFolderSetParent(self.handle.as_ptr(), folder_handle) }
}
- // TODO: Take Path?
/// Recursively export this folder to disk, returns `true' if the export succeeded
///
/// * `dest` - Destination path for the exported contents
- pub fn export<S: IntoCStr>(&self, dest: S) -> bool {
+ pub fn export(&self, dest: &Path) -> bool {
self.export_with_progress(dest, NoProgressCallback)
}
- // TODO: Take Path?
/// Recursively export this folder to disk, returns `true' if the export succeeded
///
/// * `dest` - Destination path for the exported contents
/// * `progress` - [`ProgressCallback`] that will be called as contents are exporting
- pub fn export_with_progress<S, P>(&self, dest: S, mut progress: P) -> bool
+ pub fn export_with_progress<P>(&self, dest: &Path, mut progress: P) -> bool
where
- S: IntoCStr,
P: ProgressCallback,
{
let dest_raw = dest.to_cstr();