I do not intend criticize the framework or the work that the developers have done, I just want to understand the reasoning behind the design of it. Also, I am very new to the framework and haven't built much aside from a few tests and I am not as acquainted with rust as I am with javascript. With that aside, here is my question: why is there a need to explicitly convert from javascript values to rust values? As far as I see it, it just adds bloat to your code. This is the example on how to pass an array to javascript:
fn convert_vec_to_array(mut cx: FunctionContext) -> JsResult<JsArray> {
let vec: Vec<String> = Vec::with_capacity(100);
// Create the JS array
let js_array = JsArray::new(&mut cx, vec.len() as u32);
// Iterate over the rust Vec and map each value in the Vec to the JS array
for (i, obj) in vec.iter().enumerate() {
let js_string = cx.string(obj);
js_array.set(&mut cx, i as u32, js_string).unwrap();
}
Ok(js_array)
}
What is preventing me from just returning a vector and having a match statement in the neon code someplace that converts the vector into a JsArray? And why isn't there a function that can convert a Vec to a JsArray? If it encounters a second Vec it could just recursively convert until it hits a primitive value, which it will eventually do. Same for structs or objects. There could very well be a good reason why some or all of these things are not possible, and I do not intend to criticize the current API. I just want to know why that is.
If conversion was to take place behind the scenes the same function could look like this:
fn convert_vec_to_array(mut cx: FunctionContext) -> std::io::Result<Vec<String>> {
let vec:Vec<String> = Vec::with_capacity(100);
Ok(vec)
}
then under the hood it would understand that Result should be a JsResult, Vec should be a JsArray and so on...
This could possibly extend to arguments as well, but that could have various issues with object types and such.
I do not intend criticize the framework or the work that the developers have done, I just want to understand the reasoning behind the design of it. Also, I am very new to the framework and haven't built much aside from a few tests and I am not as acquainted with rust as I am with javascript. With that aside, here is my question: why is there a need to explicitly convert from javascript values to rust values? As far as I see it, it just adds bloat to your code. This is the example on how to pass an array to javascript:
What is preventing me from just returning a vector and having a
matchstatement in the neon code someplace that converts the vector into aJsArray? And why isn't there a function that can convert aVecto aJsArray? If it encounters a secondVecit could just recursively convert until it hits a primitive value, which it will eventually do. Same for structs or objects. There could very well be a good reason why some or all of these things are not possible, and I do not intend to criticize the current API. I just want to know why that is.If conversion was to take place behind the scenes the same function could look like this:
then under the hood it would understand that
Resultshould be aJsResult,Vecshould be aJsArrayand so on...This could possibly extend to arguments as well, but that could have various issues with object types and such.