Skip to content

Commit 7552dd7

Browse files
committed
ADD: Add Publisher method to C++
1 parent d8c4902 commit 7552dd7

File tree

4 files changed

+47
-9
lines changed

4 files changed

+47
-9
lines changed

include/databento/publishers.hpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,10 @@ enum class Publisher : std::uint16_t {
220220
};
221221

222222
// Get a Publisher's Venue.
223-
constexpr Venue PublisherVenue(Publisher publisher);
223+
Venue PublisherVenue(Publisher publisher);
224224

225225
// Get a Publisher's Dataset.
226-
constexpr Dataset PublisherDataset(Publisher publisher);
226+
Dataset PublisherDataset(Publisher publisher);
227227

228228
template <typename T>
229229
T FromString(const std::string& str);
@@ -241,5 +241,4 @@ const char* ToString(Publisher publisher);
241241
std::ostream& operator<<(std::ostream& out, Publisher publisher);
242242
template <>
243243
Publisher FromString(const std::string& str);
244-
245244
} // namespace databento

include/databento/record.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010

1111
#include "databento/datetime.hpp" // UnixNanos
1212
#include "databento/enums.hpp"
13-
#include "databento/flag_set.hpp" // FlagSet
13+
#include "databento/flag_set.hpp" // FlagSet
14+
#include "databento/publishers.hpp" // Publisher
1415

1516
namespace databento {
1617
// Common data for all Databento Records.
@@ -30,6 +31,10 @@ struct RecordHeader {
3031
UnixNanos ts_event;
3132

3233
std::size_t Size() const;
34+
// Retrieve the publisher based on the publisher ID.
35+
enum Publisher Publisher() const {
36+
return static_cast<enum Publisher>(publisher_id);
37+
}
3338
};
3439

3540
class Record {
@@ -38,6 +43,7 @@ class Record {
3843

3944
const RecordHeader& Header() const { return *record_; }
4045
::databento::RType RType() const { return record_->rtype; }
46+
enum Publisher Publisher() const { return Header().Publisher(); }
4147

4248
template <typename T>
4349
bool Holds() const {

src/publishers.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
#include "databento/exceptions.hpp" // InvalidArgumentError
88

9-
// NOLINTBEGIN(bugprone-branch-clone)
109
namespace databento {
10+
// NOLINTBEGIN(bugprone-branch-clone)
1111

1212
const char* ToString(Venue venue) {
1313
switch (venue) {
@@ -401,7 +401,7 @@ Dataset FromString(const std::string& str) {
401401
"unknown value '" + str + '\''};
402402
}
403403

404-
constexpr Venue PublisherVenue(Publisher publisher) {
404+
Venue PublisherVenue(Publisher publisher) {
405405
switch (publisher) {
406406
case Publisher::GlbxMdp3Glbx: {
407407
return Venue::Glbx;
@@ -529,9 +529,15 @@ constexpr Venue PublisherVenue(Publisher publisher) {
529529
case Publisher::DbeqBasicEprl: {
530530
return Venue::Eprl;
531531
}
532+
default: {
533+
throw InvalidArgumentError{
534+
"PublisherVenue", "publisher",
535+
"unknown conversion for " +
536+
std::to_string(static_cast<std::uint16_t>(publisher))};
537+
}
532538
}
533539
}
534-
constexpr Dataset PublisherDataset(Publisher publisher) {
540+
Dataset PublisherDataset(Publisher publisher) {
535541
switch (publisher) {
536542
case Publisher::GlbxMdp3Glbx: {
537543
return Dataset::GlbxMdp3;
@@ -659,6 +665,12 @@ constexpr Dataset PublisherDataset(Publisher publisher) {
659665
case Publisher::DbeqBasicEprl: {
660666
return Dataset::DbeqBasic;
661667
}
668+
default: {
669+
throw InvalidArgumentError{
670+
"PublisherDataset", "publisher",
671+
"unknown conversion for " +
672+
std::to_string(static_cast<std::uint16_t>(publisher))};
673+
}
662674
}
663675
}
664676

@@ -932,6 +944,5 @@ Publisher FromString(const std::string& str) {
932944
throw InvalidArgumentError{"FromString<Publisher>", "str",
933945
"unknown value '" + str + '\''};
934946
}
935-
936-
} // namespace databento
937947
// NOLINTEND(bugprone-branch-clone)
948+
} // namespace databento

test/src/record_tests.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,36 @@
22

33
#include <chrono>
44
#include <cstddef>
5+
#include <cstdint>
56

67
#include "databento/constants.hpp"
78
#include "databento/datetime.hpp" // TimeDeltaNanos, UnixNanos
89
#include "databento/enums.hpp"
10+
#include "databento/publishers.hpp"
911
#include "databento/record.hpp"
1012

1113
namespace databento {
1214
namespace test {
15+
TEST(RecordTests, TestPublisher) {
16+
const TradeMsg target{
17+
RecordHeader{sizeof(TradeMsg) / RecordHeader::kLengthMultiplier,
18+
RType::Mbp0,
19+
static_cast<std::uint16_t>(Publisher::OpraPillarEdgo),
20+
1,
21+
{}},
22+
55000000000,
23+
500,
24+
Action::Add,
25+
Side::Bid,
26+
{},
27+
0,
28+
{},
29+
{},
30+
126239};
31+
EXPECT_EQ(target.hd.Publisher(), Publisher::OpraPillarEdgo);
32+
EXPECT_EQ(PublisherVenue(target.hd.Publisher()), Venue::Edgo);
33+
EXPECT_EQ(PublisherDataset(target.hd.Publisher()), Dataset::OpraPillar);
34+
}
1335
TEST(RecordTests, TestMbp10MsgToString) {
1436
Mbp10Msg target{
1537
RecordHeader{sizeof(Mbp10Msg) / RecordHeader::kLengthMultiplier,

0 commit comments

Comments
 (0)