// This file was generated by Cobalt's Config parser based on the configuration
// YAML in the cobalt_config repository. Edit the YAML there to make changes.
#ifndef COBALT_REGISTRY_THE_CUSTOMER_THE_PROJECT_GEN_
#define COBALT_REGISTRY_THE_CUSTOMER_THE_PROJECT_GEN_

#include <cstdint>

const char kCustomerName[] = "the_customer";
const uint32_t kCustomerId = 10;
const char kProjectName[] = "the_project";
const uint32_t kProjectId = 5;

// Linear bucket constants for linear buckets
const int64_t kLinearBucketsIntBucketsFloor = 0;
const uint32_t kLinearBucketsIntBucketsNumBuckets = 140;
const uint32_t kLinearBucketsIntBucketsStepSize = 5;

// Exponential bucket constants for exponential buckets report
const int64_t kExponentialBucketsReportIntBucketsFloor = 0;
const uint32_t kExponentialBucketsReportIntBucketsNumBuckets = 3;
const uint32_t kExponentialBucketsReportIntBucketsInitialStep = 2;
const uint32_t kExponentialBucketsReportIntBucketsStepMultiplier = 2;

// Metric ID Constants
// the_metric_name
const uint32_t kTheMetricNameMetricId = 100;
// the_other_metric_name
const uint32_t kTheOtherMetricNameMetricId = 200;
// event groups
const uint32_t kEventGroupsMetricId = 300;
// linear buckets
const uint32_t kLinearBucketsMetricId = 400;
// exponential buckets
const uint32_t kExponentialBucketsMetricId = 500;
// metric
const uint32_t kMetricMetricId = 600;
// second metric
const uint32_t kSecondMetricMetricId = 601;

// Enum for the_other_metric_name (Metric Dimension 0)
namespace __the_other_metric_name_metric_dimension_0_internal_scope_do_not_use__ {
enum Enum {
  AnEvent = 0,
  AnotherEvent = 1,
  AThirdEvent = 2,
};
}  // __the_other_metric_name_metric_dimension_0_internal_scope_do_not_use__
using TheOtherMetricNameMetricDimension0 = __the_other_metric_name_metric_dimension_0_internal_scope_do_not_use__::Enum;
const TheOtherMetricNameMetricDimension0 TheOtherMetricNameMetricDimension0_AnEvent = TheOtherMetricNameMetricDimension0::AnEvent;
const TheOtherMetricNameMetricDimension0 TheOtherMetricNameMetricDimension0_AnotherEvent = TheOtherMetricNameMetricDimension0::AnotherEvent;
const TheOtherMetricNameMetricDimension0 TheOtherMetricNameMetricDimension0_AThirdEvent = TheOtherMetricNameMetricDimension0::AThirdEvent;

// Alias for event groups (Metric Dimension The First Group) which has the same event codes
using EventGroupsMetricDimensionTheFirstGroup = TheOtherMetricNameMetricDimension0;
const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AnEvent = EventGroupsMetricDimensionTheFirstGroup::AnEvent;
const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AnotherEvent = EventGroupsMetricDimensionTheFirstGroup::AnotherEvent;
const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AThirdEvent = EventGroupsMetricDimensionTheFirstGroup::AThirdEvent;

// Enum for the_project (Metric Dimension A second group)
namespace __the_project_metric_dimension_a_second_group_internal_scope_do_not_use__ {
enum Enum {
  This = 1,
  Is = 2,
  Another = 3,
  Test = 4,
};
}  // __the_project_metric_dimension_a_second_group_internal_scope_do_not_use__
using TheProjectMetricDimensionASecondGroup = __the_project_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
// Alias for event groups (Metric Dimension A second group) which has the same event codes
using EventGroupsMetricDimensionASecondGroup = TheProjectMetricDimensionASecondGroup;
const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_This = EventGroupsMetricDimensionASecondGroup::This;
const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Is = EventGroupsMetricDimensionASecondGroup::Is;
const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Another = EventGroupsMetricDimensionASecondGroup::Another;
const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Test = EventGroupsMetricDimensionASecondGroup::Test;

// Enum for the_project (Metric Dimension 2)
namespace __the_project_metric_dimension_2_internal_scope_do_not_use__ {
enum Enum {
  ThisMetric = 0,
  HasNo = 2,
  Name = 4,
  Alias = HasNo,
};
}  // __the_project_metric_dimension_2_internal_scope_do_not_use__
using TheProjectMetricDimension2 = __the_project_metric_dimension_2_internal_scope_do_not_use__::Enum;
// Alias for event groups (Metric Dimension 2) which has the same event codes
using EventGroupsMetricDimension2 = TheProjectMetricDimension2;
const EventGroupsMetricDimension2 EventGroupsMetricDimension2_ThisMetric = EventGroupsMetricDimension2::ThisMetric;
const EventGroupsMetricDimension2 EventGroupsMetricDimension2_HasNo = EventGroupsMetricDimension2::HasNo;
const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Name = EventGroupsMetricDimension2::Name;
const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Alias = EventGroupsMetricDimension2::Alias;

