From 0650ddaf987a48a18940cc31600a24401214dc48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=A9=20Antunovic?= Date: Wed, 18 Dec 2024 16:24:50 +1300 Subject: [PATCH] Revert "fix(wrappers/java): experiment with using Vec for ByteArray" This reverts commit 2892a5cd507e9d4fe83863e5a8db22c11caa9d7c. --- src/lib.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 29acafb..105f10f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,14 +26,14 @@ use std::{ptr, slice}; #[repr(C)] pub struct ByteArray { length: usize, - data: Vec, + data: *const u8, } impl Default for ByteArray { fn default() -> Self { Self { length: 0, - data: Vec::new() + data: ptr::null(), } } } @@ -41,14 +41,24 @@ impl Default for ByteArray { impl ByteArray { /// Convert this into a byte vector pub fn to_vec(&self) -> Vec { - self.data.clone() + if self.data.is_null() || self.length == 0 { + Vec::new() + } else { + unsafe { slice::from_raw_parts(self.data, self.length).to_vec() } + } } /// Convert this into a byte vector if possible /// Some if success /// None if not pub fn to_opt_vec(&self) -> Option> { - Some(self.data.clone()) + if self.data.is_null() { + None + } else if self.length == 0 { + Some(Vec::new()) + } else { + Some(unsafe { slice::from_raw_parts(self.data, self.length).to_vec() }) + } } ///Convert to outgoing struct ByteBuffer @@ -62,7 +72,7 @@ impl ByteArray { let data = data.as_ref(); Self { length: data.len(), - data: data.to_vec() + data: data.as_ptr() as *const u8, } } }