linkrs_core/
value_conversion.rs1use crate::Value;
6
7use crate::types::c_api::{
8 linkrs_string_t, linkrs_value_data_t, linkrs_value_t, linkrs_value_type_t,
9};
10
11pub fn core_value_to_linkrs(value: &Value) -> linkrs_value_t {
13 match value {
14 Value::Null(_) => linkrs_value_t {
15 type_: linkrs_value_type_t::LINKRS_NULL,
16 data: linkrs_value_data_t {
17 ptr: std::ptr::null_mut(),
18 },
19 },
20 Value::Bool(b) => linkrs_value_t {
21 type_: linkrs_value_type_t::LINKRS_BOOL,
22 data: linkrs_value_data_t { boolean: *b },
23 },
24 Value::Int(i) => linkrs_value_t {
25 type_: linkrs_value_type_t::LINKRS_INT,
26 data: linkrs_value_data_t { integer: *i as i64 },
27 },
28 Value::Float(f) => linkrs_value_t {
29 type_: linkrs_value_type_t::LINKRS_FLOAT,
30 data: linkrs_value_data_t {
31 floating: *f as f64,
32 },
33 },
34 Value::String(s) => {
35 let string_t = linkrs_string_t {
36 data: s.as_ptr() as *const i8,
37 len: s.len(),
38 };
39 linkrs_value_t {
40 type_: linkrs_value_type_t::LINKRS_STRING,
41 data: linkrs_value_data_t { string: string_t },
42 }
43 }
44 _ => linkrs_value_t {
45 type_: linkrs_value_type_t::LINKRS_NULL,
46 data: linkrs_value_data_t {
47 ptr: std::ptr::null_mut(),
48 },
49 },
50 }
51}
52
53pub fn core_value_to_linkrs_type(value: &Value) -> linkrs_value_type_t {
55 match value {
56 Value::Null(_) => linkrs_value_type_t::LINKRS_NULL,
57 Value::Bool(_) => linkrs_value_type_t::LINKRS_BOOL,
58 Value::Int(_) => linkrs_value_type_t::LINKRS_INT,
59 Value::Float(_) => linkrs_value_type_t::LINKRS_FLOAT,
60 Value::String(_) => linkrs_value_type_t::LINKRS_STRING,
61 Value::List(_) => linkrs_value_type_t::LINKRS_LIST,
62 Value::Map(_) => linkrs_value_type_t::LINKRS_MAP,
63 Value::Vertex(_) => linkrs_value_type_t::LINKRS_VERTEX,
64 Value::Edge(_) | Value::EdgeHeader(_) => linkrs_value_type_t::LINKRS_EDGE,
65 Value::Path(_) => linkrs_value_type_t::LINKRS_PATH,
66 _ => linkrs_value_type_t::LINKRS_NULL,
67 }
68}