in cloudwatch_metrics_common/src/utils/metric_serialization.cpp [51:92]
MetricDatum deserializeMetricDatum(const Aws::String &basic_string) {
Aws::String aws_str(basic_string.c_str());
JsonValue json_value(aws_str);
if (!json_value.WasParseSuccessful()) {
throw std::invalid_argument("Failed to parse metric JSON string");
}
auto view = json_value.View();
for (const auto& property : required_properties) {
if (!view.KeyExists(property)) {
std::string property_name(property.c_str());
throw std::invalid_argument("Could not find required property " + property_name + " in JSON string");
}
}
MetricDatum datum;
datum.SetMetricName(view.GetString(kMetricNameKey));
datum.SetTimestamp(view.GetInt64(kTimestampKey));
if (view.KeyExists(kDimensionsKey)) {
auto array = view.GetArray(kDimensionsKey) ;
Aws::Vector<Aws::CloudWatch::Model::Dimension> dimensions(array.GetLength());
for (size_t i = 0; i < array.GetLength(); ++i) {
Aws::CloudWatch::Model::Dimension dimension;
dimension.SetName(array[i].GetString(kDimensionsNameKey));
dimension.SetValue(array[i].GetString(kDimensionsValueKey));
dimensions[i] = dimension;
}
datum.SetDimensions(dimensions);
}
if (view.KeyExists(kStorageResolutionKey)) {
datum.SetStorageResolution(view.GetInteger(kStorageResolutionKey));
}
if (view.KeyExists(kUnitKey)) {
datum.SetUnit(Aws::CloudWatch::Model::StandardUnit(view.GetInteger(kUnitKey)));
}
if (view.KeyExists(kValueKey)) {
datum.SetValue(view.GetDouble(kValueKey));
}
return datum;
}