// Enum for the_project (Metric Dimension First)
namespace __the_project_metric_dimension_first_internal_scope_do_not_use__ {
enum Enum {
  A = 1,
  Set = 2,
  OfEvent = 3,
  Codes = 4,
};
}  // __the_project_metric_dimension_first_internal_scope_do_not_use__
using TheProjectMetricDimensionFirst = __the_project_metric_dimension_first_internal_scope_do_not_use__::Enum;
// Alias for metric (Metric Dimension First) which has the same event codes
using MetricMetricDimensionFirst = TheProjectMetricDimensionFirst;
const MetricMetricDimensionFirst MetricMetricDimensionFirst_A = MetricMetricDimensionFirst::A;
const MetricMetricDimensionFirst MetricMetricDimensionFirst_Set = MetricMetricDimensionFirst::Set;
const MetricMetricDimensionFirst MetricMetricDimensionFirst_OfEvent = MetricMetricDimensionFirst::OfEvent;
const MetricMetricDimensionFirst MetricMetricDimensionFirst_Codes = MetricMetricDimensionFirst::Codes;

// Alias for second metric (Metric Dimension First) which has the same event codes
using SecondMetricMetricDimensionFirst = TheProjectMetricDimensionFirst;
const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_A = SecondMetricMetricDimensionFirst::A;
const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Set = SecondMetricMetricDimensionFirst::Set;
const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_OfEvent = SecondMetricMetricDimensionFirst::OfEvent;
const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Codes = SecondMetricMetricDimensionFirst::Codes;

// Enum for the_project (Metric Dimension Second)
namespace __the_project_metric_dimension_second_internal_scope_do_not_use__ {
enum Enum {
  Some = 0,
  More = 4,
  Event = 8,
  Codes = 16,
};
}  // __the_project_metric_dimension_second_internal_scope_do_not_use__
using TheProjectMetricDimensionSecond = __the_project_metric_dimension_second_internal_scope_do_not_use__::Enum;
// Alias for metric (Metric Dimension Second) which has the same event codes
using MetricMetricDimensionSecond = TheProjectMetricDimensionSecond;
const MetricMetricDimensionSecond MetricMetricDimensionSecond_Some = MetricMetricDimensionSecond::Some;
const MetricMetricDimensionSecond MetricMetricDimensionSecond_More = MetricMetricDimensionSecond::More;
const MetricMetricDimensionSecond MetricMetricDimensionSecond_Event = MetricMetricDimensionSecond::Event;
const MetricMetricDimensionSecond MetricMetricDimensionSecond_Codes = MetricMetricDimensionSecond::Codes;

// Alias for second metric (Metric Dimension Second) which has the same event codes
using SecondMetricMetricDimensionSecond = TheProjectMetricDimensionSecond;
const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Some = SecondMetricMetricDimensionSecond::Some;
const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_More = SecondMetricMetricDimensionSecond::More;
const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Event = SecondMetricMetricDimensionSecond::Event;
const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Codes = SecondMetricMetricDimensionSecond::Codes;

// The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
const char kConfig[] = "KosGCgx0aGVfY3VzdG9tZXIQChr4BQoLdGhlX3Byb2plY3QQBRpCCg90aGVfbWV0cmljX25hbWUQChgFIGRiEQoKdGhlX3JlcG9ydBAKGI9OYhYKEHRoZV9vdGhlcl9yZXBvcnQQFBgDGmwKFXRoZV9vdGhlcl9tZXRyaWNfbmFtZRAKGAUgyAEoAVABYhAKCnRoZV9yZXBvcnQQChgHggE1EgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYyAEa5wEKDGV2ZW50IGdyb3VwcxAKGAUgrAIoAVABYhAKCnRoZV9yZXBvcnQQHhgHggFFCg9UaGUgRmlyc3QgR3JvdXASCwgAEgdBbkV2ZW50EhAIARIMQW5vdGhlckV2ZW50EhEIAhINQSB0aGlyZCBldmVudBgCggE5Cg5BIHNlY29uZCBncm91cBIICAESBFRoaXMSBggCEgJJcxILCAMSB2Fub3RoZXISCAgEEgRUZXN0ggE1Eg4IABIKVGhpc01ldHJpYxIJCAISBUhhc05vEggIBBIETmFtZSoOCgVIYXNObxIFQWxpYXMaIAoObGluZWFyIGJ1Y2tldHMQChgFIJADQgcSBRCMARgFGjIKE2V4cG9uZW50aWFsIGJ1Y2tldHMQChgFIPQDYhQKBnJlcG9ydBAoUggKBhADGAIgAhp2CgZtZXRyaWMQChgFINgEggEvCgVGaXJzdBIFCAESAUESBwgCEgNTZXQSCwgDEgdPZkV2ZW50EgkIBBIFQ29kZXOCATIKBlNlY29uZBIICAASBFNvbWUSCAgEEgRNb3JlEgkICBIFRXZlbnQSCQgQEgVDb2Rlcxp9Cg1zZWNvbmQgbWV0cmljEAoYBSDZBIIBLwoFRmlyc3QSBQgBEgFBEgcIAhIDU2V0EgsIAxIHT2ZFdmVudBIJCAQSBUNvZGVzggEyCgZTZWNvbmQSCAgAEgRTb21lEggIBBIETW9yZRIJCAgSBUV2ZW50EgkIEBIFQ29kZXM=";

#endif  // COBALT_REGISTRY_THE_CUSTOMER_THE_PROJECT_GEN_
