fn set_string_api_complex()

in glean-core/rlb/src/private/object.rs [208:263]


    fn set_string_api_complex() {
        let _lock = lock_test();
        let _t = new_glean(None, true);

        #[derive(
            Debug, Hash, Eq, PartialEq, traits::__serde::Deserialize, traits::__serde::Serialize,
        )]
        #[serde(crate = "traits::__serde")]
        #[serde(deny_unknown_fields)]
        struct StackTrace {
            #[serde(skip_serializing_if = "Option::is_none")]
            error: Option<String>,
            #[serde(
                skip_serializing_if = "Vec::is_empty",
                default = "Vec::new",
                deserialize_with = "traits::__serde_helper::vec_null"
            )]
            modules: Vec<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            thread_info: Option<StackTraceThreadInfo>,
        }

        #[derive(
            Debug, Hash, Eq, PartialEq, traits::__serde::Serialize, traits::__serde::Deserialize,
        )]
        #[serde(crate = "traits::__serde")]
        #[serde(deny_unknown_fields)]
        struct StackTraceThreadInfo {
            base_address: Option<String>,
        }

        let metric: ObjectMetric<StackTrace> = ObjectMetric::new(CommonMetricData {
            name: "object".into(),
            category: "test".into(),
            send_in_pings: vec!["store1".into()],
            ..Default::default()
        });

        let arr_str = json!({
            "error": "error",
            "modules": null,
            "thread_info": null,
        })
        .to_string();
        metric.set_string(arr_str);

        let data = metric.test_get_value(None).expect("no object recorded");
        let expected = json!({
            "error": "error"
        });
        assert_eq!(expected, data);
        assert_eq!(
            0,
            metric.test_get_num_recorded_errors(ErrorType::InvalidValue)
        );
    }