25 for (
const auto& output :
fOptions.fOutputs) {
26 UriComponents uri{output};
28 if (uri.scheme ==
"tcp") {
30 for (
auto& [key, value] : uri.query_components) {
35 throw std::runtime_error(
36 fmt::format(
"[VtFeeder] Query parameter not implemented for scheme {}: {}", uri.scheme, key));
39 const auto address = uri.scheme +
"://" + uri.authority;
40 fPublishers.push_back(std::unique_ptr<fles::TimesliceSink>(
new fles::TimeslicePublisher(address, hwm)));
42 else if (uri.scheme ==
"file" || uri.scheme.empty()) {
43 fles::ArchiveCompression compression = fles::ArchiveCompression::None;
44 for (
const auto& [key, value] : uri.query_components) {
46 if (value ==
"zstd") {
47 compression = fles::ArchiveCompression::Zstd;
49 else if (value !=
"none") {
50 throw std::runtime_error(fmt::format(
"[VtFeeder] invalid compression type for scheme file: {}", value));
54 throw std::runtime_error(
55 fmt::format(
"[VtFeeder] Query parameter not implemented for scheme {}: {}", uri.scheme, key));
58 const auto filePath = uri.authority + uri.path;
60 std::unique_ptr<fles::TimesliceSink>(
new fles::TimesliceOutputArchive(filePath, compression)));
63 throw std::runtime_error(fmt::format(
"[VtFeeder] Unsupported output scheme: {}", uri.scheme));