Skip to content

Commit 4e5311a

Browse files
authored
VER: Release 0.40.0
2 parents 72f1bb6 + 0d630b0 commit 4e5311a

File tree

89 files changed

+2858
-2900
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+2858
-2900
lines changed

.clang-format

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
BasedOnStyle: Google
3+
ColumnLimit: 88
34
IncludeCategories:
45
- Regex: '^<(httplib|nlohmann)'
56
Priority: 1

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
# Changelog
22

3+
## 0.40.0 - 2025-07-29
4+
5+
### Enhancements
6+
- Added `OhlcvEod` variant to `RType`
7+
- Added documentation to more enums and record structs
8+
- Aligned string representation of `RType` with Rust
9+
10+
### Breaking changes
11+
- Switched to `std::byte` for most padding fields in record structs. These fields are
12+
now initialized by default
13+
- Hidden padding fields now begin with `_`
14+
15+
### Bug fixes
16+
- Added missing `IndexTs()` method to `v1::InstrumentDefMsg`, `v2::InstrumentDefMsg`,
17+
and `v1::SymbolMappingMsg`
18+
- Fixed error in templated overload of `DbnDecoder::EncodeRecord()`
19+
- Removed unused `Disk` and `S3` variants from `Delivery` enum
20+
321
## 0.39.1 - 2025-07-22
422

523
### Bug fixes

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24..4.0)
66

77
project(
88
databento
9-
VERSION 0.39.1
9+
VERSION 0.40.0
1010
LANGUAGES CXX
1111
DESCRIPTION "Official Databento client library"
1212
)

