(val: &rquickjs::Value)
| 9 | } |
| 10 | |
| 11 | fn _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 | |
| 64 | pub fn struct_to_rquickjs<'js>( |
| 65 | ctx: &rquickjs::Ctx<'js>, |
no test coverage detected