Skip to content

Commit

Permalink
fix(rs-port2): failed in test of &str
Browse files Browse the repository at this point in the history
**Error message:**
```
  thread 'value::test::metacall_create_value_str' panicked at src/value/mod.rs:96:9:
    assertion `left == right` failed
        left: "Hello!\"\u{7}"
        right: "Hello!"
```
  • Loading branch information
hulxv committed Dec 2, 2024
1 parent 70aa36f commit dc991db
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 deletions.
10 changes: 2 additions & 8 deletions source/ports/rs_port2/src/value/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,19 +87,13 @@ mod test {
let string = String::from("Hello!");
let value = Value::<String>::new(string.clone()).unwrap();
let result = value.get_value().unwrap();
assert_eq!(result, string);
// assert_eq!(result, string, "Failed in String test");
println!("[String] \"{result}\" == \"{string}\" => Passed",);

/* TODO(FIX): Error with &str
thread 'value::test::metacall_create_value_str' panicked at src/value/mod.rs:96:9:
assertion `left == right` failed
left: "Hello!\"\u{7}"
right: "Hello!"
*/
let str = "Hello!";
let value = Value::<&str>::new(str).unwrap();
let result = value.get_value().unwrap();
assert_eq!(result, str);
assert_eq!(result, str, "Failed in &str test");
println!("[&str] \"{result}\" == \"{str}\" => Passed",);
}

Expand Down
24 changes: 17 additions & 7 deletions source/ports/rs_port2/src/value/string.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use std::{ffi::CStr, marker::PhantomData};
use std::{
ffi::{c_char, CStr},
marker::PhantomData,
};

use anyhow::Result;
use metacall_bindings::value::{create::metacall_value_create_string, metacall_value_to_string};
Expand All @@ -8,13 +11,15 @@ use crate::{check_null_ptr, impl_value_constructor};
use super::{Value, ValueError};

impl Value<&str> {
pub fn get_value(&self) -> Result<&str> {
pub fn get_value<'a>(&self) -> Result<&'a str> {
let ptr = unsafe { metacall_value_to_string(self.ptr) };

check_null_ptr!(ptr, ValueError::NullPointer);
unsafe {
dbg!(&CStr::from_ptr(ptr));
}

let str = unsafe { CStr::from_ptr(ptr) }.to_str()?;
Ok(str)
let str = unsafe { CStr::from_ptr(ptr) }.to_str();
Ok(str.unwrap())
}
}

Expand All @@ -31,9 +36,14 @@ impl Value<String> {

impl_value_constructor!(
value => {
let ptr =
unsafe { metacall_value_create_string(value.as_ptr() as *const i8, value.len() ) };
let value = value.to_string();
let ptr = value.as_ptr() as *const c_char;
let ptr = unsafe {
metacall_value_create_string(ptr, value.len())
};

check_null_ptr!(ptr, ValueError::NullPointer);

Ok(Self {
ptr,
_phantom: PhantomData,
Expand Down

0 comments on commit dc991db

Please sign in to comment.