MCPcopy Create free account
hub / github.com/chirpstack/chirpstack / _rquickjs_to_struct_val

Function _rquickjs_to_struct_val

chirpstack/src/codec/convert.rs:11–62  ·  view source on GitHub ↗
(val: &rquickjs::Value)

Source from the content-addressed store, hash-verified

9}
10
11fn _rquickjs_to_struct_val(val: &rquickjs::Value) -> Option<pbjson_types::value::Kind> {
12 match val.type_of() {
13 rquickjs::Type::Bool => Some(pbjson_types::value::Kind::BoolValue(val.as_bool().unwrap())),
14 rquickjs::Type::Int => Some(pbjson_types::value::Kind::NumberValue(
15 val.as_int().unwrap().into(),
16 )),
17 rquickjs::Type::Float => {
18 let v = val.as_float().unwrap();
19 if v.is_nan() {
20 // Avoid Cannot serialize NaN as google.protobuf.Value.number_value error.
21 None
22 } else {
23 Some(pbjson_types::value::Kind::NumberValue(v))
24 }
25 }
26 rquickjs::Type::String => Some(pbjson_types::value::Kind::StringValue(
27 val.as_string().unwrap().to_string().unwrap(),
28 )),
29 rquickjs::Type::Array => Some(pbjson_types::value::Kind::ListValue(
30 pbjson_types::ListValue {
31 values: val
32 .as_array()
33 .unwrap()
34 .iter::<rquickjs::Value>()
35 .map(|v| pbjson_types::Value {
36 kind: _rquickjs_to_struct_val(&v.unwrap()),
37 })
38 .collect(),
39 },
40 )),
41 rquickjs::Type::Object => Some(pbjson_types::value::Kind::StructValue(
42 pbjson_types::Struct {
43 fields: val
44 .as_object()
45 .unwrap()
46 .clone()
47 .into_iter()
48 .map(|i| {
49 let (k, v) = i.unwrap();
50 (
51 k.to_string().unwrap(),
52 pbjson_types::Value {
53 kind: _rquickjs_to_struct_val(&v),
54 },
55 )
56 })
57 .collect(),
58 },
59 )),
60 _ => None,
61 }
62}
63
64pub fn struct_to_rquickjs<'js>(
65 ctx: &rquickjs::Ctx<'js>,

Callers 1

rquickjs_to_structFunction · 0.85

Calls 4

unwrapMethod · 0.80
to_stringMethod · 0.80
into_iterMethod · 0.80
intoMethod · 0.45

Tested by

no test coverage detected