summaryrefslogtreecommitdiff
path: root/rust/src/binary_view.rs
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2026-02-11 17:56:26 -0800
committerMason Reed <35282038+emesare@users.noreply.github.com>2026-02-23 00:09:44 -0800
commitc1dbea197a6ba7e3d008e01c8169f5c3702151ea (patch)
treec4dc5e203e7c04bd7ba1b105bd065073f05774a5 /rust/src/binary_view.rs
parentd61826e8fbe3580c762f7f317f69201bce3710ad (diff)
[Rust] Refactor `FileMetadata` file information
- Rename and retype `FileMetadata::filename` and make the assignment required to happen at time of construction. - Add `FileMetadata::display_name` which is only to be used for presentation purposes. - Add `FileMetadata::virtual_path` for containers. - Rename `FileMetadata::modified` to `FileMetadata::is_modified` to be more consistent across codebase. - Add some missing documentation. - Add `BinaryView::from_metadata` with accompanying documentation.
Diffstat (limited to 'rust/src/binary_view.rs')
-rw-r--r--rust/src/binary_view.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/rust/src/binary_view.rs b/rust/src/binary_view.rs
index 478b8265..4e35dc8c 100644
--- a/rust/src/binary_view.rs
+++ b/rust/src/binary_view.rs
@@ -2476,8 +2476,14 @@ impl BinaryView {
Ref::new(Self { handle })
}
- pub fn from_path(meta: &mut FileMetadata, file_path: impl AsRef<Path>) -> Result<Ref<Self>> {
- let file = file_path.as_ref().to_cstr();
+ /// Construct the raw binary view from the given metadata. Before calling this make sure you have
+ /// a valid file path set for the [`FileMetadata`]. It is required that the [`FileMetadata::file_path`]
+ /// exist on the local filesystem.
+ pub fn from_metadata(meta: &FileMetadata) -> Result<Ref<Self>> {
+ if !meta.file_path().exists() {
+ return Err(());
+ }
+ let file = meta.file_path().to_cstr();
let handle =
unsafe { BNCreateBinaryDataViewFromFilename(meta.handle, file.as_ptr() as *mut _) };
@@ -2488,6 +2494,15 @@ impl BinaryView {
unsafe { Ok(Ref::new(Self { handle })) }
}
+ /// Construct the raw binary view from the given `file_path` and metadata.
+ ///
+ /// This will implicitly set the metadata file path and then construct the view. If the metadata
+ /// already has the desired file path, use [`BinaryView::from_metadata`] instead.
+ pub fn from_path(meta: &FileMetadata, file_path: impl AsRef<Path>) -> Result<Ref<Self>> {
+ meta.set_file_path(file_path.as_ref());
+ Self::from_metadata(meta)
+ }
+
pub fn from_accessor<A: Accessor>(
meta: &FileMetadata,
file: &mut FileAccessor<A>,