examples/historical/batch.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
int main() {
1010
auto client = databento::HistoricalBuilder{}.SetKeyFromEnv().Build();
1111

12-
const auto job = client.BatchSubmitJob(databento::dataset::kGlbxMdp3,
13-
{"GEZ2"}, databento::Schema::Trades,
14-
{"2022-08-26", "2022-09-27"});
12+
const auto job =
13+
client.BatchSubmitJob(databento::dataset::kGlbxMdp3, {"GEZ2"},
14+
databento::Schema::Trades, {"2022-08-26", "2022-09-27"});
1515
const auto all_jobs = client.BatchListJobs();
1616

1717
const auto all_job_it = std::find_if(

examples/historical/metadata.cpp

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ int main() {
3131
}
3232
std::cout << '\n';
3333

34-
const auto fields = client.MetadataListFields(databento::Encoding::Dbn,
35-
databento::Schema::Trades);
34+
const auto fields =
35+
client.MetadataListFields(databento::Encoding::Dbn, databento::Schema::Trades);
3636
std::cout << "Fields:\n";
3737
for (const auto& field_detail : fields) {
3838
std::cout << "- " << field_detail << '\n';
3939
}
4040
std::cout << '\n';
4141

42-
const auto dataset_conditions = client.MetadataGetDatasetCondition(
43-
"GLBX.MDP3", {"2019-06-01", "2019-08-01"});
42+
const auto dataset_conditions =
43+
client.MetadataGetDatasetCondition("GLBX.MDP3", {"2019-06-01", "2019-08-01"});
4444
std::cout << "Conditions:\n";
4545
for (const auto& dataset_condition : dataset_conditions) {
4646
std::cout << "- " << dataset_condition << "\n";
@@ -52,26 +52,22 @@ int main() {
5252
for (const auto& [mode, unit_prices] : all_unit_prices) {
5353
const auto* mode_str = ToString(mode);
5454
for (const auto [schema, price] : unit_prices) {
55-
std::cout << "- (" << mode_str << ", " << schema << "): " << price
56-
<< '\n';
55+
std::cout << "- (" << mode_str << ", " << schema << "): " << price << '\n';
5756
}
5857
}
5958
std::cout << '\n';
6059

61-
const auto record_count =
62-
client.MetadataGetRecordCount(kGlbxMdp3, {"2020-12-28", "2020-12-29"},
63-
{"ESH1"}, databento::Schema::Mbo);
60+
const auto record_count = client.MetadataGetRecordCount(
61+
kGlbxMdp3, {"2020-12-28", "2020-12-29"}, {"ESH1"}, databento::Schema::Mbo);
6462
std::cout << "Record count: " << record_count << "\n\n";
6563

6664
const std::size_t billable_size = client.MetadataGetBillableSize(
6765
kGlbxMdp3, {"2020-12-28", "2020-12-29"}, {"ESH1"}, databento::Schema::Mbo,
6866
databento::SType::RawSymbol, {});
69-
std::cout << "Billable size (uncompressed binary bytes): " << billable_size
70-
<< "\n\n";
67+
std::cout << "Billable size (uncompressed binary bytes): " << billable_size << "\n\n";
7168

72-
const auto cost =
73-
client.MetadataGetCost(kGlbxMdp3, {"2020-12-28", "2020-12-29"}, {"ESH1"},
74-
databento::Schema::Mbo);
69+
const auto cost = client.MetadataGetCost(kGlbxMdp3, {"2020-12-28", "2020-12-29"},
70+
{"ESH1"}, databento::Schema::Mbo);
7571
std::cout << "Cost (in cents): " << cost << '\n';
7672

7773
return 0;

examples/historical/readme.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@ int main() {
1616
};
1717
auto print_trades = [&symbol_map](const Record& record) {
1818
const auto& trade_msg = record.Get<TradeMsg>();
19-
std::cout << "Received trade for " << symbol_map.At(trade_msg) << ": "
20-
<< trade_msg << '\n';
19+
std::cout << "Received trade for " << symbol_map.At(trade_msg) << ": " << trade_msg
20+
<< '\n';
2121
return KeepGoing::Continue;
2222
};
23-
client.TimeseriesGetRange(
24-
"GLBX.MDP3", {"2022-06-10T14:30", "2022-06-10T14:40"}, {"ESM2", "NQZ2"},
25-
Schema::Trades, SType::RawSymbol, SType::InstrumentId, {}, decode_symbols,
26-
print_trades);
23+
client.TimeseriesGetRange("GLBX.MDP3", {"2022-06-10T14:30", "2022-06-10T14:40"},
24+
{"ESM2", "NQZ2"}, Schema::Trades, SType::RawSymbol,
25+
SType::InstrumentId, {}, decode_symbols, print_trades);
2726
}
2827
// NOLINTEND(google-build-using-namespace)

examples/historical/timeseries_get_range_to_file.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ int main() {
1414
auto client = databento::HistoricalBuilder{}.SetKeyFromEnv().Build();
1515
const auto limit = 1000;
1616
databento::DbnFileStore dbn_file_store = client.TimeseriesGetRangeToFile(
17-
databento::dataset::kGlbxMdp3, {"2022-10-03T00:00", "2022-10-04T00:00"},
18-
{"ESZ2"}, databento::Schema::Ohlcv1M, databento::SType::RawSymbol,
19-
databento::SType::InstrumentId, limit,
20-
"ESZ2-ohlcv1m-20201003-20201004.dbn.zst");
17+
databento::dataset::kGlbxMdp3, {"2022-10-03T00:00", "2022-10-04T00:00"}, {"ESZ2"},
18+
databento::Schema::Ohlcv1M, databento::SType::RawSymbol,
19+
databento::SType::InstrumentId, limit, "ESZ2-ohlcv1m-20201003-20201004.dbn.zst");
2120
dbn_file_store.Replay([](const databento::Record record) {
2221
const auto& ohlcv_bar = record.Get<databento::OhlcvMsg>();
2322
std::cout << ohlcv_bar << '\n';

examples/live/live_smoke_test.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ std::pair<bool, UnixNanos> TryConvertToUnixNanos(const char* start) {
3636
return std::make_pair(true, UnixNanos{std::chrono::nanoseconds(result)});
3737
}
3838

39-
void ProcessRecords(LiveBlocking& client, Schema schema,
40-
bool start_from_epoch) {
39+
void ProcessRecords(LiveBlocking& client, Schema schema, bool start_from_epoch) {
4140
client.Start();
4241

4342
std::cout << "Starting client...\n";
@@ -46,7 +45,7 @@ void ProcessRecords(LiveBlocking& client, Schema schema,
4645
// outside trading hours
4746
auto expected_rtype = Record::RTypeFromSchema(schema);
4847
if (!start_from_epoch) {
49-
expected_rtype = databento::rtype::SymbolMapping;
48+
expected_rtype = databento::RType::SymbolMapping;
5049
}
5150

5251
constexpr auto timeout = std::chrono::seconds{30};
@@ -112,9 +111,9 @@ class ArgParser {
112111
void Parse(int argc, char* argv[]) {
113112
for (auto i = 1; i < argc;) {
114113
const auto cur_arg = argv[i];
115-
auto it = std::find_if(
116-
args.begin(), args.end(),
117-
[&cur_arg](const auto& arg) { return cur_arg == arg.arg; });
114+
auto it = std::find_if(args.begin(), args.end(), [&cur_arg](const auto& arg) {
115+
return cur_arg == arg.arg;
116+
});
118117
if (it != args.end()) {
119118
it->value = argv[i + 1];
120119
}
@@ -123,9 +122,9 @@ class ArgParser {
123122
}
124123

125124
const char* Get(const std::string& arg_name) const {
126-
auto it = std::find_if(
127-
args.begin(), args.end(),
128-
[&arg_name](const auto& arg) { return arg_name == arg.name; });
125+
auto it = std::find_if(args.begin(), args.end(), [&arg_name](const auto& arg) {
126+
return arg_name == arg.name;
127+
});
129128

130129
if (it == args.end()) {
131130
return nullptr;
@@ -144,8 +143,8 @@ ArgParser ParseArgs(int argc, char* argv[]
144143
ArgParser parser;
145144
parser.Add(ArgParser::Arg{"gateway", "--gateway"});
146145
parser.Add(ArgParser::Arg{"port", "--port", "13000"});
147-
parser.Add(ArgParser::Arg{"api_key_env_var", "--api-key-env-var",
148-
"DATABENTO_API_KEY"});
146+
parser.Add(
147+
ArgParser::Arg{"api_key_env_var", "--api-key-env-var", "DATABENTO_API_KEY"});
149148
parser.Add(ArgParser::Arg{"dataset", "--dataset"});
150149
parser.Add(ArgParser::Arg{"schema", "--schema"});
151150
parser.Add(ArgParser::Arg{"stype", "--stype"});

examples/live/readme.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@ using namespace databento;
1212
int main() {
1313
PitSymbolMap symbol_mappings;
1414

15-
auto client = LiveBuilder{}
16-
.SetKeyFromEnv()
17-
.SetDataset(Dataset::GlbxMdp3)
18-
.BuildThreaded();
15+
auto client =
16+
LiveBuilder{}.SetKeyFromEnv().SetDataset(Dataset::GlbxMdp3).BuildThreaded();
1917

2018
auto handler = [&symbol_mappings](const Record& rec) {
2119
symbol_mappings.OnRecord(rec);
2220
if (const auto* trade = rec.GetIf<TradeMsg>()) {
23-
std::cout << "Received trade for "
24-
<< symbol_mappings[trade->hd.instrument_id] << ':' << *trade
25-
<< '\n';
21+
std::cout << "Received trade for " << symbol_mappings[trade->hd.instrument_id]
22+
<< ':' << *trade << '\n';
2623
}
2724
return KeepGoing::Continue;
2825
};

examples/live/simple.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ static std::sig_atomic_t volatile gSignal;
1616

1717
int main() {
1818
databento::PitSymbolMap symbol_mappings;
19-
auto log_receiver = std::make_unique<databento::ConsoleLogReceiver>(
20-
databento::LogLevel::Debug);
19+
auto log_receiver =
20+
std::make_unique<databento::ConsoleLogReceiver>(databento::LogLevel::Debug);
2121

2222
auto client = databento::LiveBuilder{}
2323
.SetLogReceiver(log_receiver.get())
@@ -30,10 +30,8 @@ int main() {
3030
std::signal(SIGINT, [](int signal) { gSignal = signal; });
3131

3232
std::vector<std::string> symbols{"ESZ5", "ESZ5 C6200", "ESZ5 P5500"};
33-
client.Subscribe(symbols, databento::Schema::Definition,
34-
databento::SType::RawSymbol);
35-
client.Subscribe(symbols, databento::Schema::Mbo,
36-
databento::SType::RawSymbol);
33+
client.Subscribe(symbols, databento::Schema::Definition, databento::SType::RawSymbol);
34+
client.Subscribe(symbols, databento::Schema::Mbo, databento::SType::RawSymbol);
3735

3836
auto metadata_callback = [](databento::Metadata&& metadata) {
3937
std::cout << metadata << '\n';
@@ -43,15 +41,14 @@ int main() {
4341
switch (rec.RType()) {
4442
case RType::Mbo: {
4543
auto ohlcv = rec.Get<databento::WithTsOut<databento::MboMsg>>();
46-
std::cout << "Received tick for "
47-
<< symbol_mappings[ohlcv.rec.hd.instrument_id]
48-
<< " with ts_out " << ohlcv.ts_out.time_since_epoch().count()
49-
<< ": " << ohlcv.rec << '\n';
44+
std::cout << "Received tick for " << symbol_mappings[ohlcv.rec.hd.instrument_id]
45+
<< " with ts_out " << ohlcv.ts_out.time_since_epoch().count() << ": "
46+
<< ohlcv.rec << '\n';
5047
break;
5148
}
5249
case RType::InstrumentDef: {
53-
std::cout << "Received definition: "
54-
<< rec.Get<databento::InstrumentDefMsg>() << '\n';
50+
std::cout << "Received definition: " << rec.Get<databento::InstrumentDefMsg>()
51+
<< '\n';
5552
break;
5653
}
5754
case RType::SymbolMapping: {

0 commit comments

Comments
 (0)