// 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_NS1_NS2_GEN_
#define COBALT_REGISTRY_THE_CUSTOMER_THE_PROJECT_NS1_NS2_GEN_

#include <cstdint>

namespace ns1::ns2 {
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[] = "KssHCgx0aGVfY3VzdG9tZXIQChq4BwoLdGhlX3Byb2plY3QQBRpdCg90aGVfbWV0cmljX25hbWUQChgFIGRiEQoKdGhlX3JlcG9ydBAKGI9OYhYKEHRoZV9vdGhlcl9yZXBvcnQQFBgDcgx0aGVfY3VzdG9tZXJ6C3RoZV9wcm9qZWN0GocBChV0aGVfb3RoZXJfbWV0cmljX25hbWUQChgFIMgBKAFQAWIQCgp0aGVfcmVwb3J0EAoYB3IMdGhlX2N1c3RvbWVyegt0aGVfcHJvamVjdIIBNRILCAASB0FuRXZlbnQSEAgBEgxBbm90aGVyRXZlbnQSEQgCEg1BIHRoaXJkIGV2ZW50GMgBGoICCgxldmVudCBncm91cHMQChgFIKwCKAFQAWIQCgp0aGVfcmVwb3J0EB4YB3IMdGhlX2N1c3RvbWVyegt0aGVfcHJvamVjdIIBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGjsKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBXIMdGhlX2N1c3RvbWVyegt0aGVfcHJvamVjdBpNChNleHBvbmVudGlhbCBidWNrZXRzEAoYBSD0A2IUCgZyZXBvcnQQKFIICgYQAxgCIAJyDHRoZV9jdXN0b21lcnoLdGhlX3Byb2plY3QakQEKBm1ldHJpYxAKGAUg2ARyDHRoZV9jdXN0b21lcnoLdGhlX3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVzGpgBCg1zZWNvbmQgbWV0cmljEAoYBSDZBHIMdGhlX2N1c3RvbWVyegt0aGVfcHJvamVjdIIBLwoFRmlyc3QSBQgBEgFBEgcIAhIDU2V0EgsIAxIHT2ZFdmVudBIJCAQSBUNvZGVzggEyCgZTZWNvbmQSCAgAEgRTb21lEggIBBIETW9yZRIJCAgSBUV2ZW50EgkIEBIFQ29kZXM=";
}  // ns1::ns2

#endif  // COBALT_REGISTRY_THE_CUSTOMER_THE_PROJECT_NS1_NS2_GEN_
