rpgm_common_types/
util.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use ruby_marshal::FromValue;
use ruby_marshal::FromValueContext;
use ruby_marshal::FromValueError;
use ruby_marshal::StringValue;
use ruby_marshal::Value;
use ruby_marshal::ValueArena;
use ruby_marshal::ValueHandle;

pub fn ruby_string2string(ctx: &FromValueContext, value: &Value) -> Result<String, FromValueError> {
    let value: &StringValue = FromValue::from_value(ctx, value)?;
    let value = value.value();
    let value = std::str::from_utf8(value)
        .map_err(FromValueError::new_other)?
        .to_string();

    Ok(value)
}

pub fn string2ruby_string(
    s: String,
    arena: &mut ValueArena,
) -> Result<ValueHandle, ruby_marshal::IntoValueError> {
    Ok(arena.create_string(s.into()).into())
}