MetricDatum deserializeMetricDatum()

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;
}