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

// Report ID Constants
// the_metric_name the_report
const uint32_t kTheMetricNameTheReportReportId = 10;
// the_other_metric_name the_report
const uint32_t kTheOtherMetricNameTheReportReportId = 10;
// the_metric_name the_other_report
const uint32_t kTheMetricNameTheOtherReportReportId = 20;
// event groups the_report
const uint32_t kEventGroupsTheReportReportId = 30;
// exponential buckets report
const uint32_t kExponentialBucketsReportReportId = 40;

// 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[] = "KssHCgx0aGVfY3VzdG9tZXIQChq4BwoLdGhlX3Byb2plY3QQBRpdCg90aGVfbWV0cmljX25hbWUQChgFIGRiEQoKdGhlX3JlcG9ydBAKGI9OYhYKEHRoZV9vdGhlcl9yZXBvcnQQFBgDcgx0aGVfY3VzdG9tZXJ6C3RoZV9wcm9qZWN0GocBChV0aGVfb3RoZXJfbWV0cmljX25hbWUQChgFIMgBKAFQAWIQCgp0aGVfcmVwb3J0EAoYB3IMdGhlX2N1c3RvbWVyegt0aGVfcHJvamVjdIIBNRILCAASB0FuRXZlbnQSEAgBEgxBbm90aGVyRXZlbnQSEQgCEg1BIHRoaXJkIGV2ZW50GMgBGoICCgxldmVudCBncm91cHMQChgFIKwCKAFQAWIQCgp0aGVfcmVwb3J0EB4YB3IMdGhlX2N1c3RvbWVyegt0aGVfcHJvamVjdIIBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGjsKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBXIMdGhlX2N1c3RvbWVyegt0aGVfcHJvamVjdBpNChNleHBvbmVudGlhbCBidWNrZXRzEAoYBSD0A2IUCgZyZXBvcnQQKFIICgYQAxgCIAJyDHRoZV9jdXN0b21lcnoLdGhlX3Byb2plY3QakQEKBm1ldHJpYxAKGAUg2ARyDHRoZV9jdXN0b21lcnoLdGhlX3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVzGpgBCg1zZWNvbmQgbWV0cmljEAoYBSDZBHIMdGhlX2N1c3RvbWVyegt0aGVfcHJvamVjdIIBLwoFRmlyc3QSBQgBEgFBEgcIAhIDU2V0EgsIAxIHT2ZFdmVudBIJCAQSBUNvZGVzggEyCgZTZWNvbmQSCAgAEgRTb21lEggIBBIETW9yZRIJCAgSBUV2ZW50EgkIEBIFQ29kZXM=";

#endif  // COBALT_REGISTRY_THE_CUSTOMER_THE_PROJECT_GEN_
