Skip to content

Commit

Permalink
Helper to copy vec<u8> to Uint8Array (#38)
Browse files Browse the repository at this point in the history
  • Loading branch information
kylebarron authored Mar 15, 2022
1 parent bfd6943 commit dfe80d2
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 50 deletions.
31 changes: 7 additions & 24 deletions src/arrow1/wasm.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
use crate::utils::copy_vec_to_uint8_array;
use js_sys::Uint8Array;
use wasm_bindgen::prelude::*;

#[wasm_bindgen(js_name = readParquet)]
pub fn read_parquet(parquet_file: &[u8]) -> Result<Uint8Array, JsValue> {
let buffer = match crate::arrow1::reader::read_parquet(parquet_file) {
// This function would return a rust vec that would be copied to a Uint8Array here
Ok(buffer) => buffer,
match crate::arrow1::reader::read_parquet(parquet_file) {
Ok(buffer) => copy_vec_to_uint8_array(buffer),
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};

let return_len = match (buffer.len() as usize).try_into() {
Ok(return_len) => return_len,
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};
let return_vec = Uint8Array::new_with_length(return_len);
return_vec.copy_from(&buffer);
return Ok(return_vec);
}
}

#[wasm_bindgen(js_name = writeParquet)]
Expand All @@ -24,17 +16,8 @@ pub fn write_parquet(
// TODO: make this param optional?
writer_properties: crate::arrow1::writer_properties::WriterProperties,
) -> Result<Uint8Array, JsValue> {
let buffer = match crate::arrow1::writer::write_parquet(arrow_file, writer_properties) {
// This function would return a rust vec that would be copied to a Uint8Array here
Ok(buffer) => buffer,
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};

let return_len = match (buffer.len() as usize).try_into() {
Ok(return_len) => return_len,
match crate::arrow1::writer::write_parquet(arrow_file, writer_properties) {
Ok(buffer) => copy_vec_to_uint8_array(buffer),
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};
let return_vec = Uint8Array::new_with_length(return_len);
return_vec.copy_from(&buffer);
return Ok(return_vec);
}
}
35 changes: 9 additions & 26 deletions src/arrow2/wasm.rs
Original file line number Diff line number Diff line change
@@ -1,36 +1,19 @@
use crate::utils::copy_vec_to_uint8_array;
use js_sys::Uint8Array;
use wasm_bindgen::prelude::*;

#[wasm_bindgen(js_name = readParquet2)]
pub fn read_parquet2(parquet_file: &[u8]) -> Result<Uint8Array, JsValue> {
let buffer = match crate::arrow2::reader::read_parquet(parquet_file) {
// This function would return a rust vec that would be copied to a Uint8Array here
Ok(buffer) => buffer,
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};

let return_len = match (buffer.len() as usize).try_into() {
Ok(return_len) => return_len,
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};
let return_vec = Uint8Array::new_with_length(return_len);
return_vec.copy_from(&buffer);
return Ok(return_vec);
match crate::arrow2::reader::read_parquet(parquet_file) {
Ok(buffer) => copy_vec_to_uint8_array(buffer),
Err(error) => Err(JsValue::from_str(format!("{}", error).as_str())),
}
}

#[wasm_bindgen(js_name = writeParquet2)]
pub fn write_parquet2(arrow_file: &[u8]) -> Result<Uint8Array, JsValue> {
let buffer = match crate::arrow2::writer::write_parquet(arrow_file) {
// This function would return a rust vec that would be copied to a Uint8Array here
Ok(buffer) => buffer,
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};

let return_len = match (buffer.len() as usize).try_into() {
Ok(return_len) => return_len,
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};
let return_vec = Uint8Array::new_with_length(return_len);
return_vec.copy_from(&buffer);
return Ok(return_vec);
match crate::arrow2::writer::write_parquet(arrow_file) {
Ok(buffer) => copy_vec_to_uint8_array(buffer),
Err(error) => Err(JsValue::from_str(format!("{}", error).as_str())),
}
}
14 changes: 14 additions & 0 deletions src/utils.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
use js_sys::Uint8Array;
use wasm_bindgen::prelude::*;

pub fn set_panic_hook() {
// When the `console_error_panic_hook` feature is enabled, we can call the
// `set_panic_hook` function at least once during initialization, and then
Expand Down Expand Up @@ -25,3 +28,14 @@ macro_rules! log {
println!("LOG - {}", format!( $( $t )* ));
}
}

/// Copy Vec<u8> to a Uint8Array
pub fn copy_vec_to_uint8_array(buffer: Vec<u8>) -> Result<Uint8Array, JsValue> {
let return_len = match (buffer.len() as usize).try_into() {
Ok(return_len) => return_len,
Err(error) => return Err(JsValue::from_str(format!("{}", error).as_str())),
};
let return_vec = Uint8Array::new_with_length(return_len);
return_vec.copy_from(&buffer);
return Ok(return_vec);
}

0 comments on commit dfe80d2

Please sign in to comment.