You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by fg...@apache.org on 2026/04/24 14:02:36 UTC
(nifi-minifi-cpp) branch main updated (3813ee50c -> f34d739bc)
This is an automated email from the ASF dual-hosted git repository.
fgerlits pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
from 3813ee50c MINIFICPP-2785 Upgrade OpenSSL FIPS to 3.1.2 for FIPS 140-3 support
new 4d396eaf7 MINIFICPP-2760 Input/OutputStreamCallback should return std::expected
new f34d739bc MINIFICPP-2768 use gcc-toolset-14 on rocky
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.github/workflows/ci.yml | 4 +-
.github/workflows/compiler-support.yml | 8 +-
CMakeLists.txt | 10 -
LICENSE | 28 -
NOTICE | 1 -
README.md | 4 +-
cmake/Bustache.cmake | 7 +-
cmake/Coroutines.cmake | 22 -
cmake/Couchbase.cmake | 13 +-
cmake/CppVersion.cmake | 8 +-
cmake/ExpectedLite.cmake | 28 -
cmake/Protobuf.cmake | 4 +-
cmake/fmt.cmake | 4 +-
controller/Controller.cpp | 12 +-
controller/Controller.h | 2 +-
controller/tests/ControllerTests.cpp | 2 +-
core-framework/CMakeLists.txt | 5 +-
core-framework/common/CMakeLists.txt | 5 +-
.../common/include/utils/OptionalUtils.h | 6 +-
core-framework/common/include/utils/ParsingUtils.h | 44 +-
core-framework/common/include/utils/StringUtils.h | 8 +-
.../utils/detail/MonadicOperationWrappers.h | 4 +-
core-framework/common/include/utils/expected.h | 62 +-
core-framework/common/src/utils/ParsingUtils.cpp | 38 +-
core-framework/common/src/utils/StringUtils.cpp | 4 +-
.../include/core/ConfigurableComponentImpl.h | 20 +-
.../core/controller/ControllerServiceBase.h | 4 +-
core-framework/include/http/HTTPCallback.h | 10 +-
core-framework/include/io/StreamPipe.h | 14 +-
core-framework/include/utils/ByteArrayCallback.h | 11 +-
core-framework/include/utils/JsonCallback.h | 21 +-
.../utils/LineByLineInputOutputStreamCallback.h | 2 +-
core-framework/include/utils/file/FileUtils.h | 6 +-
core-framework/include/utils/file/PathUtils.h | 12 +-
core-framework/include/utils/net/DNS.h | 6 +-
.../src/core/ConfigurableComponentImpl.cpp | 42 +-
core-framework/src/core/Property.cpp | 18 +-
core-framework/src/utils/Cron.cpp | 12 +-
.../utils/LineByLineInputOutputStreamCallback.cpp | 19 +-
core-framework/src/utils/file/FileUtils.cpp | 4 +-
core-framework/src/utils/net/DNS.cpp | 10 +-
docker/rockylinux/Dockerfile | 9 +-
extension-framework/CMakeLists.txt | 5 +-
.../include/api/core/ProcessContext.h | 6 +-
.../cpp-extension-lib/src/core/ProcessContext.cpp | 4 +-
.../cpp-extension-lib/src/core/ProcessSession.cpp | 44 +-
.../include/serialization/FlowFileSerializer.h | 4 +-
.../include/serialization/FlowFileV3Serializer.h | 2 +-
.../include/serialization/PayloadSerializer.h | 2 +-
.../include/utils/file/FileReaderCallback.h | 2 +-
.../include/utils/file/FileWriterCallback.h | 2 +-
.../src/serialization/FlowFileV3Serializer.cpp | 20 +-
.../src/serialization/PayloadSerializer.cpp | 2 +-
.../src/utils/file/FileReaderCallback.cpp | 8 +-
.../src/utils/file/FileWriterCallback.cpp | 6 +-
extensions/aws/processors/FetchS3Object.cpp | 5 +-
extensions/aws/processors/PutKinesisStream.cpp | 14 +-
extensions/aws/processors/PutKinesisStream.h | 4 +-
extensions/aws/processors/PutS3Object.cpp | 13 +-
.../azure/processors/FetchAzureBlobStorage.cpp | 6 +-
.../azure/processors/FetchAzureDataLakeStorage.cpp | 8 +-
extensions/azure/processors/PutAzureBlobStorage.h | 8 +-
.../azure/processors/PutAzureDataLakeStorage.cpp | 6 +-
.../azure/processors/PutAzureDataLakeStorage.h | 2 +-
extensions/azure/storage/AzureBlobStorage.cpp | 2 +-
extensions/azure/storage/AzureDataLakeStorage.cpp | 2 +-
extensions/bustache/ApplyTemplate.cpp | 4 +-
extensions/civetweb/processors/ListenHTTP.h | 4 +-
extensions/couchbase/CMakeLists.txt | 15 +-
.../controllerservices/CouchbaseClusterService.cpp | 26 +-
.../controllerservices/CouchbaseClusterService.h | 12 +-
.../couchbase/processors/GetCouchbaseKey.cpp | 6 +-
extensions/couchbase/tests/CMakeLists.txt | 4 +
.../couchbase/tests/MockCouchbaseClusterService.h | 8 +-
extensions/elasticsearch/PostElasticsearch.cpp | 24 +-
extensions/gcp/processors/FetchGCSObject.cpp | 8 +-
extensions/gcp/processors/PutGCSObject.cpp | 6 +-
extensions/grafana-loki/PushGrafanaLoki.h | 2 +-
extensions/grafana-loki/PushGrafanaLokiGrpc.cpp | 6 +-
extensions/grafana-loki/PushGrafanaLokiGrpc.h | 2 +-
extensions/grafana-loki/PushGrafanaLokiREST.cpp | 6 +-
extensions/grafana-loki/PushGrafanaLokiREST.h | 2 +-
extensions/kafka/PublishKafka.cpp | 10 +-
extensions/kubernetes/MetricsApi.cpp | 4 +-
extensions/kubernetes/MetricsApi.h | 2 +-
extensions/kubernetes/MetricsFilter.cpp | 8 +-
extensions/kubernetes/MetricsFilter.h | 2 +-
extensions/libarchive/CompressContent.cpp | 18 +-
extensions/libarchive/CompressContent.h | 12 +-
extensions/libarchive/FocusArchiveEntry.cpp | 15 +-
extensions/libarchive/FocusArchiveEntry.h | 2 +-
extensions/libarchive/MergeContent.cpp | 4 +-
extensions/libarchive/MergeContent.h | 42 +-
extensions/libarchive/UnfocusArchiveEntry.cpp | 4 +-
extensions/libarchive/UnfocusArchiveEntry.h | 2 +-
.../libarchive/tests/CompressContentTests.cpp | 6 +-
extensions/libarchive/tests/MergeFileTests.cpp | 12 +-
.../llamacpp/processors/DefaultLlamaContext.cpp | 8 +-
.../llamacpp/processors/DefaultLlamaContext.h | 2 +-
extensions/llamacpp/processors/LlamaContext.h | 2 +-
.../llamacpp/tests/RunLlamaCppInferenceTests.cpp | 4 +-
extensions/lua/LuaProcessSession.cpp | 12 +-
extensions/mqtt/processors/ConsumeMQTT.cpp | 10 +-
extensions/mqtt/processors/ConsumeMQTT.h | 2 +-
extensions/mqtt/processors/PublishMQTT.cpp | 6 +-
extensions/opc/include/putopc.h | 2 +-
extensions/opc/src/putopc.cpp | 24 +-
extensions/opencv/CaptureRTSPFrame.cpp | 4 +-
extensions/opencv/MotionDetector.cpp | 10 +-
extensions/python/types/PyProcessSession.cpp | 12 +-
extensions/python/types/PyRecordSetReader.cpp | 4 +-
extensions/rocksdb-repos/FlowFileLoader.cpp | 2 +-
extensions/rocksdb-repos/tests/SwapTests.cpp | 11 +-
extensions/sftp/processors/FetchSFTP.cpp | 4 +-
extensions/sftp/processors/PutSFTP.cpp | 2 +-
extensions/smb/SmbConnectionControllerService.cpp | 8 +-
extensions/smb/SmbConnectionControllerService.h | 4 +-
.../utils/MockSmbConnectionControllerService.h | 6 +-
extensions/smb/tests/utils/TempSmbShare.h | 4 +-
extensions/sql/CMakeLists.txt | 2 +-
extensions/standard-processors/CMakeLists.txt | 2 -
.../controllers/JsonRecordSetWriter.cpp | 8 +-
.../controllers/JsonTreeReader.cpp | 24 +-
.../controllers/JsonTreeReader.h | 2 +-
.../standard-processors/controllers/XMLReader.cpp | 4 +-
.../standard-processors/controllers/XMLReader.h | 2 +-
.../controllers/XMLRecordSetWriter.cpp | 4 +-
.../standard-processors/modbus/FetchModbusTcp.cpp | 28 +-
.../standard-processors/modbus/FetchModbusTcp.h | 6 +-
.../modbus/ReadModbusFunctions.cpp | 14 +-
.../modbus/ReadModbusFunctions.h | 10 +-
.../processors/ConvertRecord.cpp | 9 +-
.../processors/DefragmentText.cpp | 6 +-
.../processors/EvaluateJsonPath.cpp | 4 +-
.../standard-processors/processors/ExtractText.cpp | 8 +-
.../standard-processors/processors/ExtractText.h | 2 +-
.../standard-processors/processors/HashContent.cpp | 5 +-
.../standard-processors/processors/InvokeHTTP.cpp | 6 +-
.../standard-processors/processors/InvokeHTTP.h | 2 +-
.../standard-processors/processors/PutUDP.cpp | 8 +-
.../standard-processors/processors/RouteText.cpp | 8 +-
.../standard-processors/processors/SplitJson.cpp | 4 +-
.../standard-processors/processors/SplitRecord.cpp | 11 +-
.../standard-processors/processors/SplitRecord.h | 2 +-
.../standard-processors/processors/SplitText.cpp | 45 +-
.../standard-processors/processors/TailFile.cpp | 8 +-
.../standard-processors/tests/CMakeLists.txt | 2 -
.../tests/integration/InvokeHTTPTests.cpp | 4 +-
.../tests/unit/XMLRecordSetWriterTests.cpp | 2 +-
extensions/standard-processors/utils/JoltUtils.cpp | 88 +-
extensions/standard-processors/utils/JoltUtils.h | 14 +-
.../windows-event-log/ConsumeWindowsEventLog.cpp | 16 +-
.../windows-event-log/ConsumeWindowsEventLog.h | 4 +-
extensions/windows-event-log/wel/Bookmark.cpp | 10 +-
extensions/windows-event-log/wel/Bookmark.h | 2 +-
.../windows-event-log/wel/WindowsEventLog.cpp | 8 +-
extensions/windows-event-log/wel/WindowsEventLog.h | 2 +-
libminifi/CMakeLists.txt | 5 +-
libminifi/include/FlowController.h | 4 +-
libminifi/include/SchedulingAgent.h | 4 +-
libminifi/include/c2/C2Utils.h | 2 +-
libminifi/include/c2/FlowStatusBuilder.h | 8 +-
libminifi/include/c2/PayloadSerializer.h | 2 +-
libminifi/include/core/ProcessContextImpl.h | 16 +-
libminifi/include/core/ProcessSession.h | 2 +-
.../include/core/ProcessSessionReadCallback.h | 2 +-
.../include/core/controller/ControllerService.h | 8 +-
libminifi/include/core/flow/Node.h | 2 +-
libminifi/include/core/state/UpdateController.h | 2 +-
.../include/core/state/nodes/ResponseNodeLoader.h | 2 +-
libminifi/include/utils/file/AssetManager.h | 4 +-
libminifi/src/FlowController.cpp | 12 +-
libminifi/src/SchedulingAgent.cpp | 12 +-
libminifi/src/c2/C2Agent.cpp | 18 +-
libminifi/src/c2/C2Utils.cpp | 14 +-
libminifi/src/c2/FlowStatusBuilder.cpp | 26 +-
libminifi/src/core/ProcessContextImpl.cpp | 22 +-
libminifi/src/core/ProcessSession.cpp | 45 +-
libminifi/src/core/ProcessSessionReadCallback.cpp | 8 +-
.../src/core/state/nodes/ResponseNodeLoader.cpp | 4 +-
libminifi/src/minifi-c.cpp | 10 +-
.../src/sitetosite/CompressionOutputStream.cpp | 23 +-
libminifi/src/sitetosite/SiteToSiteClient.cpp | 28 +-
libminifi/src/utils/file/AssetManager.cpp | 6 +-
.../libtest/unit/ContentRepositoryDependentTests.h | 18 +-
libminifi/test/libtest/unit/ProvenanceTestHelper.h | 2 +
libminifi/test/libtest/unit/TestBase.h | 4 +-
libminifi/test/unit/ExpectedTest.cpp | 177 +-
libminifi/test/unit/FlowFileSerializationTests.cpp | 4 +-
libminifi/test/unit/MetricsTests.cpp | 12 +-
libminifi/test/unit/OptionalTest.cpp | 8 +-
libminifi/test/unit/ParsingUtilsTests.cpp | 22 +-
libminifi/test/unit/SiteToSiteTests.cpp | 2 +-
.../common/include/minifi-cpp/io/StreamCallback.h | 103 +-
.../minifi-cpp/controllers/RecordSetReader.h | 2 +-
.../minifi-cpp/core/ConfigurableComponent.h | 20 +-
.../include/minifi-cpp/core/ProcessContext.h | 26 +-
.../include/minifi-cpp/core/ProcessSession.h | 2 +-
minifi-api/include/minifi-cpp/core/Property.h | 10 +-
.../core/controller/ControllerServiceContext.h | 4 +-
thirdparty/bustache/remove_installs.patch | 49 +
thirdparty/couchbase/remove-debug-symbols.patch | 12 -
thirdparty/couchbase/remove-thirdparty-1.0.2.patch | 172 --
thirdparty/couchbase/remove-thirdparty.patch | 218 +-
.../couchbase/use_fmt_instead_of_spdlog_fmt.patch | 2641 ++++++++++++++++++++
.../libstdc++/avoid_bogus_Wrestrict_PR105651.patch | 32 -
206 files changed, 3860 insertions(+), 1508 deletions(-)
delete mode 100644 cmake/Coroutines.cmake
delete mode 100644 cmake/ExpectedLite.cmake
create mode 100644 thirdparty/bustache/remove_installs.patch
delete mode 100644 thirdparty/couchbase/remove-debug-symbols.patch
delete mode 100644 thirdparty/couchbase/remove-thirdparty-1.0.2.patch
create mode 100644 thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch
delete mode 100644 thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch
(nifi-minifi-cpp) 01/02: MINIFICPP-2760 Input/OutputStreamCallback should return std::expected
Posted by fg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
fgerlits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 4d396eaf7ac69eaae842b94fe8d4bffec808ca91
Author: Martin Zink <ma...@apache.org>
AuthorDate: Fri Apr 24 11:09:55 2026 +0200
MINIFICPP-2760 Input/OutputStreamCallback should return std::expected
Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
Closes #2148
---
core-framework/include/http/HTTPCallback.h | 10 +-
core-framework/include/io/StreamPipe.h | 14 +--
core-framework/include/utils/ByteArrayCallback.h | 11 ++-
core-framework/include/utils/JsonCallback.h | 21 +++--
.../utils/LineByLineInputOutputStreamCallback.h | 2 +-
.../utils/LineByLineInputOutputStreamCallback.cpp | 19 ++--
.../cpp-extension-lib/src/core/ProcessSession.cpp | 44 +++++----
.../include/serialization/FlowFileSerializer.h | 4 +-
.../include/serialization/FlowFileV3Serializer.h | 2 +-
.../include/serialization/PayloadSerializer.h | 2 +-
.../include/utils/file/FileReaderCallback.h | 2 +-
.../include/utils/file/FileWriterCallback.h | 2 +-
.../src/serialization/FlowFileV3Serializer.cpp | 20 ++--
.../src/serialization/PayloadSerializer.cpp | 2 +-
.../src/utils/file/FileReaderCallback.cpp | 8 +-
.../src/utils/file/FileWriterCallback.cpp | 6 +-
extensions/aws/processors/FetchS3Object.cpp | 5 +-
extensions/aws/processors/PutS3Object.cpp | 13 ++-
.../azure/processors/FetchAzureBlobStorage.cpp | 6 +-
.../azure/processors/FetchAzureDataLakeStorage.cpp | 8 +-
extensions/azure/processors/PutAzureBlobStorage.h | 8 +-
.../azure/processors/PutAzureDataLakeStorage.cpp | 6 +-
.../azure/processors/PutAzureDataLakeStorage.h | 2 +-
extensions/azure/storage/AzureBlobStorage.cpp | 2 +-
extensions/azure/storage/AzureDataLakeStorage.cpp | 2 +-
extensions/bustache/ApplyTemplate.cpp | 4 +-
.../couchbase/processors/GetCouchbaseKey.cpp | 6 +-
extensions/gcp/processors/FetchGCSObject.cpp | 8 +-
extensions/gcp/processors/PutGCSObject.cpp | 6 +-
extensions/kafka/PublishKafka.cpp | 10 +-
extensions/libarchive/CompressContent.cpp | 18 ++--
extensions/libarchive/CompressContent.h | 12 +--
extensions/libarchive/FocusArchiveEntry.cpp | 15 +--
extensions/libarchive/FocusArchiveEntry.h | 2 +-
extensions/libarchive/MergeContent.cpp | 4 +-
extensions/libarchive/MergeContent.h | 42 +++++----
extensions/libarchive/UnfocusArchiveEntry.cpp | 4 +-
extensions/libarchive/UnfocusArchiveEntry.h | 2 +-
.../libarchive/tests/CompressContentTests.cpp | 6 +-
extensions/libarchive/tests/MergeFileTests.cpp | 12 +--
extensions/lua/LuaProcessSession.cpp | 12 +--
extensions/mqtt/processors/ConsumeMQTT.cpp | 10 +-
extensions/mqtt/processors/ConsumeMQTT.h | 2 +-
extensions/mqtt/processors/PublishMQTT.cpp | 4 +-
extensions/opencv/CaptureRTSPFrame.cpp | 4 +-
extensions/opencv/MotionDetector.cpp | 10 +-
extensions/python/types/PyProcessSession.cpp | 12 +--
extensions/python/types/PyRecordSetReader.cpp | 2 +-
extensions/rocksdb-repos/tests/SwapTests.cpp | 11 +--
extensions/sftp/processors/FetchSFTP.cpp | 4 +-
extensions/sftp/processors/PutSFTP.cpp | 2 +-
.../controllers/JsonRecordSetWriter.cpp | 8 +-
.../controllers/XMLRecordSetWriter.cpp | 4 +-
.../processors/ConvertRecord.cpp | 4 +-
.../processors/DefragmentText.cpp | 6 +-
.../processors/EvaluateJsonPath.cpp | 4 +-
.../standard-processors/processors/ExtractText.cpp | 8 +-
.../standard-processors/processors/ExtractText.h | 2 +-
.../standard-processors/processors/HashContent.cpp | 5 +-
.../standard-processors/processors/RouteText.cpp | 8 +-
.../standard-processors/processors/SplitJson.cpp | 4 +-
.../standard-processors/processors/SplitRecord.cpp | 4 +-
.../standard-processors/processors/SplitText.cpp | 23 +++--
.../standard-processors/processors/TailFile.cpp | 8 +-
.../tests/unit/XMLRecordSetWriterTests.cpp | 2 +-
libminifi/include/c2/PayloadSerializer.h | 2 +-
.../include/core/ProcessSessionReadCallback.h | 2 +-
libminifi/src/c2/C2Utils.cpp | 2 +-
libminifi/src/core/ProcessSession.cpp | 41 ++++----
libminifi/src/core/ProcessSessionReadCallback.cpp | 8 +-
libminifi/src/minifi-c.cpp | 10 +-
.../src/sitetosite/CompressionOutputStream.cpp | 23 +++--
libminifi/src/sitetosite/SiteToSiteClient.cpp | 8 +-
.../libtest/unit/ContentRepositoryDependentTests.h | 18 ++--
libminifi/test/libtest/unit/TestBase.h | 4 +-
libminifi/test/unit/FlowFileSerializationTests.cpp | 4 +-
libminifi/test/unit/MetricsTests.cpp | 12 +--
libminifi/test/unit/SiteToSiteTests.cpp | 2 +-
.../common/include/minifi-cpp/io/StreamCallback.h | 103 +++++++++++++++++++--
minifi-api/include/minifi-cpp/core/Property.h | 2 +-
80 files changed, 433 insertions(+), 343 deletions(-)
diff --git a/core-framework/include/http/HTTPCallback.h b/core-framework/include/http/HTTPCallback.h
index 991085baf..31df3598f 100644
--- a/core-framework/include/http/HTTPCallback.h
+++ b/core-framework/include/http/HTTPCallback.h
@@ -65,7 +65,7 @@ class HttpStreamingCallback final : public HTTPUploadByteArrayInputCallback {
seekInner(lock, pos);
}
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) override {
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) override {
std::vector<std::byte> vec;
if (stream->size() > 0) {
@@ -76,7 +76,7 @@ class HttpStreamingCallback final : public HTTPUploadByteArrayInputCallback {
return processInner(std::move(vec));
}
- int64_t process(const uint8_t* data, size_t size) {
+ io::IoResult process(const uint8_t* data, size_t size) {
std::vector<std::byte> vec;
vec.resize(size);
memcpy(vec.data(), data, size);
@@ -156,20 +156,20 @@ class HttpStreamingCallback final : public HTTPUploadByteArrayInputCallback {
* @param vec the buffer to be inserted
* @return the number of bytes processed (the size of vec)
*/
- int64_t processInner(std::vector<std::byte>&& vec) {
+ io::IoResult processInner(std::vector<std::byte>&& vec) {
size_t size = vec.size();
logger_->log_trace("processInner() called, vec.data(): {}, vec.size(): {}", static_cast<void*>(vec.data()), size);
if (size == 0U) {
- return 0U;
+ return io::IoResult::zero();
}
std::unique_lock<std::mutex> lock(mutex_);
byte_arrays_.emplace_back(std::move(vec));
cv.notify_all();
- return size;
+ return io::IoResult::from(size);
}
/**
diff --git a/core-framework/include/io/StreamPipe.h b/core-framework/include/io/StreamPipe.h
index ccd7809d2..b5b77dc9e 100644
--- a/core-framework/include/io/StreamPipe.h
+++ b/core-framework/include/io/StreamPipe.h
@@ -31,12 +31,12 @@
namespace org::apache::nifi::minifi {
namespace internal {
-inline int64_t pipe(io::InputStream& src, io::OutputStream& dst) {
+inline io::IoResult pipe(io::InputStream& src, io::OutputStream& dst) {
std::array<std::byte, utils::configuration::DEFAULT_BUFFER_SIZE> buffer{};
- size_t totalTransferred = 0;
+ uint64_t totalTransferred = 0;
while (true) {
const auto readRet = src.read(buffer);
- if (io::isError(readRet)) return -1;
+ if (io::isError(readRet)) return io::IoResult::error();
if (readRet == 0) break;
auto remaining = readRet;
size_t transferred = 0;
@@ -48,14 +48,14 @@ inline int64_t pipe(io::InputStream& src, io::OutputStream& dst) {
// - the number of bytes read or
// - the number of bytes wrote
if (io::isError(writeRet)) {
- return -1;
+ return io::IoResult::error();
}
transferred += writeRet;
remaining -= writeRet;
}
totalTransferred += transferred;
}
- return gsl::narrow<int64_t>(totalTransferred);
+ return io::IoResult::from(totalTransferred);
}
} // namespace internal
@@ -64,7 +64,7 @@ class InputStreamPipe {
public:
explicit InputStreamPipe(io::OutputStream& output) : output_(&output) {}
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) const {
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) const {
return internal::pipe(*stream, *output_);
}
@@ -76,7 +76,7 @@ class OutputStreamPipe {
public:
explicit OutputStreamPipe(io::InputStream& input) : input_(&input) {}
- int64_t operator()(const std::shared_ptr<io::OutputStream>& stream) const {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& stream) const {
return internal::pipe(*input_, *stream);
}
diff --git a/core-framework/include/utils/ByteArrayCallback.h b/core-framework/include/utils/ByteArrayCallback.h
index d07b7bf1d..2a430d406 100644
--- a/core-framework/include/utils/ByteArrayCallback.h
+++ b/core-framework/include/utils/ByteArrayCallback.h
@@ -16,16 +16,17 @@
*/
#pragma once
+#include <condition_variable>
#include <memory>
#include <string>
-#include <vector>
#include <utility>
-#include <condition_variable>
+#include <vector>
#include "concurrentqueue.h"
#include "core/logging/LoggerFactory.h"
-#include "minifi-cpp/utils/gsl.h"
#include "minifi-cpp/io/InputStream.h"
+#include "minifi-cpp/io/StreamCallback.h"
+#include "minifi-cpp/utils/gsl.h"
namespace org::apache::nifi::minifi::utils {
@@ -36,7 +37,7 @@ class ByteInputCallback {
public:
virtual ~ByteInputCallback() = default;
- virtual int64_t operator()(const std::shared_ptr<io::InputStream>& stream) {
+ virtual io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) {
stream->seek(0);
if (stream->size() > 0) {
@@ -44,7 +45,7 @@ class ByteInputCallback {
stream->read(vec);
}
- return gsl::narrow<int64_t>(vec.size());
+ return io::IoResult::from(vec.size());
}
virtual void close() { }
diff --git a/core-framework/include/utils/JsonCallback.h b/core-framework/include/utils/JsonCallback.h
index 37d922bd5..61194ed78 100644
--- a/core-framework/include/utils/JsonCallback.h
+++ b/core-framework/include/utils/JsonCallback.h
@@ -32,18 +32,19 @@ namespace org::apache::nifi::minifi::utils {
class JsonInputCallback {
public:
explicit JsonInputCallback(rapidjson::Document& document) : document_(document) {}
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) {
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) {
std::string content;
content.resize(stream->size());
- const auto read_ret = stream->read(as_writable_bytes(std::span(content)));
+ const size_t read_ret = stream->read(as_writable_bytes(std::span(content)));
if (io::isError(read_ret)) {
- return -1;
+ return io::IoResult::error();
}
rapidjson::ParseResult parse_result = document_.Parse<rapidjson::kParseStopWhenDoneFlag>(content.data());
- if (parse_result.IsError())
- return -1;
+ if (parse_result.IsError()) {
+ return io::IoResult::error();
+ }
- return read_ret;
+ return io::IoResult::from(read_ret);
}
private:
rapidjson::Document& document_;
@@ -54,14 +55,14 @@ class JsonOutputCallback {
explicit JsonOutputCallback(rapidjson::Document&& root, std::optional<uint8_t> decimal_places)
: root_(std::move(root)), decimal_places_(decimal_places) {}
- int64_t operator()(const std::shared_ptr<io::OutputStream>& stream) const {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& stream) const {
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
if (decimal_places_.has_value())
writer.SetMaxDecimalPlaces(decimal_places_.value());
root_.Accept(writer);
const auto write_return = stream->write(reinterpret_cast<const uint8_t*>(buffer.GetString()), buffer.GetSize());
- return !io::isError(write_return) ? gsl::narrow<int64_t>(write_return) : -1;
+ return io::IoResult::from(write_return);
}
protected:
@@ -74,14 +75,14 @@ class PrettyJsonOutputCallback {
explicit PrettyJsonOutputCallback(rapidjson::Document&& root, std::optional<uint8_t> decimal_places)
: root_(std::move(root)), decimal_places_(decimal_places) {}
- int64_t operator()(const std::shared_ptr<io::OutputStream>& stream) const {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& stream) const {
rapidjson::StringBuffer buffer;
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
if (decimal_places_.has_value())
writer.SetMaxDecimalPlaces(decimal_places_.value());
root_.Accept(writer);
const auto write_return = stream->write(reinterpret_cast<const uint8_t*>(buffer.GetString()), buffer.GetSize());
- return !io::isError(write_return) ? gsl::narrow<int64_t>(write_return) : -1;
+ return io::IoResult::from(write_return);
}
protected:
diff --git a/core-framework/include/utils/LineByLineInputOutputStreamCallback.h b/core-framework/include/utils/LineByLineInputOutputStreamCallback.h
index 72fb0bedd..b199219ac 100644
--- a/core-framework/include/utils/LineByLineInputOutputStreamCallback.h
+++ b/core-framework/include/utils/LineByLineInputOutputStreamCallback.h
@@ -33,7 +33,7 @@ class LineByLineInputOutputStreamCallback {
public:
using CallbackType = std::function<std::string(const std::string& input_line, bool is_first_line, bool is_last_line)>;
explicit LineByLineInputOutputStreamCallback(CallbackType callback);
- std::optional<io::ReadWriteResult> operator()(const std::shared_ptr<io::InputStream>& input, const std::shared_ptr<io::OutputStream>& output);
+ io::ReadWriteResult operator()(const std::shared_ptr<io::InputStream>& input, const std::shared_ptr<io::OutputStream>& output);
private:
int64_t readInput(io::InputStream& stream);
diff --git a/core-framework/src/utils/LineByLineInputOutputStreamCallback.cpp b/core-framework/src/utils/LineByLineInputOutputStreamCallback.cpp
index ec59fff53..fce1e89ff 100644
--- a/core-framework/src/utils/LineByLineInputOutputStreamCallback.cpp
+++ b/core-framework/src/utils/LineByLineInputOutputStreamCallback.cpp
@@ -26,22 +26,21 @@ LineByLineInputOutputStreamCallback::LineByLineInputOutputStreamCallback(Callbac
: callback_(std::move(callback)) {
}
-std::optional<io::ReadWriteResult> LineByLineInputOutputStreamCallback::operator()(const std::shared_ptr<io::InputStream>& input, const std::shared_ptr<io::OutputStream>& output) {
+io::ReadWriteResult LineByLineInputOutputStreamCallback::operator()(const std::shared_ptr<io::InputStream>& input, const std::shared_ptr<io::OutputStream>& output) {
gsl_Expects(input);
gsl_Expects(output);
- io::ReadWriteResult result;
- if (int64_t status = readInput(*input); status <= 0) {
+ if (const int64_t status = readInput(*input); status <= 0) {
if (status < 0) {
- return std::nullopt;
+ return io::ReadWriteResult::error();
}
- return result;
+ return io::ReadWriteResult::zero();
}
- result.bytes_read = gsl::narrow<int64_t>(input_.size());
+ const uint64_t bytes_read = input_.size();
- std::size_t total_bytes_written = 0;
+ uint64_t total_bytes_written = 0;
bool is_first_line = true;
readLine();
do {
@@ -49,14 +48,14 @@ std::optional<io::ReadWriteResult> LineByLineInputOutputStreamCallback::operator
std::string output_line = callback_(*current_line_, is_first_line, isLastLine());
const auto bytes_written = output->write(reinterpret_cast<const uint8_t *>(output_line.data()), output_line.size());
if (io::isError(bytes_written)) {
- return std::nullopt;
+ return io::ReadWriteResult::error();
}
total_bytes_written += bytes_written;
is_first_line = false;
} while (!isLastLine());
- result.bytes_written = gsl::narrow<int64_t>(total_bytes_written);
- return result;
+
+ return { bytes_read, total_bytes_written };
}
int64_t LineByLineInputOutputStreamCallback::readInput(io::InputStream& stream) {
diff --git a/extension-framework/cpp-extension-lib/src/core/ProcessSession.cpp b/extension-framework/cpp-extension-lib/src/core/ProcessSession.cpp
index 6b22c0bbc..cc7ab50e1 100644
--- a/extension-framework/cpp-extension-lib/src/core/ProcessSession.cpp
+++ b/extension-framework/cpp-extension-lib/src/core/ProcessSession.cpp
@@ -17,10 +17,10 @@
#include "api/core/ProcessSession.h"
+#include "api/core/FlowFile.h"
+#include "api/utils/minifi-c-utils.h"
#include "io/InputStream.h"
#include "io/OutputStream.h"
-#include "api/utils/minifi-c-utils.h"
-#include "api/core/FlowFile.h"
#include "minifi-cpp/Exception.h"
namespace org::apache::nifi::minifi::api::core {
@@ -91,21 +91,29 @@ void ProcessSession::remove(FlowFile ff) {
}
void ProcessSession::write(FlowFile& flow_file, const io::OutputStreamCallback& callback) {
- const auto status = MinifiProcessSessionWrite(impl_, flow_file.get(), [] (void* data, MinifiOutputStream* output) {
- return (*static_cast<const io::OutputStreamCallback*>(data))(std::make_shared<MinifiOutputStreamWrapper>(output));
- }, const_cast<io::OutputStreamCallback*>(&callback));
- if (status != MINIFI_STATUS_SUCCESS) {
- throw minifi::Exception(minifi::FILE_OPERATION_EXCEPTION, "Failed to process flowfile content");
- }
+ const auto status = MinifiProcessSessionWrite(
+ impl_,
+ flow_file.get(),
+ [](void* data, MinifiOutputStream* output) -> int64_t {
+ const auto result =
+ (*static_cast<const io::OutputStreamCallback*>(data))(std::make_shared<MinifiOutputStreamWrapper>(output));
+ return result.toI64();
+ },
+ const_cast<io::OutputStreamCallback*>(&callback));
+ if (status != MINIFI_STATUS_SUCCESS) { throw minifi::Exception(minifi::FILE_OPERATION_EXCEPTION, "Failed to process flowfile content"); }
}
void ProcessSession::read(FlowFile& flow_file, const io::InputStreamCallback& callback) {
- const auto status = MinifiProcessSessionRead(impl_, flow_file.get(), [] (void* data, MinifiInputStream* input) {
- return (*static_cast<const io::InputStreamCallback*>(data))(std::make_shared<MinifiInputStreamWrapper>(input));
- }, const_cast<io::InputStreamCallback*>(&callback));
- if (status != MINIFI_STATUS_SUCCESS) {
- throw minifi::Exception(minifi::FILE_OPERATION_EXCEPTION, "Failed to process flowfile content");
- }
+ const auto status = MinifiProcessSessionRead(
+ impl_,
+ flow_file.get(),
+ [](void* data, MinifiInputStream* input) -> int64_t {
+ const auto result =
+ (*static_cast<const io::InputStreamCallback*>(data))(std::make_shared<MinifiInputStreamWrapper>(input));
+ return result.toI64();
+ },
+ const_cast<io::InputStreamCallback*>(&callback));
+ if (status != MINIFI_STATUS_SUCCESS) { throw minifi::Exception(minifi::FILE_OPERATION_EXCEPTION, "Failed to process flowfile content"); }
}
void ProcessSession::setAttribute(FlowFile& ff, const std::string_view key, std::string value) { // NOLINT(performance-unnecessary-value-param)
@@ -142,18 +150,18 @@ void ProcessSession::writeBuffer(FlowFile& flow_file, std::span<const char> buff
}
void ProcessSession::writeBuffer(FlowFile& flow_file, std::span<const std::byte> buffer) {
- write(flow_file, [buffer](const std::shared_ptr<io::OutputStream>& output_stream) {
+ write(flow_file, [buffer](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
const auto write_status = output_stream->write(buffer);
- return io::isError(write_status) ? -1 : gsl::narrow<int64_t>(write_status);
+ return io::IoResult::from(write_status);
});
}
std::vector<std::byte> ProcessSession::readBuffer(FlowFile& flow_file) {
std::vector<std::byte> result;
- read(flow_file, [&result](const std::shared_ptr<io::InputStream>& input_stream) {
+ read(flow_file, [&result](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
result.resize(input_stream->size());
const auto read_status = input_stream->read(result);
- return io::isError(read_status) ? -1 : gsl::narrow<int64_t>(read_status);
+ return io::IoResult::from(read_status);
});
return result;
}
diff --git a/extension-framework/include/serialization/FlowFileSerializer.h b/extension-framework/include/serialization/FlowFileSerializer.h
index 85362931f..c8168a565 100644
--- a/extension-framework/include/serialization/FlowFileSerializer.h
+++ b/extension-framework/include/serialization/FlowFileSerializer.h
@@ -38,11 +38,11 @@ class FlowFile;
class FlowFileSerializer {
public:
- using FlowFileReader = std::function<int64_t(const std::shared_ptr<core::FlowFile>&, const io::InputStreamCallback&)>;
+ using FlowFileReader = std::function<io::IoResult(const std::shared_ptr<core::FlowFile>&, const io::InputStreamCallback&)>;
explicit FlowFileSerializer(FlowFileReader reader) : reader_(std::move(reader)) {}
- virtual int64_t serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) = 0;
+ virtual io::IoResult serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) = 0;
virtual ~FlowFileSerializer() = default;
diff --git a/extension-framework/include/serialization/FlowFileV3Serializer.h b/extension-framework/include/serialization/FlowFileV3Serializer.h
index 64c9ce691..fc27215a8 100644
--- a/extension-framework/include/serialization/FlowFileV3Serializer.h
+++ b/extension-framework/include/serialization/FlowFileV3Serializer.h
@@ -38,7 +38,7 @@ class FlowFileV3Serializer : public FlowFileSerializer {
public:
using FlowFileSerializer::FlowFileSerializer;
- int64_t serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) override;
+ io::IoResult serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) override;
};
} // namespace org::apache::nifi::minifi
diff --git a/extension-framework/include/serialization/PayloadSerializer.h b/extension-framework/include/serialization/PayloadSerializer.h
index b6f843ca5..f9b14cf4e 100644
--- a/extension-framework/include/serialization/PayloadSerializer.h
+++ b/extension-framework/include/serialization/PayloadSerializer.h
@@ -28,7 +28,7 @@ class PayloadSerializer : public FlowFileSerializer {
public:
using FlowFileSerializer::FlowFileSerializer;
- int64_t serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) override;
+ io::IoResult serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) override;
};
} // namespace org::apache::nifi::minifi
diff --git a/extension-framework/include/utils/file/FileReaderCallback.h b/extension-framework/include/utils/file/FileReaderCallback.h
index 2bf55cbe0..b206d35a1 100644
--- a/extension-framework/include/utils/file/FileReaderCallback.h
+++ b/extension-framework/include/utils/file/FileReaderCallback.h
@@ -33,7 +33,7 @@ namespace org::apache::nifi::minifi::utils {
class FileReaderCallback {
public:
explicit FileReaderCallback(std::filesystem::path file_path, size_t buffer_size);
- int64_t operator()(const std::shared_ptr<io::OutputStream>& output_stream) const;
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& output_stream) const;
private:
std::filesystem::path file_path_;
diff --git a/extension-framework/include/utils/file/FileWriterCallback.h b/extension-framework/include/utils/file/FileWriterCallback.h
index 2cb8729fa..6f3820e46 100644
--- a/extension-framework/include/utils/file/FileWriterCallback.h
+++ b/extension-framework/include/utils/file/FileWriterCallback.h
@@ -29,7 +29,7 @@ class FileWriterCallback {
public:
explicit FileWriterCallback(std::filesystem::path dest_path);
~FileWriterCallback();
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream);
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream);
bool commit();
diff --git a/extension-framework/src/serialization/FlowFileV3Serializer.cpp b/extension-framework/src/serialization/FlowFileV3Serializer.cpp
index 972092ce4..471898096 100644
--- a/extension-framework/src/serialization/FlowFileV3Serializer.cpp
+++ b/extension-framework/src/serialization/FlowFileV3Serializer.cpp
@@ -57,43 +57,43 @@ size_t FlowFileV3Serializer::writeString(const std::string &str, const std::shar
return sum;
}
-int64_t FlowFileV3Serializer::serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) {
+io::IoResult FlowFileV3Serializer::serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) {
size_t sum = 0;
{
const auto ret = out->write(MAGIC_HEADER, sizeof(MAGIC_HEADER));
- if (io::isError(ret)) return -1;
- if (ret != sizeof(MAGIC_HEADER)) return -1;
+ if (io::isError(ret)) return io::IoResult::error();
+ if (ret != sizeof(MAGIC_HEADER)) return io::IoResult::error();
sum += ret;
}
const auto& attributes = flowFile->getAttributes();
{
const auto ret = writeLength(attributes.size(), out);
- if (io::isError(ret)) return -1;
+ if (io::isError(ret)) return io::IoResult::error();
sum += ret;
}
for (const auto& attrIt : attributes) {
{
const auto ret = writeString(attrIt.first, out);
- if (io::isError(ret)) return -1;
+ if (io::isError(ret)) return io::IoResult::error();
sum += ret;
}
{
const auto ret = writeString(attrIt.second, out);
- if (io::isError(ret)) return -1;
+ if (io::isError(ret)) return io::IoResult::error();
sum += ret;
}
}
{
const auto ret = out->write(flowFile->getSize());
- if (io::isError(ret)) return -1;
+ if (io::isError(ret)) return io::IoResult::error();
sum += ret;
}
{
const auto ret = reader_(flowFile, InputStreamPipe{*out});
- if (ret < 0) return -1;
- sum += gsl::narrow<size_t>(ret);
+ if (!ret) return ret;
+ sum += gsl::narrow<size_t>(ret.toI64());
}
- return gsl::narrow<int64_t>(sum);
+ return io::IoResult::from(sum);
}
} // namespace org::apache::nifi::minifi
diff --git a/extension-framework/src/serialization/PayloadSerializer.cpp b/extension-framework/src/serialization/PayloadSerializer.cpp
index 7fd22e171..2a3912cc6 100644
--- a/extension-framework/src/serialization/PayloadSerializer.cpp
+++ b/extension-framework/src/serialization/PayloadSerializer.cpp
@@ -21,7 +21,7 @@
namespace org::apache::nifi::minifi {
-int64_t PayloadSerializer::serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) {
+io::IoResult PayloadSerializer::serialize(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<io::OutputStream>& out) {
return reader_(flowFile, InputStreamPipe{*out});
}
diff --git a/extension-framework/src/utils/file/FileReaderCallback.cpp b/extension-framework/src/utils/file/FileReaderCallback.cpp
index 9386d6356..63720b56d 100644
--- a/extension-framework/src/utils/file/FileReaderCallback.cpp
+++ b/extension-framework/src/utils/file/FileReaderCallback.cpp
@@ -31,9 +31,9 @@ FileReaderCallback::FileReaderCallback(std::filesystem::path file_path, const si
logger_(core::logging::LoggerFactory<FileReaderCallback>::getLogger()) {
}
-int64_t FileReaderCallback::operator()(const std::shared_ptr<io::OutputStream>& output_stream) const {
+io::IoResult FileReaderCallback::operator()(const std::shared_ptr<io::OutputStream>& output_stream) const {
std::vector<char> buffer(buffer_size_);
- uint64_t num_bytes_written = 0;
+ size_t num_bytes_written = 0;
std::ifstream input_stream{file_path_, std::ifstream::in | std::ifstream::binary};
if (!input_stream.is_open()) {
@@ -47,14 +47,14 @@ int64_t FileReaderCallback::operator()(const std::shared_ptr<io::OutputStream>&
}
const auto num_bytes_read = input_stream.gcount();
logger_->log_trace("Read {} bytes of input", std::intmax_t{num_bytes_read});
- const auto len = gsl::narrow<size_t>(num_bytes_read);
+ const auto len = num_bytes_read;
output_stream->write(reinterpret_cast<uint8_t*>(buffer.data()), len);
num_bytes_written += len;
}
input_stream.close();
logger_->log_debug("Finished reading {} bytes from the file", num_bytes_written);
- return gsl::narrow<int64_t>(num_bytes_written);
+ return io::IoResult::from(num_bytes_written);
}
} // namespace org::apache::nifi::minifi::utils
diff --git a/extension-framework/src/utils/file/FileWriterCallback.cpp b/extension-framework/src/utils/file/FileWriterCallback.cpp
index 7abfe8792..6e7ba1ddc 100644
--- a/extension-framework/src/utils/file/FileWriterCallback.cpp
+++ b/extension-framework/src/utils/file/FileWriterCallback.cpp
@@ -34,7 +34,7 @@ FileWriterCallback::~FileWriterCallback() {
std::filesystem::remove(temp_path_, remove_error);
}
-int64_t FileWriterCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
+io::IoResult FileWriterCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
write_succeeded_ = false;
size_t size = 0;
std::array<std::byte, 1024> buffer{};
@@ -43,7 +43,7 @@ int64_t FileWriterCallback::operator()(const std::shared_ptr<io::InputStream>& s
do {
const auto read = stream->read(buffer);
- if (io::isError(read)) return -1;
+ if (io::isError(read)) return io::IoResult::error();
if (read == 0) break;
tmp_file_os.write(reinterpret_cast<char *>(buffer.data()), gsl::narrow<std::streamsize>(read));
size += read;
@@ -55,7 +55,7 @@ int64_t FileWriterCallback::operator()(const std::shared_ptr<io::InputStream>& s
write_succeeded_ = true;
}
- return gsl::narrow<int64_t>(size);
+ return io::IoResult::from(size);
}
bool FileWriterCallback::commit() {
diff --git a/extensions/aws/processors/FetchS3Object.cpp b/extensions/aws/processors/FetchS3Object.cpp
index e2a12ce45..0dd9d24f0 100644
--- a/extensions/aws/processors/FetchS3Object.cpp
+++ b/extensions/aws/processors/FetchS3Object.cpp
@@ -92,9 +92,10 @@ void FetchS3Object::onTrigger(core::ProcessContext& context, core::ProcessSessio
}
std::optional<minifi::aws::s3::GetObjectResult> result;
- session.write(flow_file, [&get_object_params, &result, this](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
+ session.write(flow_file, [&get_object_params, &result, this](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
result = s3_wrapper_->getObject(*get_object_params, *stream);
- return (result | minifi::utils::transform(&s3::GetObjectResult::write_size)).value_or(0);
+ const auto ret = (result | minifi::utils::transform(&s3::GetObjectResult::write_size)).value_or(0);
+ return io::IoResult::from(ret);
});
if (result) {
diff --git a/extensions/aws/processors/PutS3Object.cpp b/extensions/aws/processors/PutS3Object.cpp
index 5fb521892..b896e2c78 100644
--- a/extensions/aws/processors/PutS3Object.cpp
+++ b/extensions/aws/processors/PutS3Object.cpp
@@ -283,20 +283,19 @@ void PutS3Object::onTrigger(core::ProcessContext& context, core::ProcessSession&
}
std::optional<minifi::aws::s3::PutObjectResult> result;
- session.read(flow_file, [this, &flow_file, &put_s3_request_params, &result](const std::shared_ptr<io::InputStream>& stream) -> int64_t {
+ session.read(flow_file, [this, &flow_file, &put_s3_request_params, &result](const std::shared_ptr<io::InputStream>& stream) -> io::IoResult {
try {
if (flow_file->getSize() <= multipart_threshold_) {
logger_->log_info("Uploading S3 Object '{}' in a single upload", put_s3_request_params->object_key);
result = s3_wrapper_->putObject(*put_s3_request_params, stream, flow_file->getSize());
- return gsl::narrow<int64_t>(flow_file->getSize());
- } else {
- logger_->log_info("S3 Object '{}' passes the multipart threshold, uploading it in multiple parts", put_s3_request_params->object_key);
- result = s3_wrapper_->putObjectMultipart(*put_s3_request_params, stream, flow_file->getSize(), multipart_size_);
- return gsl::narrow<int64_t>(flow_file->getSize());
+ return io::IoResult::from(flow_file->getSize());
}
+ logger_->log_info("S3 Object '{}' passes the multipart threshold, uploading it in multiple parts", put_s3_request_params->object_key);
+ result = s3_wrapper_->putObjectMultipart(*put_s3_request_params, stream, flow_file->getSize(), multipart_size_);
+ return io::IoResult::from(flow_file->getSize());
} catch(const aws::s3::StreamReadException& ex) {
logger_->log_error("Error occurred while uploading to S3: {}", ex.what());
- return -1;
+ return io::IoResult::error();
}
});
if (!result.has_value()) {
diff --git a/extensions/azure/processors/FetchAzureBlobStorage.cpp b/extensions/azure/processors/FetchAzureBlobStorage.cpp
index b96da5b5c..4b5fec14f 100644
--- a/extensions/azure/processors/FetchAzureBlobStorage.cpp
+++ b/extensions/azure/processors/FetchAzureBlobStorage.cpp
@@ -68,12 +68,12 @@ void FetchAzureBlobStorage::onTrigger(core::ProcessContext& context, core::Proce
auto fetched_flow_file = session.create(flow_file.get());
std::optional<int64_t> result_size;
- session.write(fetched_flow_file, [&, this](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
+ session.write(fetched_flow_file, [&, this](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
result_size = azure_blob_storage_.fetchBlob(*params, *stream);
if (!result_size) {
- return 0;
+ return io::IoResult::zero();
}
- return gsl::narrow<int64_t>(*result_size);
+ return io::IoResult::from(*result_size);
});
if (result_size == std::nullopt) {
diff --git a/extensions/azure/processors/FetchAzureDataLakeStorage.cpp b/extensions/azure/processors/FetchAzureDataLakeStorage.cpp
index fa51c21f4..f5500fc53 100644
--- a/extensions/azure/processors/FetchAzureDataLakeStorage.cpp
+++ b/extensions/azure/processors/FetchAzureDataLakeStorage.cpp
@@ -73,13 +73,9 @@ void FetchAzureDataLakeStorage::onTrigger(core::ProcessContext& context, core::P
auto fetched_flow_file = session.create(flow_file.get());
std::optional<uint64_t> result;
- session.write(fetched_flow_file, [&, this](const std::shared_ptr<io::OutputStream>& output_stream) -> int64_t {
+ session.write(fetched_flow_file, [&, this](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
result = azure_data_lake_storage_.fetchFile(*params, *output_stream);
- if (!result) {
- return 0;
- }
-
- return gsl::narrow<int64_t>(*result);
+ return io::IoResult::from(result.value_or(0));
});
if (result == std::nullopt) {
diff --git a/extensions/azure/processors/PutAzureBlobStorage.h b/extensions/azure/processors/PutAzureBlobStorage.h
index 06d3dfaa5..662247452 100644
--- a/extensions/azure/processors/PutAzureBlobStorage.h
+++ b/extensions/azure/processors/PutAzureBlobStorage.h
@@ -81,16 +81,16 @@ class PutAzureBlobStorage final : public AzureBlobStorageSingleBlobProcessorBase
, params_(params) {
}
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) {
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) {
std::vector<std::byte> buffer;
buffer.resize(flow_size_);
- size_t read_ret = stream->read(buffer);
+ const size_t read_ret = stream->read(buffer);
if (io::isError(read_ret) || read_ret != flow_size_) {
- return -1;
+ return io::IoResult::error();
}
result_ = azure_blob_storage_.uploadBlob(params_, buffer);
- return read_ret;
+ return io::IoResult::from(read_ret);
}
std::optional<storage::UploadBlobResult> getResult() const {
diff --git a/extensions/azure/processors/PutAzureDataLakeStorage.cpp b/extensions/azure/processors/PutAzureDataLakeStorage.cpp
index 95c591d84..44c9ad3d7 100644
--- a/extensions/azure/processors/PutAzureDataLakeStorage.cpp
+++ b/extensions/azure/processors/PutAzureDataLakeStorage.cpp
@@ -103,16 +103,16 @@ PutAzureDataLakeStorage::ReadCallback::ReadCallback(
logger_(std::move(logger)) {
}
-int64_t PutAzureDataLakeStorage::ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
+io::IoResult PutAzureDataLakeStorage::ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
std::vector<std::byte> buffer;
buffer.resize(flow_size_);
size_t read_ret = stream->read(buffer);
if (io::isError(read_ret) || read_ret != flow_size_) {
- return -1;
+ return io::IoResult::error();
}
result_ = azure_data_lake_storage_.uploadFile(params_, buffer);
- return gsl::narrow<int64_t>(read_ret);
+ return io::IoResult::from(read_ret);
}
REGISTER_RESOURCE(PutAzureDataLakeStorage, Processor);
diff --git a/extensions/azure/processors/PutAzureDataLakeStorage.h b/extensions/azure/processors/PutAzureDataLakeStorage.h
index 4cdd012c8..9b8f23c6a 100644
--- a/extensions/azure/processors/PutAzureDataLakeStorage.h
+++ b/extensions/azure/processors/PutAzureDataLakeStorage.h
@@ -81,7 +81,7 @@ class PutAzureDataLakeStorage final : public AzureDataLakeStorageFileProcessorBa
class ReadCallback {
public:
ReadCallback(uint64_t flow_size, storage::AzureDataLakeStorage &azure_data_lake_storage, const storage::PutAzureDataLakeStorageParameters ¶ms, std::shared_ptr<core::logging::Logger> logger);
- int64_t operator()(const std::shared_ptr<io::InputStream> &stream);
+ io::IoResult operator()(const std::shared_ptr<io::InputStream> &stream);
[[nodiscard]] storage::UploadDataLakeStorageResult getResult() const {
return result_;
diff --git a/extensions/azure/storage/AzureBlobStorage.cpp b/extensions/azure/storage/AzureBlobStorage.cpp
index 94521e9c7..c3449a135 100644
--- a/extensions/azure/storage/AzureBlobStorage.cpp
+++ b/extensions/azure/storage/AzureBlobStorage.cpp
@@ -78,7 +78,7 @@ bool AzureBlobStorage::deleteBlob(const DeleteAzureBlobStorageParameters& params
std::optional<uint64_t> AzureBlobStorage::fetchBlob(const FetchAzureBlobStorageParameters& params, io::OutputStream& stream) {
try {
auto fetch_res = blob_storage_client_->fetchBlob(params);
- return internal::pipe(*fetch_res, stream);
+ return internal::pipe(*fetch_res, stream).inner() | utils::toOptional();
} catch (const std::exception& ex) {
logger_->log_error("An exception occurred while fetching blob '{}' of container '{}': {}", params.blob_name, params.container_name, ex.what());
return std::nullopt;
diff --git a/extensions/azure/storage/AzureDataLakeStorage.cpp b/extensions/azure/storage/AzureDataLakeStorage.cpp
index cb55dc1a8..939083991 100644
--- a/extensions/azure/storage/AzureDataLakeStorage.cpp
+++ b/extensions/azure/storage/AzureDataLakeStorage.cpp
@@ -95,7 +95,7 @@ bool AzureDataLakeStorage::deleteFile(const DeleteAzureDataLakeStorageParameters
std::optional<uint64_t> AzureDataLakeStorage::fetchFile(const FetchAzureDataLakeStorageParameters& params, io::OutputStream& stream) {
try {
auto result = data_lake_storage_client_->fetchFile(params);
- return internal::pipe(*result, stream);
+ return internal::pipe(*result, stream).inner() | utils::toOptional();
} catch (const std::exception& ex) {
logger_->log_error("An exception occurred while fetching '{}/{}' of filesystem '{}': {}", params.directory_name, params.filename, params.file_system_name, ex.what());
return std::nullopt;
diff --git a/extensions/bustache/ApplyTemplate.cpp b/extensions/bustache/ApplyTemplate.cpp
index b178a2649..81af9c741 100644
--- a/extensions/bustache/ApplyTemplate.cpp
+++ b/extensions/bustache/ApplyTemplate.cpp
@@ -43,7 +43,7 @@ void ApplyTemplate::onTrigger(core::ProcessContext& context, core::ProcessSessio
}
std::string template_file = context.getProperty(Template.name, flow_file.get()).value_or("");
- session.write(flow_file, [&template_file, &flow_file, this](const auto& output_stream) {
+ session.write(flow_file, [&template_file, &flow_file, this](const auto& output_stream) -> io::IoResult {
logger_->log_info("ApplyTemplate reading template file from {}", template_file);
// TODO(szaszm): we might want to return to memory-mapped input files when the next todo is done. Until then, the agents stores the whole result in memory anyway, so no point in not doing the same
// with the template file itself
@@ -62,7 +62,7 @@ void ApplyTemplate::onTrigger(core::ProcessContext& context, core::ProcessSessio
// TODO(calebj) write ostream reciever for format() to prevent excessive copying
std::string ostring = bustache::to_string(format(data));
output_stream->write(gsl::make_span(ostring).as_span<const std::byte>());
- return gsl::narrow<int64_t>(ostring.length());
+ return io::IoResult::from(ostring.length());
});
session.transfer(flow_file, Success);
}
diff --git a/extensions/couchbase/processors/GetCouchbaseKey.cpp b/extensions/couchbase/processors/GetCouchbaseKey.cpp
index 71744c13a..681a0c2b9 100644
--- a/extensions/couchbase/processors/GetCouchbaseKey.cpp
+++ b/extensions/couchbase/processors/GetCouchbaseKey.cpp
@@ -72,15 +72,15 @@ void GetCouchbaseKey::onTrigger(core::ProcessContext& context, core::ProcessSess
session.putAttribute(*flow_file, attribute_to_put_result_to, str_value);
}
} else {
- session.write(flow_file, [&, this](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
+ session.write(flow_file, [&, this](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
if (document_type_ == CouchbaseValueType::String) {
auto& value = std::get<std::string>(get_result->value);
stream->write(value);
- return gsl::narrow<int64_t>(value.size());
+ return io::IoResult::from(value.size());
} else {
auto& value = std::get<std::vector<std::byte>>(get_result->value);
stream->write(value);
- return gsl::narrow<int64_t>(value.size());
+ return io::IoResult::from(value.size());
}
});
}
diff --git a/extensions/gcp/processors/FetchGCSObject.cpp b/extensions/gcp/processors/FetchGCSObject.cpp
index a42799e28..32e1eb4c7 100644
--- a/extensions/gcp/processors/FetchGCSObject.cpp
+++ b/extensions/gcp/processors/FetchGCSObject.cpp
@@ -37,7 +37,7 @@ class FetchFromGCSCallback {
client_(client) {
}
- int64_t operator()(const std::shared_ptr<io::OutputStream>& stream) {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& stream) {
auto reader = client_.ReadObject(bucket_, key_, encryption_key_, generation_, gcs::IfGenerationNotMatch(0));
auto set_members = gsl::finally([&]{
status_ = reader.status();
@@ -46,11 +46,11 @@ class FetchFromGCSCallback {
storage_class_ = reader.storage_class();
});
if (!reader)
- return 0;
+ return io::IoResult::zero();
std::string contents{std::istreambuf_iterator<char>{reader}, {}};
- const auto write_ret = gsl::narrow<int64_t>(stream->write(gsl::make_span(contents).as_span<std::byte>()));
+ const auto write_ret = stream->write(gsl::make_span(contents).as_span<std::byte>());
reader.Close();
- return write_ret;
+ return io::IoResult::from(write_ret);
}
[[nodiscard]] auto getStatus() const noexcept { return status_; }
diff --git a/extensions/gcp/processors/PutGCSObject.cpp b/extensions/gcp/processors/PutGCSObject.cpp
index ceea47658..a05380f32 100644
--- a/extensions/gcp/processors/PutGCSObject.cpp
+++ b/extensions/gcp/processors/PutGCSObject.cpp
@@ -38,18 +38,18 @@ class UploadToGCSCallback {
client_(client) {
}
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) {
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) {
std::string content;
content.resize(stream->size());
const auto read_ret = stream->read(as_writable_bytes(std::span(content)));
if (io::isError(read_ret)) {
- return -1;
+ return io::IoResult::error();
}
auto writer = client_.WriteObject(bucket_, key_, hash_value_, crc32c_checksum_, encryption_key_, content_type_, predefined_acl_, if_generation_match_);
writer << content;
writer.Close();
result_ = writer.metadata();
- return gsl::narrow<int64_t>(read_ret);
+ return io::IoResult::from(read_ret);
}
[[nodiscard]] const google::cloud::StatusOr<gcs::ObjectMetadata>& getResult() const noexcept {
diff --git a/extensions/kafka/PublishKafka.cpp b/extensions/kafka/PublishKafka.cpp
index 7c6c0912c..6f04186cd 100644
--- a/extensions/kafka/PublishKafka.cpp
+++ b/extensions/kafka/PublishKafka.cpp
@@ -248,7 +248,7 @@ class ReadCallback {
ReadCallback& operator=(const ReadCallback&) = delete;
~ReadCallback() = default;
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) {
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) {
std::vector<std::byte> buffer;
buffer.resize(max_seg_size_);
@@ -269,7 +269,7 @@ class ReadCallback {
status_ = -1;
error_ = rd_kafka_err2str(err);
}
- return 0;
+ return io::IoResult::zero();
}
for (size_t segment_num = 0; read_size_ < flow_size_; ++segment_num) {
@@ -277,7 +277,7 @@ class ReadCallback {
if (io::isError(readRet)) {
status_ = -1;
error_ = "Failed to read from stream";
- return read_size_;
+ return io::IoResult::zero();
}
if (readRet == 0) { break; }
@@ -289,11 +289,11 @@ class ReadCallback {
});
status_ = -1;
error_ = rd_kafka_err2str(err);
- return read_size_;
+ return io::IoResult::zero();
}
read_size_ += gsl::narrow<uint32_t>(readRet);
}
- return read_size_;
+ return io::IoResult::from(gsl::narrow<uint64_t>(read_size_));
}
const uint64_t flow_size_ = 0;
diff --git a/extensions/libarchive/CompressContent.cpp b/extensions/libarchive/CompressContent.cpp
index aad392ab1..039fd699a 100644
--- a/extensions/libarchive/CompressContent.cpp
+++ b/extensions/libarchive/CompressContent.cpp
@@ -131,37 +131,37 @@ void CompressContent::processFlowFile(const std::shared_ptr<core::FlowFile>& flo
std::shared_ptr<core::FlowFile> result = session.create(flowFile.get());
bool success = true;
if (encapsulateInTar_) {
- std::function<int64_t(const std::shared_ptr<io::InputStream>&, const std::shared_ptr<io::OutputStream>&)> transformer;
+ std::function<io::IoResult(const std::shared_ptr<io::InputStream>&, const std::shared_ptr<io::OutputStream>&)> transformer;
if (compressMode_ == compress_content::CompressionMode::compress) {
std::string filename;
flowFile->getAttribute(core::SpecialFlowAttribute::FILENAME, filename);
- transformer = [&, filename] (const std::shared_ptr<io::InputStream>& in, const std::shared_ptr<io::OutputStream>& out) -> int64_t {
+ transformer = [&, filename] (const std::shared_ptr<io::InputStream>& in, const std::shared_ptr<io::OutputStream>& out) -> io::IoResult {
io::WriteArchiveStreamImpl compressor(compressLevel_, compressFormat, out);
if (!compressor.newEntry({filename, in->size()})) {
- return -1;
+ return io::IoResult::error();
}
return internal::pipe(*in, compressor);
};
} else {
- transformer = [&] (const std::shared_ptr<io::InputStream>& in, const std::shared_ptr<io::OutputStream>& out) -> int64_t {
+ transformer = [&] (const std::shared_ptr<io::InputStream>& in, const std::shared_ptr<io::OutputStream>& out) -> io::IoResult {
io::ReadArchiveStreamImpl decompressor(in);
if (!decompressor.nextEntry()) {
success = false;
- return 0; // prevents a session rollback
+ return io::IoResult::zero(); // prevents a session rollback
}
auto ret = internal::pipe(decompressor, *out);
- if (ret < 0) {
+ if (!ret) {
success = false;
- return 0; // prevents a session rollback
+ return io::IoResult::zero(); // prevents a session rollback
}
return ret;
};
}
session.write(result, [&] (const auto& out) {
- return session.read(flowFile, [&] (const auto& in) {
+ return io::IoResult::from(session.read(flowFile, [&] (const auto& in) {
return transformer(in, out);
- });
+ }));
});
} else {
CompressContent::GzipWriteCallback callback(compressMode_, compressLevel_, flowFile, session);
diff --git a/extensions/libarchive/CompressContent.h b/extensions/libarchive/CompressContent.h
index 08667be80..59c53e52f 100644
--- a/extensions/libarchive/CompressContent.h
+++ b/extensions/libarchive/CompressContent.h
@@ -168,37 +168,37 @@ class CompressContent : public core::ProcessorImpl {
core::ProcessSession& session_;
bool success_{false};
- int64_t operator()(const std::shared_ptr<io::OutputStream>& output_stream) {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& output_stream) {
std::shared_ptr<io::ZlibBaseStream> filterStream;
if (compress_mode_ == compress_content::CompressionMode::compress) {
filterStream = std::make_shared<io::ZlibCompressStream>(gsl::make_not_null(output_stream.get()), io::ZlibCompressionFormat::GZIP, compress_level_);
} else {
filterStream = std::make_shared<io::ZlibDecompressStream>(gsl::make_not_null(output_stream.get()), io::ZlibCompressionFormat::GZIP);
}
- session_.read(flow_, [this, &filterStream](const std::shared_ptr<io::InputStream>& input_stream) -> int64_t {
+ session_.read(flow_, [this, &filterStream](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
std::vector<std::byte> buffer(16 * 1024U);
size_t read_size = 0;
while (read_size < flow_->getSize()) {
const auto ret = input_stream->read(buffer);
if (io::isError(ret)) {
- return -1;
+ return io::IoResult::error();
} else if (ret == 0) {
break;
} else {
const auto writeret = filterStream->write(gsl::make_span(buffer).subspan(0, ret));
if (io::isError(writeret) || gsl::narrow<size_t>(writeret) != ret) {
- return -1;
+ return io::IoResult::error();
}
read_size += ret;
}
}
filterStream->close();
- return gsl::narrow<int64_t>(read_size);
+ return io::IoResult::from(read_size);
});
success_ = filterStream->isFinished();
- return gsl::narrow<int64_t>(flow_->getSize());
+ return io::IoResult::from(flow_->getSize());
}
};
diff --git a/extensions/libarchive/FocusArchiveEntry.cpp b/extensions/libarchive/FocusArchiveEntry.cpp
index acc301194..0a0a12387 100644
--- a/extensions/libarchive/FocusArchiveEntry.cpp
+++ b/extensions/libarchive/FocusArchiveEntry.cpp
@@ -154,7 +154,7 @@ la_ssize_t FocusArchiveEntry::ReadCallback::read_cb(struct archive * a, void *d,
return gsl::narrow<la_ssize_t>(read);
}
-int64_t FocusArchiveEntry::ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) const {
+io::IoResult FocusArchiveEntry::ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) const {
auto input_archive = processors::archive_read_unique_ptr{archive_read_new()};
struct archive_entry *entry = nullptr;
int64_t nlen = 0;
@@ -169,7 +169,7 @@ int64_t FocusArchiveEntry::ReadCallback::operator()(const std::shared_ptr<io::In
// Read each item in the archive
if (archive_read_open(input_archive.get(), &data, ok_cb, read_cb, ok_cb)) {
logger_->log_error("FocusArchiveEntry can't open due to archive error: {}", archive_error_string(input_archive.get()));
- return nlen;
+ return io::IoResult::zero();
}
while (context_->isRunning()) {
@@ -179,14 +179,9 @@ int64_t FocusArchiveEntry::ReadCallback::operator()(const std::shared_ptr<io::In
break;
}
- if (res < ARCHIVE_OK) {
+ if (res < ARCHIVE_OK) { // TODO(MINIFICPP-2761)
logger_->log_error("FocusArchiveEntry can't read header due to archive error: {}", archive_error_string(input_archive.get()));
- return nlen;
- }
-
- if (res < ARCHIVE_WARN) {
- logger_->log_warn("FocusArchiveEntry got archive warning while reading header: {}", archive_error_string(input_archive.get()));
- return nlen;
+ return io::IoResult::from(nlen);
}
auto entryName = archive_entry_pathname(entry);
@@ -232,7 +227,7 @@ int64_t FocusArchiveEntry::ReadCallback::operator()(const std::shared_ptr<io::In
_archiveMetadata->entryMetadata.push_back(metadata);
}
- return nlen;
+ return io::IoResult::from(nlen);
}
FocusArchiveEntry::ReadCallback::ReadCallback(core::ProcessContext* context, utils::file::FileManager *file_man, ArchiveMetadata *archiveMetadata)
diff --git a/extensions/libarchive/FocusArchiveEntry.h b/extensions/libarchive/FocusArchiveEntry.h
index bcf816cb3..a0e67c958 100644
--- a/extensions/libarchive/FocusArchiveEntry.h
+++ b/extensions/libarchive/FocusArchiveEntry.h
@@ -66,7 +66,7 @@ class FocusArchiveEntry : public core::ProcessorImpl {
class ReadCallback {
public:
explicit ReadCallback(core::ProcessContext* context, utils::file::FileManager *file_man, ArchiveMetadata *archiveMetadata);
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) const;
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) const;
private:
utils::file::FileManager *file_man_;
diff --git a/extensions/libarchive/MergeContent.cpp b/extensions/libarchive/MergeContent.cpp
index 90bff039f..428d8c5e4 100644
--- a/extensions/libarchive/MergeContent.cpp
+++ b/extensions/libarchive/MergeContent.cpp
@@ -231,8 +231,8 @@ bool MergeContent::processBin(core::ProcessSession &session, std::unique_ptr<Bin
return false;
}
- auto flowFileReader = [&] (const std::shared_ptr<core::FlowFile>& ff, const io::InputStreamCallback& cb) {
- return session.read(ff, cb);
+ auto flowFileReader = [&] (const std::shared_ptr<core::FlowFile>& ff, const io::InputStreamCallback& cb) -> io::IoResult {
+ return io::IoResult::from(session.read(ff, cb));
};
const char* mimeType = nullptr;
diff --git a/extensions/libarchive/MergeContent.h b/extensions/libarchive/MergeContent.h
index 6b7330d01..cbdfb8682 100644
--- a/extensions/libarchive/MergeContent.h
+++ b/extensions/libarchive/MergeContent.h
@@ -82,35 +82,39 @@ class BinaryConcatenationMerge : public MergeBin {
std::deque<std::shared_ptr<core::FlowFile>> &flows_;
FlowFileSerializer& serializer_;
- int64_t operator()(const std::shared_ptr<io::OutputStream>& stream) const {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& stream) const {
size_t write_size_sum = 0;
if (!header_.empty()) {
const auto write_ret = stream->write(reinterpret_cast<const uint8_t*>(header_.data()), header_.size());
- if (io::isError(write_ret))
- return -1;
+ if (io::isError(write_ret)) {
+ return io::IoResult::error();
+ }
write_size_sum += write_ret;
}
bool isFirst = true;
for (const auto& flow : flows_) {
if (!isFirst && !demarcator_.empty()) {
- const auto write_ret = stream->write(reinterpret_cast<const uint8_t*>(demarcator_.data()), demarcator_.size());
- if (io::isError(write_ret))
- return -1;
- write_size_sum += write_ret;
+ const auto write_result = stream->write(reinterpret_cast<const uint8_t*>(demarcator_.data()), demarcator_.size());
+ if (io::isError(write_result)) {
+ return io::IoResult::error();
+ }
+ write_size_sum += write_result;
+ }
+ const auto serialization_result = serializer_.serialize(flow, stream);
+ if (!serialization_result) {
+ return serialization_result;
}
- const auto len = serializer_.serialize(flow, stream);
- if (len < 0)
- return len;
- write_size_sum += gsl::narrow<size_t>(len);
+ write_size_sum += gsl::narrow<size_t>(*serialization_result);
isFirst = false;
}
if (!footer_.empty()) {
- const auto write_ret = stream->write(reinterpret_cast<const uint8_t*>(footer_.data()), footer_.size());
- if (io::isError(write_ret))
- return -1;
- write_size_sum += write_ret;
+ const auto write_result = stream->write(reinterpret_cast<const uint8_t*>(footer_.data()), footer_.size());
+ if (io::isError(write_result)) {
+ return io::IoResult::error();
+ }
+ write_size_sum += write_result;
}
- return gsl::narrow<int64_t>(write_size_sum);
+ return io::IoResult::from(write_size_sum);
}
};
@@ -192,7 +196,7 @@ class ArchiveMerge {
return totalWrote;
}
- int64_t operator()(const std::shared_ptr<io::OutputStream>& stream) {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& stream) {
const auto arch = archive_write_unique_ptr{archive_write_new()};
if (merge_type_ == merge_content_options::MERGE_FORMAT_TAR_VALUE) {
@@ -224,12 +228,12 @@ class ArchiveMerge {
}
}
const auto ret = serializer_.serialize(flow, std::make_shared<ArchiveWriter>(*arch, *entry));
- if (ret < 0) {
+ if (!ret) {
return ret;
}
}
- return gsl::narrow<int64_t>(size_);
+ return io::IoResult::from(size_);
}
};
};
diff --git a/extensions/libarchive/UnfocusArchiveEntry.cpp b/extensions/libarchive/UnfocusArchiveEntry.cpp
index eb94b693f..b8de55134 100644
--- a/extensions/libarchive/UnfocusArchiveEntry.cpp
+++ b/extensions/libarchive/UnfocusArchiveEntry.cpp
@@ -150,7 +150,7 @@ la_ssize_t UnfocusArchiveEntry::WriteCallback::write_cb(struct archive *, void *
return io::isError(write_ret) ? -1 : gsl::narrow<la_ssize_t>(write_ret);
}
-int64_t UnfocusArchiveEntry::WriteCallback::operator()(const std::shared_ptr<io::OutputStream>& stream) const {
+io::IoResult UnfocusArchiveEntry::WriteCallback::operator()(const std::shared_ptr<io::OutputStream>& stream) const {
UnfocusArchiveEntryWriteData data;
data.stream = stream;
auto output_archive = archive_write_unique_ptr{archive_write_new()};
@@ -218,7 +218,7 @@ int64_t UnfocusArchiveEntry::WriteCallback::operator()(const std::shared_ptr<io:
archive_entry_clear(entry.get());
}
- return nlen;
+ return io::IoResult::from(nlen);
}
REGISTER_RESOURCE(UnfocusArchiveEntry, Processor);
diff --git a/extensions/libarchive/UnfocusArchiveEntry.h b/extensions/libarchive/UnfocusArchiveEntry.h
index 5cafd93a5..2423c95ed 100644
--- a/extensions/libarchive/UnfocusArchiveEntry.h
+++ b/extensions/libarchive/UnfocusArchiveEntry.h
@@ -64,7 +64,7 @@ class UnfocusArchiveEntry : public core::ProcessorImpl {
class WriteCallback {
public:
explicit WriteCallback(ArchiveMetadata *archiveMetadata);
- int64_t operator()(const std::shared_ptr<io::OutputStream>& stream) const;
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& stream) const;
private:
//! Logger
std::shared_ptr<Logger> logger_ = core::logging::LoggerFactory<UnfocusArchiveEntry>::getLogger();
diff --git a/extensions/libarchive/tests/CompressContentTests.cpp b/extensions/libarchive/tests/CompressContentTests.cpp
index c2d38415a..3c7317c4c 100644
--- a/extensions/libarchive/tests/CompressContentTests.cpp
+++ b/extensions/libarchive/tests/CompressContentTests.cpp
@@ -56,16 +56,16 @@ class ReadCallback {
ReadCallback& operator=(ReadCallback&&) = delete;
~ReadCallback() = default;
- int64_t operator()(const std::shared_ptr<minifi::io::InputStream>& stream) {
+ minifi::io::IoResult operator()(const std::shared_ptr<minifi::io::InputStream>& stream) {
int64_t total_read = 0;
do {
const auto ret = stream->read(std::span(buffer_).subspan(read_size_));
if (ret == 0) { break; }
- if (minifi::io::isError(ret)) { return -1; }
+ if (minifi::io::isError(ret)) { return minifi::io::IoResult::error(); }
read_size_ += gsl::narrow<size_t>(ret);
total_read += gsl::narrow<int64_t>(ret);
} while (buffer_.size() != read_size_);
- return total_read;
+ return minifi::io::IoResult::from(total_read);
}
void archive_read() {
const auto archive = minifi::processors::archive_read_unique_ptr{archive_read_new()};
diff --git a/extensions/libarchive/tests/MergeFileTests.cpp b/extensions/libarchive/tests/MergeFileTests.cpp
index 651ac0ca9..2ab3fc53a 100644
--- a/extensions/libarchive/tests/MergeFileTests.cpp
+++ b/extensions/libarchive/tests/MergeFileTests.cpp
@@ -108,8 +108,8 @@ class FixedBuffer {
return gsl::narrow<int64_t>(total_read);
}
- int64_t operator()(const std::shared_ptr<minifi::io::InputStream>& stream) {
- return write(*stream, capacity_);
+ minifi::io::IoResult operator()(const std::shared_ptr<minifi::io::InputStream>& stream) {
+ return minifi::io::IoResult::from(write(*stream, capacity_));
}
private:
@@ -712,11 +712,11 @@ TEST_CASE("FlowFile serialization", "[testFlowFileSerialization]") {
core::ProcessSessionImpl session(context);
- minifi::PayloadSerializer payloadSerializer([&] (const std::shared_ptr<core::FlowFile>& ff, const minifi::io::InputStreamCallback& cb) {
- return session.read(ff, cb);
+ minifi::PayloadSerializer payloadSerializer([&] (const std::shared_ptr<core::FlowFile>& ff, const minifi::io::InputStreamCallback& cb) -> minifi::io::IoResult {
+ return minifi::io::IoResult::from(session.read(ff, cb));
});
- minifi::FlowFileV3Serializer ffV3Serializer([&] (const std::shared_ptr<core::FlowFile>& ff, const minifi::io::InputStreamCallback& cb) {
- return session.read(ff, cb);
+ minifi::FlowFileV3Serializer ffV3Serializer([&] (const std::shared_ptr<core::FlowFile>& ff, const minifi::io::InputStreamCallback& cb) -> minifi::io::IoResult {
+ return minifi::io::IoResult::from(session.read(ff, cb));
});
minifi::FlowFileSerializer* usedSerializer = nullptr;
diff --git a/extensions/lua/LuaProcessSession.cpp b/extensions/lua/LuaProcessSession.cpp
index 3a7f3a48d..bc9cd4062 100644
--- a/extensions/lua/LuaProcessSession.cpp
+++ b/extensions/lua/LuaProcessSession.cpp
@@ -58,9 +58,9 @@ void LuaProcessSession::read(const std::shared_ptr<LuaScriptFlowFile> &script_fl
throw std::runtime_error("Access of FlowFile after it has been released");
}
- session_.read(flow_file, [&input_stream_callback](const std::shared_ptr<io::InputStream>& input_stream) -> int64_t {
- sol::function callback = input_stream_callback["process"];
- return callback(input_stream_callback, std::make_shared<LuaInputStream>(input_stream));
+ session_.read(flow_file, [&input_stream_callback](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
+ const int64_t callback_result = input_stream_callback["process"](input_stream_callback, std::make_shared<LuaInputStream>(input_stream));
+ return io::IoResult::from(callback_result);
});
}
@@ -72,9 +72,9 @@ void LuaProcessSession::write(const std::shared_ptr<LuaScriptFlowFile> &script_f
throw std::runtime_error("Access of FlowFile after it has been released");
}
- session_.write(flow_file, [&output_stream_callback](const std::shared_ptr<io::OutputStream>& output_stream) -> int64_t {
- sol::function callback = output_stream_callback["process"];
- return callback(output_stream_callback, std::make_shared<LuaOutputStream>(output_stream));
+ session_.write(flow_file, [&output_stream_callback](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
+ const int64_t callback_result = output_stream_callback["process"](output_stream_callback, std::make_shared<LuaOutputStream>(output_stream));
+ return io::IoResult::from(callback_result);
});
}
diff --git a/extensions/mqtt/processors/ConsumeMQTT.cpp b/extensions/mqtt/processors/ConsumeMQTT.cpp
index 5b5405a0a..45bbb8025 100644
--- a/extensions/mqtt/processors/ConsumeMQTT.cpp
+++ b/extensions/mqtt/processors/ConsumeMQTT.cpp
@@ -163,21 +163,21 @@ std::queue<ConsumeMQTT::SmartMessage> ConsumeMQTT::getReceivedMqttMessages() {
return msg_queue;
}
-int64_t ConsumeMQTT::WriteCallback::operator() (const std::shared_ptr<io::OutputStream>& stream) {
+io::IoResult ConsumeMQTT::WriteCallback::operator() (const std::shared_ptr<io::OutputStream>& stream) {
if (message_.contents->payloadlen < 0) {
success_status_ = false;
logger_->log_error("Payload length of message is negative, value is [{}]", message_.contents->payloadlen);
- return -1;
+ return io::IoResult::error();
}
- const auto len = stream->write(reinterpret_cast<uint8_t*>(message_.contents->payload), gsl::narrow<size_t>(message_.contents->payloadlen));
+ const size_t len = stream->write(reinterpret_cast<uint8_t*>(message_.contents->payload), gsl::narrow<size_t>(message_.contents->payloadlen));
if (io::isError(len)) {
success_status_ = false;
logger_->log_error("Stream writing error when processing message");
- return -1;
+ return io::IoResult::error();
}
- return gsl::narrow<int64_t>(len);
+ return io::IoResult::from(len);
}
void ConsumeMQTT::putUserPropertiesAsAttributes(const SmartMessage& message, const std::shared_ptr<core::FlowFile>& flow_file, core::ProcessSession& session) const {
diff --git a/extensions/mqtt/processors/ConsumeMQTT.h b/extensions/mqtt/processors/ConsumeMQTT.h
index b4434d46e..a172fbe7e 100644
--- a/extensions/mqtt/processors/ConsumeMQTT.h
+++ b/extensions/mqtt/processors/ConsumeMQTT.h
@@ -142,7 +142,7 @@ class ConsumeMQTT : public processors::AbstractMQTTProcessor {
, logger_(std::move(logger)) {
}
- int64_t operator() (const std::shared_ptr<io::OutputStream>& stream);
+ io::IoResult operator() (const std::shared_ptr<io::OutputStream>& stream);
[[nodiscard]] bool getSuccessStatus() const {
return success_status_;
diff --git a/extensions/mqtt/processors/PublishMQTT.cpp b/extensions/mqtt/processors/PublishMQTT.cpp
index 9b8fe786d..24bc72e90 100644
--- a/extensions/mqtt/processors/PublishMQTT.cpp
+++ b/extensions/mqtt/processors/PublishMQTT.cpp
@@ -66,9 +66,9 @@ void PublishMQTT::onTriggerImpl(core::ProcessContext& context, core::ProcessSess
std::vector<std::shared_ptr<core::FlowFile>> flow_files;
if (record_converter_) {
nonstd::expected<core::RecordSet, std::error_code> record_set;
- session.read(original_flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) {
+ session.read(original_flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
record_set = record_converter_->record_set_reader->read(*input_stream);
- return gsl::narrow<int64_t>(input_stream->size());
+ return io::IoResult::from(input_stream->size());
});
if (!record_set) {
diff --git a/extensions/opencv/CaptureRTSPFrame.cpp b/extensions/opencv/CaptureRTSPFrame.cpp
index cb165baf7..19aa01acd 100644
--- a/extensions/opencv/CaptureRTSPFrame.cpp
+++ b/extensions/opencv/CaptureRTSPFrame.cpp
@@ -94,11 +94,11 @@ void CaptureRTSPFrame::onTrigger(core::ProcessContext& context, core::ProcessSes
session.putAttribute(*flow_file, "filename", filename);
session.putAttribute(*flow_file, "video.backend.driver", video_backend_driver_);
- session.write(flow_file, [&frame, this](const std::shared_ptr<io::OutputStream>& output_stream) -> int64_t {
+ session.write(flow_file, [&frame, this](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
std::vector<uchar> image_buf;
imencode(image_encoding_, frame, image_buf);
const auto ret = output_stream->write(image_buf.data(), image_buf.size());
- return io::isError(ret) ? -1 : gsl::narrow<int64_t>(ret);
+ return io::IoResult::from(ret);
});
session.transfer(flow_file, Success);
logger_->log_info("A frame is captured");
diff --git a/extensions/opencv/MotionDetector.cpp b/extensions/opencv/MotionDetector.cpp
index b6728f455..3724ff11e 100644
--- a/extensions/opencv/MotionDetector.cpp
+++ b/extensions/opencv/MotionDetector.cpp
@@ -109,15 +109,15 @@ void MotionDetector::onTrigger(core::ProcessContext& context, core::ProcessSessi
}
cv::Mat frame;
- session.read(flow_file, [&frame](const std::shared_ptr<io::InputStream>& input_stream) -> int64_t {
+ session.read(flow_file, [&frame](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
std::vector<uchar> image_buf;
image_buf.resize(input_stream->size());
- const auto ret = input_stream->read(as_writable_bytes(std::span(image_buf)));
+ const size_t ret = input_stream->read(as_writable_bytes(std::span(image_buf)));
if (io::isError(ret) || ret != input_stream->size()) {
throw std::runtime_error("ImageReadCallback failed to fully read flow file input stream");
}
frame = cv::imdecode(image_buf, -1);
- return gsl::narrow<int64_t>(ret);
+ return io::IoResult::from(ret);
});
if (frame.empty()) {
@@ -148,11 +148,11 @@ void MotionDetector::onTrigger(core::ProcessContext& context, core::ProcessSessi
session.putAttribute(*flow_file, "filename", filename);
- session.write(flow_file, [&frame, this](const auto& output_stream) -> int64_t {
+ session.write(flow_file, [&frame, this](const auto& output_stream) -> io::IoResult {
std::vector<uchar> image_buf;
imencode(image_encoding_, frame, image_buf);
const auto ret = output_stream->write(image_buf.data(), image_buf.size());
- return io::isError(ret) ? -1 : gsl::narrow<int64_t>(ret);
+ return io::IoResult::from(ret);
});
session.transfer(flow_file, Success);
logger_->log_trace("Finish motion detecting");
diff --git a/extensions/python/types/PyProcessSession.cpp b/extensions/python/types/PyProcessSession.cpp
index 9391c93ff..1f153b00c 100644
--- a/extensions/python/types/PyProcessSession.cpp
+++ b/extensions/python/types/PyProcessSession.cpp
@@ -67,8 +67,8 @@ void PyProcessSession::read(const std::shared_ptr<core::FlowFile>& flow_file, Bo
throw std::runtime_error("Access of FlowFile after it has been released");
}
- session_.read(flow_file, [&input_stream_callback](const std::shared_ptr<io::InputStream>& input_stream) -> int64_t {
- return Long(Callable(input_stream_callback.getAttribute("process"))(std::weak_ptr(input_stream))).asInt64();
+ session_.read(flow_file, [&input_stream_callback](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
+ return io::IoResult::from(Long(Callable(input_stream_callback.getAttribute("process"))(std::weak_ptr(input_stream))).asInt64());
});
}
@@ -77,8 +77,8 @@ void PyProcessSession::write(const std::shared_ptr<core::FlowFile>& flow_file, B
throw std::runtime_error("Access of FlowFile after it has been released");
}
- session_.write(flow_file, [&output_stream_callback](const std::shared_ptr<io::OutputStream>& output_stream) -> int64_t {
- return Long(Callable(output_stream_callback.getAttribute("process"))(std::weak_ptr(output_stream))).asInt64();
+ session_.write(flow_file, [&output_stream_callback](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
+ return io::IoResult::from(Long(Callable(output_stream_callback.getAttribute("process"))(std::weak_ptr(output_stream))).asInt64());
});
}
@@ -111,9 +111,9 @@ std::string PyProcessSession::getContentsAsString(const std::shared_ptr<core::Fl
}
std::string content;
- session_.read(flow_file, [&content](const std::shared_ptr<io::InputStream>& input_stream) -> int64_t {
+ session_.read(flow_file, [&content](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
content.resize(input_stream->size());
- return gsl::narrow<int64_t>(input_stream->read(as_writable_bytes(std::span(content))));
+ return io::IoResult::from(input_stream->read(as_writable_bytes(std::span(content))));
});
return content;
}
diff --git a/extensions/python/types/PyRecordSetReader.cpp b/extensions/python/types/PyRecordSetReader.cpp
index 666843074..815d2d642 100644
--- a/extensions/python/types/PyRecordSetReader.cpp
+++ b/extensions/python/types/PyRecordSetReader.cpp
@@ -89,7 +89,7 @@ PyObject* PyRecordSetReader::read(PyRecordSetReader* self, PyObject* args) {
nonstd::expected<core::RecordSet, std::error_code> read_result;
process_session->getSession().read(flow_file, [&record_set_reader, &read_result](const std::shared_ptr<io::InputStream>& input_stream) {
read_result = record_set_reader->read(*input_stream);
- return gsl::narrow<int64_t>(input_stream->size());
+ return io::IoResult::from(input_stream->size());
});
if (!read_result) {
diff --git a/extensions/rocksdb-repos/tests/SwapTests.cpp b/extensions/rocksdb-repos/tests/SwapTests.cpp
index 128fe23a9..82677c0a2 100644
--- a/extensions/rocksdb-repos/tests/SwapTests.cpp
+++ b/extensions/rocksdb-repos/tests/SwapTests.cpp
@@ -56,14 +56,11 @@ class OutputProcessor : public core::ProcessorImpl {
void onTrigger(core::ProcessContext&, core::ProcessSession& session) override {
auto id = std::to_string(next_id_++);
- auto ff = session.create();
+ const auto ff = session.create();
ff->addAttribute("index", id);
- session.write(ff, [&] (const std::shared_ptr<minifi::io::OutputStream>& output) -> int64_t {
- auto ret = output->write(as_bytes(std::span(id)));
- if (minifi::io::isError(ret)) {
- return -1;
- }
- return gsl::narrow<int64_t>(ret);
+ session.write(ff, [&] (const std::shared_ptr<minifi::io::OutputStream>& output) -> io::IoResult {
+ const size_t ret = output->write(as_bytes(std::span(id)));
+ return io::IoResult::from(ret);
});
session.transfer(ff, Success);
flow_files_.push_back(ff);
diff --git a/extensions/sftp/processors/FetchSFTP.cpp b/extensions/sftp/processors/FetchSFTP.cpp
index 4ce4c41d0..9bbcae6b9 100644
--- a/extensions/sftp/processors/FetchSFTP.cpp
+++ b/extensions/sftp/processors/FetchSFTP.cpp
@@ -107,12 +107,12 @@ void FetchSFTP::onTrigger(core::ProcessContext& context, core::ProcessSession& s
/* Download file */
try {
- session.write(flow_file, [&remote_file, &client](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
+ session.write(flow_file, [&remote_file, &client](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
auto bytes_read = client->getFile(remote_file.generic_string(), *stream);
if (!bytes_read) {
throw utils::SFTPException{client->getLastError()};
}
- return gsl::narrow<int64_t>(*bytes_read);
+ return io::IoResult::from(*bytes_read);
});
} catch (const utils::SFTPException& ex) {
logger_->log_debug("{}", ex.what());
diff --git a/extensions/sftp/processors/PutSFTP.cpp b/extensions/sftp/processors/PutSFTP.cpp
index b04feb457..e41285141 100644
--- a/extensions/sftp/processors/PutSFTP.cpp
+++ b/extensions/sftp/processors/PutSFTP.cpp
@@ -248,7 +248,7 @@ bool PutSFTP::processOne(core::ProcessContext& context, core::ProcessSession& se
gsl::narrow<int64_t>(stream->size()) /*expected_size*/)) {
throw utils::SFTPException{client->getLastError()};
}
- return gsl::narrow<int64_t>(stream->size());
+ return io::IoResult::from(stream->size());
});
} catch (const utils::SFTPException& ex) {
logger_->log_debug("{}", ex.what());
diff --git a/extensions/standard-processors/controllers/JsonRecordSetWriter.cpp b/extensions/standard-processors/controllers/JsonRecordSetWriter.cpp
index efc3f2326..c018da50a 100644
--- a/extensions/standard-processors/controllers/JsonRecordSetWriter.cpp
+++ b/extensions/standard-processors/controllers/JsonRecordSetWriter.cpp
@@ -75,7 +75,7 @@ void JsonRecordSetWriter::onEnable() {
}
void JsonRecordSetWriter::writePerLine(const core::RecordSet& record_set, const std::shared_ptr<core::FlowFile>& flow_file, core::ProcessSession& session) {
- session.write(flow_file, [&record_set](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
+ session.write(flow_file, [&record_set](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
int64_t write_result = 0;
for (const auto& record : record_set) {
auto doc = rapidjson::Document(rapidjson::kObjectType);
@@ -86,12 +86,12 @@ void JsonRecordSetWriter::writePerLine(const core::RecordSet& record_set, const
doc.Accept(writer);
write_result += gsl::narrow<int64_t>(stream->write(gsl::make_span(fmt::format("{}\n", buffer.GetString())).as_span<const std::byte>()));
}
- return write_result;
+ return io::IoResult::from(write_result);
});
}
void JsonRecordSetWriter::writeAsArray(const core::RecordSet& record_set, const std::shared_ptr<core::FlowFile>& flow_file, core::ProcessSession& session) const {
- session.write(flow_file, [this, &record_set](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
+ session.write(flow_file, [this, &record_set](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
auto doc = rapidjson::Document(rapidjson::kArrayType);
for (const auto& record : record_set) {
auto& allocator = doc.GetAllocator();
@@ -107,7 +107,7 @@ void JsonRecordSetWriter::writeAsArray(const core::RecordSet& record_set, const
rapidjson::Writer writer(buffer);
doc.Accept(writer);
}
- return gsl::narrow<int64_t>(stream->write(gsl::make_span(fmt::format("{}", buffer.GetString())).as_span<const std::byte>()));
+ return io::IoResult::from(stream->write(gsl::make_span(fmt::format("{}", buffer.GetString())).as_span<const std::byte>()));
});
}
diff --git a/extensions/standard-processors/controllers/XMLRecordSetWriter.cpp b/extensions/standard-processors/controllers/XMLRecordSetWriter.cpp
index b98cbb67b..4e283e553 100644
--- a/extensions/standard-processors/controllers/XMLRecordSetWriter.cpp
+++ b/extensions/standard-processors/controllers/XMLRecordSetWriter.cpp
@@ -154,9 +154,9 @@ void XMLRecordSetWriter::write(const core::RecordSet& record_set, const std::sha
}
auto xml_content = convertRecordSetToXml(record_set);
- session.write(flow_file, [&xml_content](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
+ session.write(flow_file, [&xml_content](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
stream->write(reinterpret_cast<const uint8_t*>(xml_content.data()), xml_content.size());
- return gsl::narrow<int64_t>(xml_content.size());
+ return io::IoResult::from(xml_content.size());
});
}
diff --git a/extensions/standard-processors/processors/ConvertRecord.cpp b/extensions/standard-processors/processors/ConvertRecord.cpp
index cf37cc191..00d864b8c 100644
--- a/extensions/standard-processors/processors/ConvertRecord.cpp
+++ b/extensions/standard-processors/processors/ConvertRecord.cpp
@@ -41,9 +41,9 @@ void ConvertRecord::onTrigger(core::ProcessContext& context, core::ProcessSessio
}
nonstd::expected<core::RecordSet, std::error_code> record_set;
- session.read(flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) {
+ session.read(flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
record_set = record_converter_->record_set_reader->read(*input_stream);
- return gsl::narrow<int64_t>(input_stream->size());
+ return io::IoResult::from(input_stream->size());
});
if (!record_set) {
logger_->log_error("Failed to read record set from flow file: {}", record_set.error().message());
diff --git a/extensions/standard-processors/processors/DefragmentText.cpp b/extensions/standard-processors/processors/DefragmentText.cpp
index 6b051682b..dae7511de 100644
--- a/extensions/standard-processors/processors/DefragmentText.cpp
+++ b/extensions/standard-processors/processors/DefragmentText.cpp
@@ -193,12 +193,12 @@ void DefragmentText::Buffer::append(core::ProcessSession& session, const gsl::no
store(session, flow_file_to_append);
return;
}
- auto flowFileReader = [&] (const std::shared_ptr<core::FlowFile>& ff, const io::InputStreamCallback& cb) {
- return session.read(ff, cb);
+ auto flowFileReader = [&] (const std::shared_ptr<core::FlowFile>& ff, const io::InputStreamCallback& cb) -> io::IoResult {
+ return io::IoResult::from(session.read(ff, cb));
};
PayloadSerializer serializer(flowFileReader);
session.add(buffered_flow_file_);
- session.append(buffered_flow_file_, [&serializer, &flow_file_to_append](const auto& output_stream) -> int64_t {
+ session.append(buffered_flow_file_, [&serializer, &flow_file_to_append](const auto& output_stream) -> io::IoResult {
return serializer.serialize(flow_file_to_append, output_stream);
});
updateAppendedAttributes(*buffered_flow_file_);
diff --git a/extensions/standard-processors/processors/EvaluateJsonPath.cpp b/extensions/standard-processors/processors/EvaluateJsonPath.cpp
index 9273cee6f..09803d229 100644
--- a/extensions/standard-processors/processors/EvaluateJsonPath.cpp
+++ b/extensions/standard-processors/processors/EvaluateJsonPath.cpp
@@ -84,9 +84,9 @@ std::string EvaluateJsonPath::extractQueryResult(const jsoncons::json& query_res
void EvaluateJsonPath::writeQueryResult(core::ProcessSession& session, core::FlowFile& flow_file, const jsoncons::json& query_result, const std::string& property_name,
std::unordered_map<std::string, std::string>& attributes_to_set) const {
if (destination_ == evaluate_json_path::DestinationType::FlowFileContent) {
- session.write(flow_file, [&query_result, this](const std::shared_ptr<io::OutputStream>& output_stream) -> int64_t {
+ session.write(flow_file, [&query_result, this](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
auto result_string = extractQueryResult(query_result);
- return gsl::narrow<int64_t>(output_stream->write(reinterpret_cast<const uint8_t*>(result_string.data()), result_string.size()));
+ return io::IoResult::from(output_stream->write(reinterpret_cast<const uint8_t*>(result_string.data()), result_string.size()));
});
} else {
attributes_to_set.emplace(property_name, extractQueryResult(query_result));
diff --git a/extensions/standard-processors/processors/ExtractText.cpp b/extensions/standard-processors/processors/ExtractText.cpp
index 0cba55b81..a2e612b6c 100644
--- a/extensions/standard-processors/processors/ExtractText.cpp
+++ b/extensions/standard-processors/processors/ExtractText.cpp
@@ -53,7 +53,7 @@ void ExtractText::onTrigger(core::ProcessContext& context, core::ProcessSession&
session.transfer(flowFile, Success);
}
-int64_t ExtractText::ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) const {
+io::IoResult ExtractText::ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) const {
const auto flow_file_size = gsl::narrow<size_t>(flowFile_->getSize());
const auto default_buffer_size = utils::configuration::getBufferSize(*ctx_->getConfiguration());
std::vector<std::byte> buffer((std::min)(flow_file_size, default_buffer_size));
@@ -74,7 +74,7 @@ int64_t ExtractText::ReadCallback::operator()(const std::shared_ptr<io::InputStr
const auto ret = stream->read(std::span(buffer).subspan(0, length));
if (io::isError(ret)) {
- return -1; // Stream error
+ return io::IoResult::error(); // Stream error
} else if (ret == 0) {
break; // End of stream, no more data
}
@@ -82,7 +82,7 @@ int64_t ExtractText::ReadCallback::operator()(const std::shared_ptr<io::InputStr
contentStream.write(reinterpret_cast<const char*>(buffer.data()), gsl::narrow<std::streamsize>(ret));
read_size += ret;
if (contentStream.fail()) {
- return -1;
+ return io::IoResult::error();
}
}
@@ -137,7 +137,7 @@ int64_t ExtractText::ReadCallback::operator()(const std::shared_ptr<io::InputStr
} else {
flowFile_->setAttribute(attrKey, contentStream.str());
}
- return gsl::narrow<int64_t>(read_size);
+ return io::IoResult::from(read_size);
}
ExtractText::ReadCallback::ReadCallback(std::shared_ptr<core::FlowFile> flowFile, core::ProcessContext& ctx, std::shared_ptr<core::logging::Logger> lgr)
diff --git a/extensions/standard-processors/processors/ExtractText.h b/extensions/standard-processors/processors/ExtractText.h
index fdf17e5e1..9041da167 100644
--- a/extensions/standard-processors/processors/ExtractText.h
+++ b/extensions/standard-processors/processors/ExtractText.h
@@ -109,7 +109,7 @@ class ExtractText : public core::ProcessorImpl {
class ReadCallback {
public:
ReadCallback(std::shared_ptr<core::FlowFile> flowFile, core::ProcessContext& ctx, std::shared_ptr<core::logging::Logger> lgr);
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) const;
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) const;
private:
std::shared_ptr<core::FlowFile> flowFile_;
diff --git a/extensions/standard-processors/processors/HashContent.cpp b/extensions/standard-processors/processors/HashContent.cpp
index f48afc0b3..d81adc978 100644
--- a/extensions/standard-processors/processors/HashContent.cpp
+++ b/extensions/standard-processors/processors/HashContent.cpp
@@ -69,12 +69,11 @@ void HashContent::onTrigger(core::ProcessContext&, core::ProcessSession& session
}
logger_->log_trace("attempting read");
- session.read(flowFile, [&flowFile, this](const std::shared_ptr<io::InputStream>& stream) {
+ session.read(flowFile, [&flowFile, this](const std::shared_ptr<io::InputStream>& stream) -> io::IoResult {
const auto& ret_val = algorithm_(stream);
-
flowFile->setAttribute(attrKey_, ret_val.first);
- return ret_val.second;
+ return io::IoResult::from(ret_val.second);
});
session.transfer(flowFile, Success);
}
diff --git a/extensions/standard-processors/processors/RouteText.cpp b/extensions/standard-processors/processors/RouteText.cpp
index fee76d588..4604ab41e 100644
--- a/extensions/standard-processors/processors/RouteText.cpp
+++ b/extensions/standard-processors/processors/RouteText.cpp
@@ -68,12 +68,12 @@ class RouteText::ReadCallback {
ReadCallback(route_text::Segmentation segmentation, size_t file_size, Fn&& fn)
: segmentation_(segmentation), file_size_(file_size), fn_(std::move(fn)) {}
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream) const {
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream) const {
std::vector<std::byte> buffer;
buffer.resize(file_size_);
size_t ret = stream->read(buffer);
if (io::isError(ret)) {
- return -1;
+ return io::IoResult::error();
}
if (ret != file_size_) {
throw Exception(PROCESS_SESSION_EXCEPTION, "Couldn't read whole flowfile content");
@@ -82,7 +82,7 @@ class RouteText::ReadCallback {
switch (segmentation_) {
case route_text::Segmentation::FULL_TEXT: {
fn_({content, 0});
- return gsl::narrow<int64_t>(content.length());
+ return io::IoResult::from(content.length());
}
case route_text::Segmentation::PER_LINE: {
// 1-based index as in nifi
@@ -102,7 +102,7 @@ class RouteText::ReadCallback {
curr = next_line;
++segment_idx;
}
- return gsl::narrow<int64_t>(content.length());
+ return io::IoResult::from(content.length());
}
}
throw Exception(PROCESSOR_EXCEPTION, "Unknown segmentation strategy");
diff --git a/extensions/standard-processors/processors/SplitJson.cpp b/extensions/standard-processors/processors/SplitJson.cpp
index 0e3d90cd4..9498de3f8 100644
--- a/extensions/standard-processors/processors/SplitJson.cpp
+++ b/extensions/standard-processors/processors/SplitJson.cpp
@@ -115,9 +115,9 @@ void SplitJson::onTrigger(core::ProcessContext& context, core::ProcessSession& s
child_flow_file->setAttribute(SplitJson::SegmentOriginalFilename.name, original_filename ? original_filename.value() : "");
auto& json_value_to_write = result_array[i];
- session.write(child_flow_file, [this, &json_value_to_write](const std::shared_ptr<io::OutputStream>& output_stream) -> int64_t {
+ session.write(child_flow_file, [this, &json_value_to_write](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
auto result_string = jsonValueToString(json_value_to_write);
- return gsl::narrow<int64_t>(output_stream->write(reinterpret_cast<const uint8_t*>(result_string.data()), result_string.size()));
+ return io::IoResult::from(output_stream->write(reinterpret_cast<const uint8_t*>(result_string.data()), result_string.size()));
});
session.transfer(child_flow_file, Split);
diff --git a/extensions/standard-processors/processors/SplitRecord.cpp b/extensions/standard-processors/processors/SplitRecord.cpp
index fb32a5baa..ba501473a 100644
--- a/extensions/standard-processors/processors/SplitRecord.cpp
+++ b/extensions/standard-processors/processors/SplitRecord.cpp
@@ -55,9 +55,9 @@ void SplitRecord::onTrigger(core::ProcessContext& context, core::ProcessSession&
}
nonstd::expected<core::RecordSet, std::error_code> record_set;
- session.read(original_flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) {
+ session.read(original_flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
record_set = record_converter_->record_set_reader->read(*input_stream);
- return gsl::narrow<int64_t>(input_stream->size());
+ return io::IoResult::from(input_stream->size());
});
if (!record_set) {
logger_->log_error("Failed to read record set from flow file: {}", record_set.error().message());
diff --git a/extensions/standard-processors/processors/SplitText.cpp b/extensions/standard-processors/processors/SplitText.cpp
index 60dc02442..3573169a8 100644
--- a/extensions/standard-processors/processors/SplitText.cpp
+++ b/extensions/standard-processors/processors/SplitText.cpp
@@ -157,7 +157,7 @@ class ReadCallback {
public:
ReadCallback(std::shared_ptr<core::FlowFile> flow_file, const SplitTextConfiguration& split_text_config,
core::ProcessSession& session, size_t buffer_size, std::shared_ptr<core::logging::Logger> logger);
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream);
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream);
std::optional<const char*> error;
std::vector<std::shared_ptr<org::apache::nifi::minifi::core::FlowFile>> results;
@@ -325,17 +325,17 @@ void ReadCallback::mergeHeaderAndFragmentFlows(const std::shared_ptr<core::FlowF
logger_->log_error("Failed to clone merged fragment flow!");
return;
}
- session_.write(merged_flow, [this, &fragment_flow, &header_flow](const std::shared_ptr<io::OutputStream>& output_stream) -> int64_t {
- auto header_write_result = session_.read(header_flow, [&output_stream](const std::shared_ptr<io::InputStream>& header_input_stream) -> int64_t {
+ session_.write(merged_flow, [this, &fragment_flow, &header_flow](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
+ const int64_t header_write_result = session_.read(header_flow, [&output_stream](const std::shared_ptr<io::InputStream>& header_input_stream) -> io::IoResult {
return internal::pipe(*header_input_stream, *output_stream);
});
if (header_write_result < 0) {
logger_->log_error("Failed to write header to fragment!");
- return header_write_result;
+ return io::IoResult::from(header_write_result);
}
- return session_.read(fragment_flow, [&output_stream](const std::shared_ptr<io::InputStream>& fragment_input_stream) -> int64_t {
+ return io::IoResult::from(session_.read(fragment_flow, [&output_stream](const std::shared_ptr<io::InputStream>& fragment_input_stream) -> io::IoResult {
return internal::pipe(*fragment_input_stream, *output_stream);
- });
+ }));
});
logger_->log_debug("Creating fragment with header with fragment index: {} fragment size: {}", emitted_fragment_index_, merged_flow->getSize());
setAttributesOfDoneSegment(*merged_flow, fragment.text_line_count);
@@ -354,7 +354,7 @@ void ReadCallback::createFragmentFlowWithoutHeader(const SplitTextFragmentGenera
results.push_back(fragment_flow);
}
-int64_t ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
+io::IoResult ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
SplitTextFragmentGenerator fragment_generator(stream, split_text_config_, buffer_size_);
nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> header_fragment;
std::shared_ptr<core::FlowFile> header_flow; // cache header flow file to avoid cloning it for each fragment
@@ -362,12 +362,12 @@ int64_t ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream)
header_fragment = fragment_generator.readHeaderFragment();
if (!header_fragment) {
error = header_fragment.error();
- return gsl::narrow<int64_t>(flow_file_->getSize());
+ return io::IoResult::from(flow_file_->getSize());
}
header_flow = session_.clone(*flow_file_, gsl::narrow<int64_t>(header_fragment->fragment_offset), gsl::narrow<int64_t>(header_fragment->fragment_size));
if (!header_flow) {
logger_->log_error("Failed to clone header flow!");
- return -1;
+ return io::IoResult::error();
}
}
@@ -386,7 +386,10 @@ int64_t ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream)
if (header_flow) {
session_.remove(header_flow);
}
- return fragment_generator.getState() == detail::StreamReadState::EndOfStream ? gsl::narrow<int64_t>(flow_file_->getSize()) : -1;
+ if (fragment_generator.getState() == detail::StreamReadState::EndOfStream) {
+ return io::IoResult::from(flow_file_->getSize());
+ }
+ return io::IoResult::error();
}
} // namespace
diff --git a/extensions/standard-processors/processors/TailFile.cpp b/extensions/standard-processors/processors/TailFile.cpp
index c9bdd74a7..334c2ec22 100644
--- a/extensions/standard-processors/processors/TailFile.cpp
+++ b/extensions/standard-processors/processors/TailFile.cpp
@@ -111,7 +111,7 @@ class FileReaderCallback {
openFile(file_path, offset, input_stream_, logger_);
}
- int64_t operator()(const std::shared_ptr<io::OutputStream>& output_stream) {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& output_stream) {
io::CRCStream<io::OutputStream> crc_stream{gsl::make_not_null(output_stream.get()), checksum_};
uint64_t num_bytes_written = 0;
@@ -143,7 +143,7 @@ class FileReaderCallback {
latest_flow_file_ends_with_delimiter_ = false;
}
- return gsl::narrow<int64_t>(num_bytes_written);
+ return io::IoResult::from(num_bytes_written);
}
uint64_t checksum() const {
@@ -187,7 +187,7 @@ class WholeFileReaderCallback {
return checksum_;
}
- int64_t operator()(const std::shared_ptr<io::OutputStream>& output_stream) {
+ io::IoResult operator()(const std::shared_ptr<io::OutputStream>& output_stream) {
std::vector<char> buffer(buffer_size_);
io::CRCStream<io::OutputStream> crc_stream{gsl::make_not_null(output_stream.get()), checksum_};
@@ -208,7 +208,7 @@ class WholeFileReaderCallback {
checksum_ = crc_stream.getCRC();
- return gsl::narrow<int64_t>(num_bytes_written);
+ return io::IoResult::from(num_bytes_written);
}
private:
diff --git a/extensions/standard-processors/tests/unit/XMLRecordSetWriterTests.cpp b/extensions/standard-processors/tests/unit/XMLRecordSetWriterTests.cpp
index ab887af67..2f7900e80 100644
--- a/extensions/standard-processors/tests/unit/XMLRecordSetWriterTests.cpp
+++ b/extensions/standard-processors/tests/unit/XMLRecordSetWriterTests.cpp
@@ -70,7 +70,7 @@ class XMLRecordSetWriterTestFixture {
std::vector<std::byte> buffer(input_stream->size());
input_stream->read(buffer);
xml_content = std::string(reinterpret_cast<const char*>(buffer.data()), buffer.size());
- return gsl::narrow<int64_t>(input_stream->size());
+ return io::IoResult::from(input_stream->size());
});
return xml_content;
}
diff --git a/libminifi/include/c2/PayloadSerializer.h b/libminifi/include/c2/PayloadSerializer.h
index 35590c072..1d7125176 100644
--- a/libminifi/include/c2/PayloadSerializer.h
+++ b/libminifi/include/c2/PayloadSerializer.h
@@ -72,7 +72,7 @@ class PayloadSerializer {
}
}
static void serialize(uint16_t op, const C2Payload &payload, std::shared_ptr<io::OutputStream> stream) {
- uint8_t st;
+ uint8_t st = 0;
uint32_t size = gsl::narrow<uint32_t>(payload.getNestedPayloads().size());
stream->write(size);
for (const auto &nested_payload : payload.getNestedPayloads()) {
diff --git a/libminifi/include/core/ProcessSessionReadCallback.h b/libminifi/include/core/ProcessSessionReadCallback.h
index 715f4155e..3693b6392 100644
--- a/libminifi/include/core/ProcessSessionReadCallback.h
+++ b/libminifi/include/core/ProcessSessionReadCallback.h
@@ -31,7 +31,7 @@ class ProcessSessionReadCallback {
public:
ProcessSessionReadCallback(std::filesystem::path temp_file, std::filesystem::path dest_file, std::shared_ptr<logging::Logger> logger);
~ProcessSessionReadCallback();
- int64_t operator()(const std::shared_ptr<io::InputStream>& stream);
+ io::IoResult operator()(const std::shared_ptr<io::InputStream>& stream);
bool commit();
private:
diff --git a/libminifi/src/c2/C2Utils.cpp b/libminifi/src/c2/C2Utils.cpp
index 18141b861..00a8f6d9e 100644
--- a/libminifi/src/c2/C2Utils.cpp
+++ b/libminifi/src/c2/C2Utils.cpp
@@ -50,7 +50,7 @@ nonstd::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBund
if (!archiver->newEntry({filename, file_size})) {
return nonstd::make_unexpected("Couldn't initialize archive entry for '" + filename + "'");
}
- if (gsl::narrow<int64_t>(file_size) != minifi::internal::pipe(*stream, *archiver)) {
+ if (gsl::narrow<int64_t>(file_size) != minifi::internal::pipe(*stream, *archiver).toI64()) {
// we have touched the input streams, they cannot be reused
return nonstd::make_unexpected("Error while writing file '" + filename + "' into the debug bundle");
}
diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp
index 23708c6a3..662f2b00e 100644
--- a/libminifi/src/core/ProcessSession.cpp
+++ b/libminifi/src/core/ProcessSession.cpp
@@ -189,11 +189,11 @@ std::shared_ptr<core::FlowFile> ProcessSessionImpl::clone(const FlowFile& parent
if (record) {
logger_->log_debug("Cloned parent flow files {} to {}, with {}:{}", parent.getUUIDStr(), record->getUUIDStr(), offset, size);
if (parent.getResourceClaim()) {
- write(record, [&] (const std::shared_ptr<io::OutputStream>& output) -> int64_t {
- return read(parent, [&] (const std::shared_ptr<io::InputStream>& input) -> int64_t {
+ write(record, [&] (const std::shared_ptr<io::OutputStream>& output) -> io::IoResult {
+ return io::IoResult::from(read(parent, [&] (const std::shared_ptr<io::InputStream>& input) -> io::IoResult {
io::StreamSlice slice(input, offset, size);
- return minifi::internal::pipe(slice, *output);
- });
+ return internal::pipe(slice, *output);
+ }));
});
}
provenance_report_->clone(parent, *record);
@@ -262,14 +262,15 @@ void ProcessSessionImpl::write(core::FlowFile &flow, const io::OutputStreamCallb
throw Exception(FILE_OPERATION_EXCEPTION, "Failed to open flowfile content for write");
}
const auto callback_result = callback(stream);
- if (callback_result == MinifiIoStatus::MINIFI_IO_CANCEL) {
+
+ if (callback_result.is_cancelled()) {
stream->close();
content_session_->remove(claim);
claim.reset();
return;
}
- if (callback_result < 0) {
+ if (!callback_result) {
throw Exception(FILE_OPERATION_EXCEPTION, "Failed to process flowfile content");
}
@@ -300,7 +301,7 @@ void ProcessSessionImpl::writeBuffer(const std::shared_ptr<core::FlowFile>& flow
void ProcessSessionImpl::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const std::byte> buffer) {
write(flow_file, [buffer](const std::shared_ptr<io::OutputStream>& output_stream) {
const auto write_status = output_stream->write(buffer);
- return io::isError(write_status) ? -1 : gsl::narrow<int64_t>(write_status);
+ return io::IoResult::from(write_status);
});
}
@@ -330,7 +331,7 @@ void ProcessSessionImpl::append(const std::shared_ptr<core::FlowFile> &flow, con
// this prevents an issue if we write, above, with zero length.
if (stream_size_before_callback > 0)
stream->seek(stream_size_before_callback);
- if (callback(stream) < 0) {
+ if (!callback(stream)) {
throw Exception(FILE_OPERATION_EXCEPTION, "Failed to process flowfile content");
}
flow->setSize(flow_file_size + (stream->size() - stream_size_before_callback));
@@ -357,7 +358,7 @@ void ProcessSessionImpl::appendBuffer(const std::shared_ptr<core::FlowFile>& flo
if (buffer.empty()) { return; }
append(flow_file, [buffer](const std::shared_ptr<io::OutputStream>& output_stream) {
const auto write_status = output_stream->write(buffer);
- return io::isError(write_status) ? -1 : gsl::narrow<int64_t>(write_status);
+ return io::IoResult::from(write_status);
});
}
@@ -390,14 +391,14 @@ int64_t ProcessSessionImpl::read(const core::FlowFile& flow_file, const io::Inpu
return 0;
}
- auto ret = callback(flow_file_stream);
- if (ret < 0) {
+ const auto callback_result = callback(flow_file_stream);
+ if (!callback_result) {
throw Exception(FILE_OPERATION_EXCEPTION, "Failed to process flowfile content");
}
if (metrics_) {
- metrics_->bytesRead() += ret;
+ metrics_->bytesRead() += *callback_result;
}
- return ret;
+ return callback_result.toI64();
} catch (const std::exception& exception) {
logger_->log_debug("Caught Exception {}", exception.what());
throw;
@@ -432,7 +433,7 @@ int64_t ProcessSessionImpl::readWrite(const std::shared_ptr<core::FlowFile> &flo
throw Exception(FILE_OPERATION_EXCEPTION, "Failed to open flowfile content for write");
}
- auto read_write_result = callback(input_stream, output_stream);
+ const auto read_write_result = callback(input_stream, output_stream);
if (!read_write_result) {
throw Exception(FILE_OPERATION_EXCEPTION, "Failed to process flowfile content");
}
@@ -440,15 +441,15 @@ int64_t ProcessSessionImpl::readWrite(const std::shared_ptr<core::FlowFile> &flo
input_stream->close();
output_stream->close();
- flow->setSize(gsl::narrow<uint64_t>(read_write_result->bytes_written));
+ flow->setSize(gsl::narrow<uint64_t>(read_write_result.bytesWritten()));
flow->setOffset(0);
flow->setResourceClaim(output_claim);
if (metrics_) {
- metrics_->bytesWritten() += read_write_result->bytes_written;
- metrics_->bytesRead() += read_write_result->bytes_read;
+ metrics_->bytesWritten() += read_write_result.bytesWritten();
+ metrics_->bytesRead() += read_write_result.bytesRead();
}
- return read_write_result->bytes_written;
+ return gsl::narrow<int64_t>(read_write_result.bytesWritten());
} catch (const std::exception& exception) {
logger_->log_debug("Caught exception during process session readWrite, type: {}, what: {}", typeid(exception).name(), exception.what());
throw;
@@ -460,14 +461,14 @@ int64_t ProcessSessionImpl::readWrite(const std::shared_ptr<core::FlowFile> &flo
detail::ReadBufferResult ProcessSessionImpl::readBuffer(const std::shared_ptr<core::FlowFile>& flow) {
detail::ReadBufferResult result;
- result.status = read(flow, [&result, this](const std::shared_ptr<io::InputStream>& input_stream) {
+ result.status = read(flow, [&result, this](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
result.buffer.resize(input_stream->size());
const auto read_status = input_stream->read(result.buffer);
if (read_status != result.buffer.size()) {
logger_->log_error("readBuffer: {} bytes were requested from the stream but {} bytes were read. Rolling back.", result.buffer.size(), read_status);
throw Exception(PROCESSOR_EXCEPTION, "Failed to read the entire FlowFile.");
}
- return gsl::narrow<int64_t>(read_status);
+ return io::IoResult::from(read_status);
});
return result;
}
diff --git a/libminifi/src/core/ProcessSessionReadCallback.cpp b/libminifi/src/core/ProcessSessionReadCallback.cpp
index 139041fc2..7f1ec0846 100644
--- a/libminifi/src/core/ProcessSessionReadCallback.cpp
+++ b/libminifi/src/core/ProcessSessionReadCallback.cpp
@@ -39,22 +39,22 @@ ProcessSessionReadCallback::ProcessSessionReadCallback(std::filesystem::path tem
}
// Copy the entire file contents to the temporary file
-int64_t ProcessSessionReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
+io::IoResult ProcessSessionReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
// Copy file contents into tmp file
write_succeeded_ = false;
size_t size = 0;
std::array<std::byte, 8192> buffer{};
do {
const auto read = stream->read(buffer);
- if (io::isError(read)) return -1;
+ if (io::isError(read)) { return io::IoResult::error(); }
if (read == 0) break;
if (!tmp_file_os_.write(reinterpret_cast<char*>(buffer.data()), gsl::narrow<std::streamsize>(read))) {
- return -1;
+ return io::IoResult::error();
}
size += read;
} while (size < stream->size());
write_succeeded_ = true;
- return gsl::narrow<int64_t>(size);
+ return io::IoResult::from(size);
}
// Renames tmp file to final destination
diff --git a/libminifi/src/minifi-c.cpp b/libminifi/src/minifi-c.cpp
index 44152eb25..dac7bbe21 100644
--- a/libminifi/src/minifi-c.cpp
+++ b/libminifi/src/minifi-c.cpp
@@ -382,8 +382,9 @@ MinifiStatus MinifiProcessSessionRead(MinifiProcessSession* session, MinifiFlowF
gsl_Assert(session != MINIFI_NULL);
gsl_Assert(flowfile != MINIFI_NULL);
try {
- reinterpret_cast<minifi::core::ProcessSession*>(session)->read(*reinterpret_cast<std::shared_ptr<minifi::core::FlowFile>*>(flowfile), [&] (auto& input_stream) -> int64_t {
- return cb(user_ctx, reinterpret_cast<MinifiInputStream*>(input_stream.get()));
+ reinterpret_cast<minifi::core::ProcessSession*>(session)->read(*reinterpret_cast<std::shared_ptr<minifi::core::FlowFile>*>(flowfile), [&] (auto& input_stream) -> minifi::io::IoResult {
+ const int64_t cb_result = cb(user_ctx, reinterpret_cast<MinifiInputStream*>(input_stream.get()));
+ return minifi::io::IoResult::from(cb_result);
});
return MINIFI_STATUS_SUCCESS;
} catch (...) {
@@ -395,8 +396,9 @@ MinifiStatus MinifiProcessSessionWrite(MinifiProcessSession* session, MinifiFlow
gsl_Assert(session != MINIFI_NULL);
gsl_Assert(ff != MINIFI_NULL);
try {
- reinterpret_cast<minifi::core::ProcessSession*>(session)->write(*reinterpret_cast<std::shared_ptr<minifi::core::FlowFile>*>(ff), [&] (auto& output_stream) -> int64_t {
- return cb(user_ctx, reinterpret_cast<MinifiOutputStream*>(output_stream.get()));
+ reinterpret_cast<minifi::core::ProcessSession*>(session)->write(*reinterpret_cast<std::shared_ptr<minifi::core::FlowFile>*>(ff), [&] (auto& output_stream) -> minifi::io::IoResult {
+ const int64_t cb_result = cb(user_ctx, reinterpret_cast<MinifiOutputStream*>(output_stream.get()));
+ return minifi::io::IoResult::from(cb_result);
});
return MINIFI_STATUS_SUCCESS;
} catch (...) {
diff --git a/libminifi/src/sitetosite/CompressionOutputStream.cpp b/libminifi/src/sitetosite/CompressionOutputStream.cpp
index 31e1e4388..d6631e55a 100644
--- a/libminifi/src/sitetosite/CompressionOutputStream.cpp
+++ b/libminifi/src/sitetosite/CompressionOutputStream.cpp
@@ -64,14 +64,14 @@ size_t CompressionOutputStream::write(const uint8_t *value, size_t len) {
size_t CompressionOutputStream::compressAndWrite() {
if (was_data_written_) {
// Write a continue byte to indicate that there is more data to follow
- auto ret = internal_stream_.write(static_cast<uint8_t>(1));
+ const auto ret = internal_stream_.write(static_cast<uint8_t>(1));
if (io::isError(ret)) {
logger_->log_error("Failed to write continue byte before compression: {}", ret);
return ret;
}
}
- auto ret = internal_stream_.write(reinterpret_cast<const uint8_t *>(SYNC_BYTES.data()), SYNC_BYTES.size());
- if (io::isError(ret)) {
+
+ if (const auto ret = internal_stream_.write(reinterpret_cast<const uint8_t *>(SYNC_BYTES.data()), SYNC_BYTES.size()); io::isError(ret)) {
logger_->log_error("Failed to write sync bytes before compression: {}", ret);
return ret;
}
@@ -79,7 +79,7 @@ size_t CompressionOutputStream::compressAndWrite() {
io::BufferStream buffer_stream;
{
io::ZlibCompressStream zlib_stream{gsl::make_not_null(&buffer_stream), io::ZlibCompressionFormat::ZLIB, Z_BEST_SPEED};
- ret = zlib_stream.write(gsl::make_span(buffer_).subspan(0, buffer_offset_));
+ const auto ret = zlib_stream.write(gsl::make_span(buffer_).subspan(0, buffer_offset_));
if (io::isError(ret)) {
logger_->log_error("Failed to write data to zlib stream: {}", ret);
return ret;
@@ -90,27 +90,26 @@ size_t CompressionOutputStream::compressAndWrite() {
}
// Write the original size of the data before compression
- ret = internal_stream_.write(gsl::narrow<uint32_t>(buffer_offset_));
- if (io::isError(ret)) {
+
+ if (const auto ret = internal_stream_.write(gsl::narrow<uint32_t>(buffer_offset_)); io::isError(ret)) {
logger_->log_error("Failed to write original size before compression: {}", ret);
return ret;
}
// Write the compressed size of the data
- ret = internal_stream_.write(gsl::narrow<uint32_t>(buffer_stream.size()));
- if (io::isError(ret)) {
+ if (const auto ret = internal_stream_.write(gsl::narrow<uint32_t>(buffer_stream.size())); io::isError(ret)) {
return ret;
}
// Write the compressed data
- ret = internal::pipe(buffer_stream, internal_stream_);
- if (io::isError(ret)) {
- return ret;
+ const io::IoResult pipe_res = internal::pipe(buffer_stream, internal_stream_);
+ if (!pipe_res) {
+ return io::STREAM_ERROR;
}
buffer_offset_ = 0;
was_data_written_ = true;
- return ret;
+ return gsl::narrow<size_t>(pipe_res.toI64());
}
void CompressionOutputStream::flush() {
diff --git a/libminifi/src/sitetosite/SiteToSiteClient.cpp b/libminifi/src/sitetosite/SiteToSiteClient.cpp
index 290097b40..c5bd28850 100644
--- a/libminifi/src/sitetosite/SiteToSiteClient.cpp
+++ b/libminifi/src/sitetosite/SiteToSiteClient.cpp
@@ -490,7 +490,7 @@ bool SiteToSiteClient::sendFlowFile(const std::shared_ptr<Transaction>& transact
return false;
}
if (flow_file.getSize() > 0) {
- auto read_result = session.read(flow_file, [&stream](const std::shared_ptr<io::InputStream>& input_stream) -> int64_t {
+ auto read_result = session.read(flow_file, [&stream](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
return internal::pipe(*input_stream, stream);
});
if (flow_file.getSize() != gsl::narrow<uint64_t>(read_result)) {
@@ -700,19 +700,19 @@ std::pair<uint64_t, uint64_t> SiteToSiteClient::readFlowFiles(const std::shared_
}
if (receive_header_result->flow_file_data_size > 0) {
- session.write(flow_file, [&receive_header_result, &stream](const std::shared_ptr<io::OutputStream>& output_stream) -> int64_t {
+ session.write(flow_file, [&receive_header_result, &stream](const std::shared_ptr<io::OutputStream>& output_stream) -> io::IoResult {
uint64_t len = receive_header_result->flow_file_data_size;
std::array<std::byte, utils::configuration::DEFAULT_BUFFER_SIZE> buffer{};
while (len > 0) {
const auto size = std::min(len, uint64_t{utils::configuration::DEFAULT_BUFFER_SIZE});
const auto ret = stream.read(std::as_writable_bytes(std::span(buffer).subspan(0, size)));
if (ret != size) {
- return -1;
+ return io::IoResult::error();
}
output_stream->write(std::span(buffer).subspan(0, size));
len -= size;
}
- return gsl::narrow<int64_t>(receive_header_result->flow_file_data_size);
+ return io::IoResult::from(receive_header_result->flow_file_data_size);
});
if (flow_file->getSize() != receive_header_result->flow_file_data_size) {
std::stringstream message;
diff --git a/libminifi/test/libtest/unit/ContentRepositoryDependentTests.h b/libminifi/test/libtest/unit/ContentRepositoryDependentTests.h
index b15bc2f47..d59b6d14d 100644
--- a/libminifi/test/libtest/unit/ContentRepositoryDependentTests.h
+++ b/libminifi/test/libtest/unit/ContentRepositoryDependentTests.h
@@ -37,16 +37,16 @@ namespace ContentRepositoryDependentTests {
struct ReadUntilItCan {
std::string value_;
- int64_t operator()(const std::shared_ptr<minifi::io::InputStream> &stream) {
+ minifi::io::IoResult operator()(const std::shared_ptr<minifi::io::InputStream> &stream) {
value_.clear();
std::array<std::byte, 1024> buffer{};
size_t bytes_read = 0;
while (true) {
const size_t read_result = stream->read(buffer);
if (minifi::io::isError(read_result))
- return -1;
+ return minifi::io::IoResult::error();
if (read_result == 0)
- return gsl::narrow<int64_t>(bytes_read);
+ return minifi::io::IoResult::from(bytes_read);
bytes_read += read_result;
const auto char_view = gsl::make_span(buffer).subspan(0, read_result).as_span<const char>();
value_.append(std::begin(char_view), std::end(char_view));
@@ -179,10 +179,10 @@ inline void testErrWrite(std::shared_ptr<core::ContentRepository> content_repo)
fixture.writeToFlowFile(flow_file, "original_content");
REQUIRE_THROWS(
- process_session.write(flow_file, [](const std::shared_ptr<minifi::io::OutputStream>& output_stream) {
+ process_session.write(flow_file, [](const std::shared_ptr<minifi::io::OutputStream>& output_stream) -> minifi::io::IoResult {
std::string str = "new_content";
output_stream->write(as_bytes(std::span(str)));
- return MinifiIoStatus::MINIFI_IO_ERROR;
+ return minifi::io::IoResult::error();
}));
fixture.transferAndCommit(flow_file);
@@ -202,9 +202,9 @@ inline void testOkWrite(std::shared_ptr<core::ContentRepository> content_repo) {
CHECK(flow_file->getSize() == 16);
- process_session.write(flow_file, [](const std::shared_ptr<minifi::io::OutputStream>& output_stream) {
+ process_session.write(flow_file, [](const std::shared_ptr<minifi::io::OutputStream>& output_stream) -> minifi::io::IoResult {
std::string str = "new_content";
- return output_stream->write(as_bytes(std::span(str)));
+ return minifi::io::IoResult::from(output_stream->write(as_bytes(std::span(str))));
});
fixture.transferAndCommit(flow_file);
@@ -222,10 +222,10 @@ inline void testCancelWrite(std::shared_ptr<core::ContentRepository> content_rep
const auto flow_file = process_session.create();
fixture.writeToFlowFile(flow_file, "original_content");
- process_session.write(flow_file, [](const std::shared_ptr<minifi::io::OutputStream>& output_stream) {
+ process_session.write(flow_file, [](const std::shared_ptr<minifi::io::OutputStream>& output_stream) -> minifi::io::IoResult {
std::string str = "new_content";
output_stream->write(as_bytes(std::span(str)));
- return MinifiIoStatus::MINIFI_IO_CANCEL;
+ return minifi::io::IoResult::cancelled();
});
fixture.transferAndCommit(flow_file);
diff --git a/libminifi/test/libtest/unit/TestBase.h b/libminifi/test/libtest/unit/TestBase.h
index e8f48832d..f3b85eb63 100644
--- a/libminifi/test/libtest/unit/TestBase.h
+++ b/libminifi/test/libtest/unit/TestBase.h
@@ -260,11 +260,11 @@ class TestPlan {
minifi::core::Processor* addProcessor(std::unique_ptr<minifi::core::Processor> processor, const std::string &name,
const minifi::core::Relationship& relationship = minifi::core::Relationship("success", "description"), bool linkToPrevious = false) {
- return addProcessor(std::move(processor), name, { relationship }, linkToPrevious);
+ return addProcessor(std::move(processor), name, std::initializer_list<minifi::core::Relationship>{ relationship }, linkToPrevious);
}
minifi::core::Processor* addProcessor(const std::string &processor_name, const std::string &name,
const minifi::core::Relationship& relationship = minifi::core::Relationship("success", "description"), bool linkToPrevious = false) {
- return addProcessor(processor_name, name, { relationship }, linkToPrevious);
+ return addProcessor(processor_name, name, std::initializer_list<minifi::core::Relationship>{ relationship }, linkToPrevious);
}
minifi::core::Processor* addProcessor(std::unique_ptr<minifi::core::Processor> processor, const std::string &name, const std::initializer_list<minifi::core::Relationship>& relationships,
bool linkToPrevious = false);
diff --git a/libminifi/test/unit/FlowFileSerializationTests.cpp b/libminifi/test/unit/FlowFileSerializationTests.cpp
index df35a0617..1f2bcf73d 100644
--- a/libminifi/test/unit/FlowFileSerializationTests.cpp
+++ b/libminifi/test/unit/FlowFileSerializationTests.cpp
@@ -47,7 +47,7 @@ TEST_CASE("Payload Serializer", "[testPayload]") {
flowFile->addAttribute("first", "one");
flowFile->addAttribute("second", "two");
- minifi::PayloadSerializer serializer([&] (const std::shared_ptr<core::FlowFile>&, const minifi::io::InputStreamCallback& cb) {
+ minifi::PayloadSerializer serializer([&] (const std::shared_ptr<core::FlowFile>&, const minifi::io::InputStreamCallback& cb) -> minifi::io::IoResult {
return cb(contentStream);
});
serializer.serialize(flowFile, result);
@@ -67,7 +67,7 @@ TEST_CASE("FFv3 Serializer", "[testFFv3]") {
flowFile->addAttribute("first", "one");
flowFile->addAttribute("second", "two");
- minifi::FlowFileV3Serializer serializer([&] (const std::shared_ptr<core::FlowFile>&, const minifi::io::InputStreamCallback& cb) {
+ minifi::FlowFileV3Serializer serializer([&] (const std::shared_ptr<core::FlowFile>&, const minifi::io::InputStreamCallback& cb) -> minifi::io::IoResult {
return cb(contentStream);
});
serializer.serialize(flowFile, result);
diff --git a/libminifi/test/unit/MetricsTests.cpp b/libminifi/test/unit/MetricsTests.cpp
index 4fe02defd..906d50321 100644
--- a/libminifi/test/unit/MetricsTests.cpp
+++ b/libminifi/test/unit/MetricsTests.cpp
@@ -273,15 +273,15 @@ class DuplicateContentProcessor : public minifi::core::ProcessorImpl {
auto flow_file_copy = session.create();
std::vector<std::byte> buffer;
- session.read(flow_file, [&](const std::shared_ptr<io::InputStream>& stream) -> int64_t {
+ session.read(flow_file, [&](const std::shared_ptr<io::InputStream>& stream) -> io::IoResult {
buffer.resize(stream->size());
- return gsl::narrow<int64_t>(stream->read(buffer));
+ return io::IoResult::from(stream->read(buffer));
});
- session.write(flow_file_copy, [&](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
- return gsl::narrow<int64_t>(stream->write(buffer));
+ session.write(flow_file_copy, [&](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
+ return io::IoResult::from(stream->write(buffer));
});
- session.append(flow_file_copy, [&](const std::shared_ptr<io::OutputStream>& stream) -> int64_t {
- return gsl::narrow<int64_t>(stream->write(buffer));
+ session.append(flow_file_copy, [&](const std::shared_ptr<io::OutputStream>& stream) -> io::IoResult {
+ return io::IoResult::from(stream->write(buffer));
});
session.transfer(flow_file_copy, Success);
session.transfer(flow_file, Original);
diff --git a/libminifi/test/unit/SiteToSiteTests.cpp b/libminifi/test/unit/SiteToSiteTests.cpp
index 90c6b740d..5b4d45c0b 100644
--- a/libminifi/test/unit/SiteToSiteTests.cpp
+++ b/libminifi/test/unit/SiteToSiteTests.cpp
@@ -250,7 +250,7 @@ TEST_CASE("TestSiteToSiteVerifySend using flowfile data", "[S2S]") {
session->write(flow_file, [&](const std::shared_ptr<io::OutputStream>& output_stream) {
std::span<const std::byte> span{reinterpret_cast<const std::byte*>(payload.data()), payload.size()};
output_stream->write(span);
- return payload.size();
+ return io::IoResult::from(span.size());
});
flow_file->updateAttribute("filename", "myfile");
flow_file->updateAttribute("flow.id", "test");
diff --git a/minifi-api/common/include/minifi-cpp/io/StreamCallback.h b/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
index 8467c0f96..7063c7146 100644
--- a/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
+++ b/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
@@ -16,24 +16,109 @@
*/
#pragma once
+#include <cinttypes>
#include <functional>
#include <memory>
-#include <optional>
+
+#include "../../minifi-api/include/minifi-c/minifi-c.h"
+#include "Stream.h"
+#include "minifi-cpp/utils/gsl.h"
+#include "utils/expected.h"
namespace org::apache::nifi::minifi::io {
class InputStream;
class OutputStream;
-struct ReadWriteResult {
- int64_t bytes_written = 0;
- int64_t bytes_read = 0;
+class IoResult {
+ public:
+ IoResult() = delete;
+ IoResult(const IoResult&) = default;
+ IoResult(IoResult&&) noexcept = default;
+ IoResult& operator=(IoResult&&) noexcept = default;
+ IoResult& operator=(const IoResult&) = default;
+
+ virtual ~IoResult() = default;
+
+ static IoResult error() { return IoResult(nonstd::make_unexpected(MINIFI_IO_ERROR)); }
+ static IoResult cancelled() { return IoResult(nonstd::make_unexpected(MINIFI_IO_CANCEL)); }
+ static IoResult zero() { return IoResult(0U); }
+
+ template <typename T>
+ static IoResult from(T val) {
+ static_assert(std::is_same_v<T, int64_t> || std::is_same_v<T, size_t> || std::is_same_v<T, uint64_t>,
+ "IoResult::from() can only be called with uint64_t, int64_t or size_t");
+
+ if constexpr (std::is_same_v<T, int64_t>) {
+ if (val < 0) {
+ return IoResult(nonstd::make_unexpected(static_cast<MinifiIoStatus>(val)));
+ }
+ } else if constexpr (std::is_same_v<T, size_t>) {
+ if (isError(val)) {
+ return IoResult::error();
+ }
+ }
+
+ // Common return path for the valid cases of both types
+ return IoResult(gsl::narrow<uint64_t>(val));
+ }
+
+ [[nodiscard]] int64_t toI64() const {
+ if (result_.has_value()) { return gsl::narrow<int64_t>(*result_); }
+ return result_.error();
+ }
+
+ [[nodiscard]] bool is_cancelled() const { return !result_ && result_.error() == MINIFI_IO_CANCEL; }
+
+ bool operator()() const { return result_.has_value(); }
+ bool operator!() const { return !result_.has_value(); }
+
+ uint64_t operator*() const { return *result_; }
+
+ nonstd::expected<uint64_t, MinifiIoStatus> inner() const { return result_; }
+
+ private:
+ explicit IoResult(nonstd::expected<uint64_t, MinifiIoStatus> result) : result_(std::move(result)) {}
+
+ nonstd::expected<uint64_t, MinifiIoStatus> result_;
+};
+
+class ReadWriteResult {
+ public:
+ ReadWriteResult() = delete;
+ ReadWriteResult(const ReadWriteResult&) = default;
+ ReadWriteResult(ReadWriteResult&&) noexcept = default;
+ ReadWriteResult& operator=(ReadWriteResult&&) noexcept = default;
+ ReadWriteResult& operator=(const ReadWriteResult&) = default;
+
+ ReadWriteResult(const uint64_t bytes_read, const uint64_t bytes_written)
+ : result_(ReadWrite{.bytes_read = bytes_read, .bytes_written = bytes_written}) {}
+
+ static ReadWriteResult zero() { return ReadWriteResult(ReadWrite{.bytes_read = 0, .bytes_written = 0}); };
+ static ReadWriteResult error() { return ReadWriteResult(nonstd::make_unexpected(MINIFI_IO_ERROR)); }
+ static ReadWriteResult cancelled() { return ReadWriteResult(nonstd::make_unexpected(MINIFI_IO_CANCEL)); }
+
+ virtual ~ReadWriteResult() = default;
+
+ bool operator()() const { return result_.has_value(); }
+ bool operator!() const { return !result_.has_value(); }
+
+ [[nodiscard]] uint64_t bytesWritten() const { return result_->bytes_written; }
+ [[nodiscard]] uint64_t bytesRead() const { return result_->bytes_read; }
+
+ private:
+ struct ReadWrite {
+ uint64_t bytes_read;
+ uint64_t bytes_written;
+ };
+ explicit ReadWriteResult(nonstd::expected<ReadWrite, MinifiIoStatus> result) : result_(std::move(result)) {}
+
+ nonstd::expected<ReadWrite, MinifiIoStatus> result_;
};
-// FlowFile IO Callback functions for input and output
-// throw exception for error
-using InputStreamCallback = std::function<int64_t(const std::shared_ptr<InputStream>& input_stream)>;
-using OutputStreamCallback = std::function<int64_t(const std::shared_ptr<OutputStream>& output_stream)>;
-using InputOutputStreamCallback = std::function<std::optional<ReadWriteResult>(const std::shared_ptr<InputStream>& input_stream, const std::shared_ptr<OutputStream>& output_stream)>;
+using OutputStreamCallback = std::function<IoResult(const std::shared_ptr<OutputStream>& output_stream)>;
+using InputStreamCallback = std::function<IoResult(const std::shared_ptr<InputStream>& input_stream)>;
+using InputOutputStreamCallback =
+ std::function<ReadWriteResult(const std::shared_ptr<InputStream>& input_stream, const std::shared_ptr<OutputStream>& output_stream)>;
} // namespace org::apache::nifi::minifi::io
diff --git a/minifi-api/include/minifi-cpp/core/Property.h b/minifi-api/include/minifi-cpp/core/Property.h
index e4fb1f986..8d1225494 100644
--- a/minifi-api/include/minifi-cpp/core/Property.h
+++ b/minifi-api/include/minifi-cpp/core/Property.h
@@ -48,7 +48,7 @@ class Property final {
Property(const PropertyReference &);
- virtual ~Property() = default;
+ ~Property() = default;
void setTransient() { is_transient_ = true; }
(nifi-minifi-cpp) 02/02: MINIFICPP-2768 use gcc-toolset-14 on rocky
Posted by fg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
fgerlits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit f34d739bc5ca4f898310f2354c8ff3a2317aa1d7
Author: Martin Zink <ma...@apache.org>
AuthorDate: Fri Apr 24 12:36:31 2026 +0200
MINIFICPP-2768 use gcc-toolset-14 on rocky
compiler support changes: gcc 13, clang 17
removed: expected-lite and other gcc12 workarounds
Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
Closes #2155
---
.github/workflows/ci.yml | 4 +-
.github/workflows/compiler-support.yml | 8 +-
CMakeLists.txt | 10 -
LICENSE | 28 -
NOTICE | 1 -
README.md | 4 +-
cmake/Bustache.cmake | 7 +-
cmake/Coroutines.cmake | 22 -
cmake/Couchbase.cmake | 13 +-
cmake/CppVersion.cmake | 8 +-
cmake/ExpectedLite.cmake | 28 -
cmake/Protobuf.cmake | 4 +-
cmake/fmt.cmake | 4 +-
controller/Controller.cpp | 12 +-
controller/Controller.h | 2 +-
controller/tests/ControllerTests.cpp | 2 +-
core-framework/CMakeLists.txt | 5 +-
core-framework/common/CMakeLists.txt | 5 +-
.../common/include/utils/OptionalUtils.h | 6 +-
core-framework/common/include/utils/ParsingUtils.h | 44 +-
core-framework/common/include/utils/StringUtils.h | 8 +-
.../utils/detail/MonadicOperationWrappers.h | 4 +-
core-framework/common/include/utils/expected.h | 62 +-
core-framework/common/src/utils/ParsingUtils.cpp | 38 +-
core-framework/common/src/utils/StringUtils.cpp | 4 +-
.../include/core/ConfigurableComponentImpl.h | 20 +-
.../core/controller/ControllerServiceBase.h | 4 +-
core-framework/include/utils/file/FileUtils.h | 6 +-
core-framework/include/utils/file/PathUtils.h | 12 +-
core-framework/include/utils/net/DNS.h | 6 +-
.../src/core/ConfigurableComponentImpl.cpp | 42 +-
core-framework/src/core/Property.cpp | 18 +-
core-framework/src/utils/Cron.cpp | 12 +-
core-framework/src/utils/file/FileUtils.cpp | 4 +-
core-framework/src/utils/net/DNS.cpp | 10 +-
docker/rockylinux/Dockerfile | 9 +-
extension-framework/CMakeLists.txt | 5 +-
.../include/api/core/ProcessContext.h | 6 +-
.../cpp-extension-lib/src/core/ProcessContext.cpp | 4 +-
extensions/aws/processors/PutKinesisStream.cpp | 14 +-
extensions/aws/processors/PutKinesisStream.h | 4 +-
extensions/civetweb/processors/ListenHTTP.h | 4 +-
extensions/couchbase/CMakeLists.txt | 15 +-
.../controllerservices/CouchbaseClusterService.cpp | 26 +-
.../controllerservices/CouchbaseClusterService.h | 12 +-
extensions/couchbase/tests/CMakeLists.txt | 4 +
.../couchbase/tests/MockCouchbaseClusterService.h | 8 +-
extensions/elasticsearch/PostElasticsearch.cpp | 24 +-
extensions/grafana-loki/PushGrafanaLoki.h | 2 +-
extensions/grafana-loki/PushGrafanaLokiGrpc.cpp | 6 +-
extensions/grafana-loki/PushGrafanaLokiGrpc.h | 2 +-
extensions/grafana-loki/PushGrafanaLokiREST.cpp | 6 +-
extensions/grafana-loki/PushGrafanaLokiREST.h | 2 +-
extensions/kubernetes/MetricsApi.cpp | 4 +-
extensions/kubernetes/MetricsApi.h | 2 +-
extensions/kubernetes/MetricsFilter.cpp | 8 +-
extensions/kubernetes/MetricsFilter.h | 2 +-
.../llamacpp/processors/DefaultLlamaContext.cpp | 8 +-
.../llamacpp/processors/DefaultLlamaContext.h | 2 +-
extensions/llamacpp/processors/LlamaContext.h | 2 +-
.../llamacpp/tests/RunLlamaCppInferenceTests.cpp | 4 +-
extensions/mqtt/processors/PublishMQTT.cpp | 2 +-
extensions/opc/include/putopc.h | 2 +-
extensions/opc/src/putopc.cpp | 24 +-
extensions/python/types/PyRecordSetReader.cpp | 2 +-
extensions/rocksdb-repos/FlowFileLoader.cpp | 2 +-
extensions/smb/SmbConnectionControllerService.cpp | 8 +-
extensions/smb/SmbConnectionControllerService.h | 4 +-
.../utils/MockSmbConnectionControllerService.h | 6 +-
extensions/smb/tests/utils/TempSmbShare.h | 4 +-
extensions/sql/CMakeLists.txt | 2 +-
extensions/standard-processors/CMakeLists.txt | 2 -
.../controllers/JsonTreeReader.cpp | 24 +-
.../controllers/JsonTreeReader.h | 2 +-
.../standard-processors/controllers/XMLReader.cpp | 4 +-
.../standard-processors/controllers/XMLReader.h | 2 +-
.../standard-processors/modbus/FetchModbusTcp.cpp | 28 +-
.../standard-processors/modbus/FetchModbusTcp.h | 6 +-
.../modbus/ReadModbusFunctions.cpp | 14 +-
.../modbus/ReadModbusFunctions.h | 10 +-
.../processors/ConvertRecord.cpp | 5 +-
.../standard-processors/processors/InvokeHTTP.cpp | 6 +-
.../standard-processors/processors/InvokeHTTP.h | 2 +-
.../standard-processors/processors/PutUDP.cpp | 8 +-
.../standard-processors/processors/SplitRecord.cpp | 7 +-
.../standard-processors/processors/SplitRecord.h | 2 +-
.../standard-processors/processors/SplitText.cpp | 22 +-
.../standard-processors/tests/CMakeLists.txt | 2 -
.../tests/integration/InvokeHTTPTests.cpp | 4 +-
extensions/standard-processors/utils/JoltUtils.cpp | 88 +-
extensions/standard-processors/utils/JoltUtils.h | 14 +-
.../windows-event-log/ConsumeWindowsEventLog.cpp | 16 +-
.../windows-event-log/ConsumeWindowsEventLog.h | 4 +-
extensions/windows-event-log/wel/Bookmark.cpp | 10 +-
extensions/windows-event-log/wel/Bookmark.h | 2 +-
.../windows-event-log/wel/WindowsEventLog.cpp | 8 +-
extensions/windows-event-log/wel/WindowsEventLog.h | 2 +-
libminifi/CMakeLists.txt | 5 +-
libminifi/include/FlowController.h | 4 +-
libminifi/include/SchedulingAgent.h | 4 +-
libminifi/include/c2/C2Utils.h | 2 +-
libminifi/include/c2/FlowStatusBuilder.h | 8 +-
libminifi/include/core/ProcessContextImpl.h | 16 +-
libminifi/include/core/ProcessSession.h | 2 +-
.../include/core/controller/ControllerService.h | 8 +-
libminifi/include/core/flow/Node.h | 2 +-
libminifi/include/core/state/UpdateController.h | 2 +-
.../include/core/state/nodes/ResponseNodeLoader.h | 2 +-
libminifi/include/utils/file/AssetManager.h | 4 +-
libminifi/src/FlowController.cpp | 12 +-
libminifi/src/SchedulingAgent.cpp | 12 +-
libminifi/src/c2/C2Agent.cpp | 18 +-
libminifi/src/c2/C2Utils.cpp | 12 +-
libminifi/src/c2/FlowStatusBuilder.cpp | 26 +-
libminifi/src/core/ProcessContextImpl.cpp | 22 +-
libminifi/src/core/ProcessSession.cpp | 4 +-
.../src/core/state/nodes/ResponseNodeLoader.cpp | 4 +-
libminifi/src/sitetosite/SiteToSiteClient.cpp | 20 +-
libminifi/src/utils/file/AssetManager.cpp | 6 +-
libminifi/test/libtest/unit/ProvenanceTestHelper.h | 2 +
libminifi/test/unit/ExpectedTest.cpp | 177 +-
libminifi/test/unit/OptionalTest.cpp | 8 +-
libminifi/test/unit/ParsingUtilsTests.cpp | 22 +-
.../common/include/minifi-cpp/io/StreamCallback.h | 20 +-
.../minifi-cpp/controllers/RecordSetReader.h | 2 +-
.../minifi-cpp/core/ConfigurableComponent.h | 20 +-
.../include/minifi-cpp/core/ProcessContext.h | 26 +-
.../include/minifi-cpp/core/ProcessSession.h | 2 +-
minifi-api/include/minifi-cpp/core/Property.h | 8 +-
.../core/controller/ControllerServiceContext.h | 4 +-
thirdparty/bustache/remove_installs.patch | 49 +
thirdparty/couchbase/remove-debug-symbols.patch | 12 -
thirdparty/couchbase/remove-thirdparty-1.0.2.patch | 172 --
thirdparty/couchbase/remove-thirdparty.patch | 218 +-
.../couchbase/use_fmt_instead_of_spdlog_fmt.patch | 2641 ++++++++++++++++++++
.../libstdc++/avoid_bogus_Wrestrict_PR105651.patch | 32 -
136 files changed, 3437 insertions(+), 1175 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 086794bf3..71a4abce3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,8 +12,8 @@ env:
CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/.ccache
jobs:
macos_xcode:
- name: "macOS 14 aarch64"
- runs-on: macos-14
+ name: "macOS 26 aarch64"
+ runs-on: macos-26
timeout-minutes: 240
env:
MACOS_MINIFI_OPTIONS: >-
diff --git a/.github/workflows/compiler-support.yml b/.github/workflows/compiler-support.yml
index 555aa7a4e..009f318f8 100644
--- a/.github/workflows/compiler-support.yml
+++ b/.github/workflows/compiler-support.yml
@@ -14,8 +14,8 @@ jobs:
strategy:
fail-fast: false
matrix:
- platform: [ { id: gcc-12, base_image: gcc:12-bookworm },
- { id: gcc-15, base_image: gcc:15-bookworm } ]
+ platform: [ { id: gcc-13, base_image: gcc:13-bookworm },
+ { id: gcc-15, base_image: gcc:15-trixie } ]
runs-on: ubuntu-24.04
steps:
@@ -36,8 +36,8 @@ jobs:
strategy:
fail-fast: false
matrix:
- platform: [ { id: clang-16, base_image: silkeh/clang:16-bookworm },
- { id: clang-20, base_image: silkeh/clang:20-bookworm } ]
+ platform: [ { id: clang-18, base_image: silkeh/clang:18-bookworm },
+ { id: clang-21, base_image: silkeh/clang:21-trixie } ]
runs-on: ubuntu-24.04
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4bc5ce888..96257bf09 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -297,9 +297,6 @@ add_library(RapidJSON INTERFACE)
target_include_directories(RapidJSON SYSTEM INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/rapidjson-48fbd8cd202ca54031fe799db2ad44ffa8e77c13/include")
target_compile_definitions(RapidJSON INTERFACE RAPIDJSON_HAS_STDSTRING)
-include(Coroutines)
-enable_coroutines()
-
# gsl-lite
include(GslLite)
@@ -320,9 +317,6 @@ target_compile_definitions(gsl-lite INTERFACE ${GslDefinitions})
# date
include(Date)
-# expected-lite
-include(ExpectedLite)
-
# magic_enum
include(MagicEnum)
@@ -338,10 +332,6 @@ else()
list(APPEND MINIFI_CPP_COMPILE_OPTIONS -Werror)
endif()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.4)
- # -Wrestrict may cause build failure in < GCC 12.4 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104336
- list(APPEND MINIFI_CPP_COMPILE_OPTIONS -Wno-error=restrict)
- endif()
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15)
list(APPEND MINIFI_CPP_COMPILE_OPTIONS -Wno-maybe-uninitialized)
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118634
diff --git a/LICENSE b/LICENSE
index 9e8c591ec..520e0ea56 100644
--- a/LICENSE
+++ b/LICENSE
@@ -2758,34 +2758,6 @@ SGI C++ Standard Template Library license
--------------------------------------------------------------------------
-This project bundles 'expected-lite' under the Boost Software License 1.0
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------
-
This project bundles 'asio' under the Boost Software License 1.0
Boost Software License - Version 1.0 - August 17th, 2003
diff --git a/NOTICE b/NOTICE
index 43e689722..0ceed4b2a 100644
--- a/NOTICE
+++ b/NOTICE
@@ -51,7 +51,6 @@ This software includes third party software subject to the following copyrights:
- IANA timezone database - public domain
- date (HowardHinnant/date) - notices below
- range-v3 - Eric Niebler and other contributors
-- expected-lite - Copyright (C) 2016-2020 Martin Moene.
- asio - Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
- TartanLlama/expected - public domain, thanks to Sy Brand
- libyaml - Copyright (c) 2006-2016 Kirill Simonov, Copyright (c) 2017-2020 Ingy döt Net
diff --git a/README.md b/README.md
index fe9b9ca6e..422c221db 100644
--- a/README.md
+++ b/README.md
@@ -123,8 +123,8 @@ Communicating with Apache NiFi can be done using the Site-to-Site protocol. More
#### Utilities
* CMake 3.24 or greater
* Compiler
- * g++ 12 or greater
- * clang 16 or greater
+ * g++ 13 or greater
+ * clang 18 or greater
* msvc 19.33 or greater
* bison 3.0.x+ (3.2 has been shown to fail builds)
* flex 2.6 or greater
diff --git a/cmake/Bustache.cmake b/cmake/Bustache.cmake
index a881a90be..d33796da8 100644
--- a/cmake/Bustache.cmake
+++ b/cmake/Bustache.cmake
@@ -24,14 +24,17 @@ set(BUSTACHE_USE_FMT ON CACHE STRING "" FORCE)
set(PATCH_FILE_1 "${CMAKE_SOURCE_DIR}/thirdparty/bustache/add-append.patch")
set(PATCH_FILE_2 "${CMAKE_SOURCE_DIR}/thirdparty/bustache/fix-deprecated-literal-operator.patch")
+set(PATCH_FILE_3 "${CMAKE_SOURCE_DIR}/thirdparty/bustache/remove_installs.patch")
set(PC ${Bash_EXECUTABLE} -c "set -x &&\
(\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_1}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_1}\\\") &&\
- (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_2}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_2}\\\")")
+ (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_2}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_2}\\\") &&\
+ (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_3}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_3}\\\")")
+
FetchContent_Declare(Bustache
GIT_REPOSITORY https://github.com/jamboree/bustache.git
- GIT_TAG 47096caa8e1f9f7ebe34e3a022dbb822c174011d
+ GIT_TAG af10816ce3d2ff8577fd27caa2c1005c01d8069b
PATCH_COMMAND "${PC}"
SYSTEM
)
diff --git a/cmake/Coroutines.cmake b/cmake/Coroutines.cmake
deleted file mode 100644
index e027551e5..000000000
--- a/cmake/Coroutines.cmake
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-function(enable_coroutines)
- if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcoroutines" PARENT_SCOPE)
- endif()
-endfunction(enable_coroutines)
diff --git a/cmake/Couchbase.cmake b/cmake/Couchbase.cmake
index 68bab1c6a..2601e8747 100644
--- a/cmake/Couchbase.cmake
+++ b/cmake/Couchbase.cmake
@@ -30,9 +30,14 @@ set(COUCHBASE_CXX_CLIENT_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
set(COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL ON CACHE BOOL "" FORCE)
set(COUCHBASE_CXX_CLIENT_INSTALL OFF CACHE BOOL "" FORCE)
+# Fix for MSVC + ASIO C++20/23 concept evaluation bugs
+if(MSVC)
+ add_compile_definitions(ASIO_DISABLE_CONCEPTS)
+endif()
+
set(PATCH_FILE_1 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/remove-thirdparty.patch")
-set(PATCH_FILE_2 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/remove-debug-symbols.patch")
-set(PATCH_FILE_3 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/c++23_fixes.patch")
+set(PATCH_FILE_2 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/c++23_fixes.patch")
+set(PATCH_FILE_3 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch")
set(PC ${Bash_EXECUTABLE} -c "set -x &&\
(\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_1}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_1}\\\") &&\
@@ -40,8 +45,8 @@ set(PC ${Bash_EXECUTABLE} -c "set -x &&\
(\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_3}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_3}\\\")")
FetchContent_Declare(couchbase-cxx-client
- URL https://github.com/couchbase/couchbase-cxx-client/releases/download/1.1.0/couchbase-cxx-client-1.1.0.tar.gz
- URL_HASH SHA256=bd3a7f1492e242b239acd965eed4472cecb0319d40d05480f97cdec705960ba0
+ URL https://github.com/couchbase/couchbase-cxx-client/archive/refs/tags/1.3.1.tar.gz
+ URL_HASH SHA256=9c497d8ba6f3e4a12376826ae1c172356e16190bb44584f087d7d1a81278dc0f
PATCH_COMMAND "${PC}"
SYSTEM
)
diff --git a/cmake/CppVersion.cmake b/cmake/CppVersion.cmake
index 8b6edee60..613fed759 100644
--- a/cmake/CppVersion.cmake
+++ b/cmake/CppVersion.cmake
@@ -21,21 +21,17 @@ function(set_cpp_version)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/std:c++latest>)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/permissive->)
else()
- message(STATUS "The Visual Studio C++ compiler ${CMAKE_CXX_COMPILER} is not supported. Please use Visual Studio 2022 or newer.")
+ message(FATAL_ERROR "The Visual Studio C++ compiler ${CMAKE_CXX_COMPILER} is not supported. Please use Visual Studio 2022 or newer.")
endif()
set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
else()
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++23" COMPILER_SUPPORTS_CXX23)
- CHECK_CXX_COMPILER_FLAG("-std=c++2b" COMPILER_SUPPORTS_CXX2B)
if(COMPILER_SUPPORTS_CXX23)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++23" PARENT_SCOPE)
set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
- elseif(COMPILER_SUPPORTS_CXX2B)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++2b" PARENT_SCOPE)
- set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
else()
- message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no support for -std=c++23 or -std=c++2b. Please use a more recent C++ compiler version.")
+ message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no support for -std=c++23. Please use a more recent C++ compiler version.")
endif()
endif()
diff --git a/cmake/ExpectedLite.cmake b/cmake/ExpectedLite.cmake
deleted file mode 100644
index 4ee997a97..000000000
--- a/cmake/ExpectedLite.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-include(FetchContent)
-
-FetchContent_Declare(expected-lite
- URL https://github.com/martinmoene/expected-lite/archive/refs/tags/v0.9.0.tar.gz
- URL_HASH SHA256=e1b3ac812295ef8512c015d8271204105a71957323f8ab4e75f6856d71b8868d
- SYSTEM
-)
-
-# Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119714
-FetchContent_MakeAvailable(expected-lite)
-target_compile_definitions(expected-lite INTERFACE nsel_CONFIG_SELECT_EXPECTED=nsel_EXPECTED_NONSTD)
diff --git a/cmake/Protobuf.cmake b/cmake/Protobuf.cmake
index eb0a73565..ee5523cd0 100644
--- a/cmake/Protobuf.cmake
+++ b/cmake/Protobuf.cmake
@@ -20,8 +20,8 @@ set(protobuf_BUILD_TESTS OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
protobuf
- URL https://github.com/protocolbuffers/protobuf/archive/refs/tags/v31.1.tar.gz
- URL_HASH SHA256=c3a0a9ece8932e31c3b736e2db18b1c42e7070cd9b881388b26d01aa71e24ca2
+ URL https://github.com/protocolbuffers/protobuf/archive/refs/tags/v34.1.tar.gz
+ URL_HASH SHA256=a83103b7ed3afaeedee9a212c8f65825444f58144f5e075b73c83f2b4ff27b62
)
FetchContent_MakeAvailable(protobuf)
diff --git a/cmake/fmt.cmake b/cmake/fmt.cmake
index 0777eaa5d..910e69bef 100644
--- a/cmake/fmt.cmake
+++ b/cmake/fmt.cmake
@@ -19,8 +19,8 @@
include(FetchContent)
FetchContent_Declare(Fmt
- URL https://github.com/fmtlib/fmt/archive/refs/tags/11.2.0.tar.gz
- URL_HASH SHA256=bc23066d87ab3168f27cef3e97d545fa63314f5c79df5ea444d41d56f962c6af
+ URL https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz
+ URL_HASH SHA256=ea7de4299689e12b6dddd392f9896f08fb0777ac7168897a244a6d6085043fea
OVERRIDE_FIND_PACKAGE
SYSTEM
)
diff --git a/controller/Controller.cpp b/controller/Controller.cpp
index 293979ad7..03c5afd40 100644
--- a/controller/Controller.cpp
+++ b/controller/Controller.cpp
@@ -228,31 +228,31 @@ bool getJstacks(const utils::net::SocketData& socket_data, std::ostream &out) {
return true;
}
-nonstd::expected<void, std::string> getDebugBundle(const utils::net::SocketData& socket_data, const std::filesystem::path& target_dir) {
+std::expected<void, std::string> getDebugBundle(const utils::net::SocketData& socket_data, const std::filesystem::path& target_dir) {
const auto connection_stream = std::make_unique<utils::net::AsioSocketConnection>(socket_data);
if (connection_stream->initialize() < 0) {
- return nonstd::make_unexpected("Could not connect to remote host " + socket_data.host + ":" + std::to_string(socket_data.port));
+ return std::unexpected{"Could not connect to remote host " + socket_data.host + ":" + std::to_string(socket_data.port)};
}
io::BufferStream buffer;
auto op = static_cast<uint8_t>(c2::Operation::transfer);
buffer.write(&op, 1);
buffer.write("debug");
if (io::isError(connection_stream->write(buffer.getBuffer()))) {
- return nonstd::make_unexpected("Could not write to connection " + socket_data.host + ":" + std::to_string(socket_data.port));
+ return std::unexpected{"Could not write to connection " + socket_data.host + ":" + std::to_string(socket_data.port)};
}
connection_stream->read(op);
size_t bundle_size = 0;
connection_stream->read(bundle_size);
if (bundle_size == 0) {
- return nonstd::make_unexpected("Failed to retrieve debug bundle");
+ return std::unexpected{"Failed to retrieve debug bundle"};
}
if (std::filesystem::exists(target_dir) && !std::filesystem::is_directory(target_dir)) {
- return nonstd::make_unexpected("Object specified as the target directory already exists and it is not a directory");
+ return std::unexpected{"Object specified as the target directory already exists and it is not a directory"};
}
if (!std::filesystem::exists(target_dir) && utils::file::create_dir(target_dir) != 0) {
- return nonstd::make_unexpected("Failed to create target directory: " + target_dir.string());
+ return std::unexpected{"Failed to create target directory: " + target_dir.string()};
}
std::ofstream out_file(target_dir / "debug.tar.gz");
diff --git a/controller/Controller.h b/controller/Controller.h
index 0358f2a3c..e2dcd7e86 100644
--- a/controller/Controller.h
+++ b/controller/Controller.h
@@ -37,6 +37,6 @@ bool listConnections(const utils::net::SocketData& socket_data, std::ostream &ou
bool printManifest(const utils::net::SocketData& socket_data, std::ostream &out);
bool getJstacks(const utils::net::SocketData& socket_data, std::ostream &out);
bool getFlowStatus(const utils::net::SocketData& socket_data, const std::string& status_query, std::ostream &out);
-nonstd::expected<void, std::string> getDebugBundle(const utils::net::SocketData& socket_data, const std::filesystem::path& target_dir);
+std::expected<void, std::string> getDebugBundle(const utils::net::SocketData& socket_data, const std::filesystem::path& target_dir);
} // namespace org::apache::nifi::minifi::controller
diff --git a/controller/tests/ControllerTests.cpp b/controller/tests/ControllerTests.cpp
index a2376de68..6955a13d0 100644
--- a/controller/tests/ControllerTests.cpp
+++ b/controller/tests/ControllerTests.cpp
@@ -164,7 +164,7 @@ class TestUpdateSink : public minifi::state::StateMonitor {
return {};
}
- nonstd::expected<void, std::string> applyUpdate(const std::string& /*source*/, const std::string& /*configuration*/, bool /*persist*/ = false,
+ std::expected<void, std::string> applyUpdate(const std::string& /*source*/, const std::string& /*configuration*/, bool /*persist*/ = false,
const std::optional<std::string>& /*flow_id*/ = std::nullopt) override {
update_calls++;
return {};
diff --git a/core-framework/CMakeLists.txt b/core-framework/CMakeLists.txt
index 757d087a8..3dc5a77c5 100644
--- a/core-framework/CMakeLists.txt
+++ b/core-framework/CMakeLists.txt
@@ -15,10 +15,7 @@ file(GLOB SOURCES
add_minifi_library(minifi-core-framework STATIC ${SOURCES})
target_include_directories(minifi-core-framework PUBLIC include)
-target_link_libraries(minifi-core-framework PUBLIC minifi-api minifi-core-framework-common ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite libsodium range-v3 expected-lite date::date date::tz asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
+target_link_libraries(minifi-core-framework PUBLIC minifi-api minifi-core-framework-common ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite libsodium range-v3 date::date date::tz asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
if(NOT WIN32)
target_link_libraries(minifi-core-framework PUBLIC OSSP::libuuid++)
endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
- target_link_libraries(minifi-core-framework PUBLIC stdc++fs)
-endif()
diff --git a/core-framework/common/CMakeLists.txt b/core-framework/common/CMakeLists.txt
index 928256c6b..45ad12697 100644
--- a/core-framework/common/CMakeLists.txt
+++ b/core-framework/common/CMakeLists.txt
@@ -13,10 +13,7 @@ file(GLOB SOURCES
add_minifi_library(minifi-core-framework-common STATIC ${SOURCES})
target_include_directories(minifi-core-framework-common PUBLIC include)
-target_link_libraries(minifi-core-framework-common PUBLIC minifi-api-common ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite libsodium range-v3 expected-lite date::date date::tz asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
+target_link_libraries(minifi-core-framework-common PUBLIC minifi-api-common ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite libsodium range-v3 date::date date::tz asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
if(NOT WIN32)
target_link_libraries(minifi-core-framework-common PUBLIC OSSP::libuuid++)
endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
- target_link_libraries(minifi-core-framework-common PUBLIC stdc++fs)
-endif()
diff --git a/core-framework/common/include/utils/OptionalUtils.h b/core-framework/common/include/utils/OptionalUtils.h
index 7289b6457..f3963ac83 100644
--- a/core-framework/common/include/utils/OptionalUtils.h
+++ b/core-framework/common/include/utils/OptionalUtils.h
@@ -22,8 +22,8 @@
#include <type_traits>
#include <utility>
#include <iostream>
+#include <expected>
-#include "nonstd/expected.hpp"
#include "utils/GeneralUtils.h"
#include "minifi-cpp/utils/gsl.h"
#include "utils/detail/MonadicOperationWrappers.h"
@@ -130,9 +130,9 @@ auto operator|(std::optional<SourceType> o, filter_wrapper<F> f) noexcept(noexce
}
template<typename T, typename E>
-nonstd::expected<T, E> operator|(std::optional<T> object, to_expected_wrapper<E> e) {
+std::expected<T, E> operator|(std::optional<T> object, to_expected_wrapper<E> e) {
if (!object) {
- return nonstd::make_unexpected(e.error);
+ return std::unexpected{e.error};
}
return std::move(*object);
}
diff --git a/core-framework/common/include/utils/ParsingUtils.h b/core-framework/common/include/utils/ParsingUtils.h
index 34307b0ff..33236eda8 100644
--- a/core-framework/common/include/utils/ParsingUtils.h
+++ b/core-framework/common/include/utils/ParsingUtils.h
@@ -23,69 +23,69 @@
#include "fmt/format.h"
namespace org::apache::nifi::minifi::parsing {
-nonstd::expected<bool, std::error_code> parseBool(std::string_view input);
+std::expected<bool, std::error_code> parseBool(std::string_view input);
template<std::integral T>
-nonstd::expected<T, std::error_code> parseIntegralMinMax(std::string_view input, T minimum, T maximum);
+std::expected<T, std::error_code> parseIntegralMinMax(std::string_view input, T minimum, T maximum);
template<std::integral T>
-nonstd::expected<T, std::error_code> parseIntegral(std::string_view input);
+std::expected<T, std::error_code> parseIntegral(std::string_view input);
template<class TargetDuration>
-nonstd::expected<TargetDuration, std::error_code> parseDurationMinMax(std::string_view input, TargetDuration minimum, TargetDuration maximum);
+std::expected<TargetDuration, std::error_code> parseDurationMinMax(std::string_view input, TargetDuration minimum, TargetDuration maximum);
template<class TargetDuration = std::chrono::milliseconds>
-nonstd::expected<TargetDuration, std::error_code> parseDuration(std::string_view input);
+std::expected<TargetDuration, std::error_code> parseDuration(std::string_view input);
-nonstd::expected<uint64_t, std::error_code> parseDataSizeMinMax(std::string_view input, uint64_t minimum, uint64_t maximum);
-nonstd::expected<uint64_t, std::error_code> parseDataSize(std::string_view input);
+std::expected<uint64_t, std::error_code> parseDataSizeMinMax(std::string_view input, uint64_t minimum, uint64_t maximum);
+std::expected<uint64_t, std::error_code> parseDataSize(std::string_view input);
-nonstd::expected<uint32_t, std::error_code> parseUnixOctalPermissions(std::string_view input);
+std::expected<uint32_t, std::error_code> parseUnixOctalPermissions(std::string_view input);
-nonstd::expected<float, std::error_code> parseFloat(std::string_view input);
+std::expected<float, std::error_code> parseFloat(std::string_view input);
template<std::integral T>
-nonstd::expected<T, std::error_code> parseIntegralMinMax(const std::string_view input, const T minimum, const T maximum) {
+std::expected<T, std::error_code> parseIntegralMinMax(const std::string_view input, const T minimum, const T maximum) {
const auto trimmed_input = utils::string::trim(input);
T t{};
const auto [ptr, ec] = std::from_chars(trimmed_input.data(), trimmed_input.data() + trimmed_input.size(), t);
if (ec != std::errc()) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
if (ptr != trimmed_input.data() + trimmed_input.size()) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
- if (t < minimum) { return nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum); }
- if (t > maximum) { return nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum); }
+ if (t < minimum) { return std::unexpected{core::ParsingErrorCode::SmallerThanMinimum}; }
+ if (t > maximum) { return std::unexpected{core::ParsingErrorCode::LargerThanMaximum}; }
return t;
}
template<std::integral T>
-nonstd::expected<T, std::error_code> parseIntegral(const std::string_view input) {
+std::expected<T, std::error_code> parseIntegral(const std::string_view input) {
return parseIntegralMinMax<T>(input, std::numeric_limits<T>::min(), std::numeric_limits<T>::max());
}
template<class TargetDuration>
-nonstd::expected<TargetDuration, std::error_code> parseDurationMinMax(const std::string_view input, const TargetDuration minimum, const TargetDuration maximum) {
+std::expected<TargetDuration, std::error_code> parseDurationMinMax(const std::string_view input, const TargetDuration minimum, const TargetDuration maximum) {
auto duration = utils::timeutils::StringToDuration<std::chrono::milliseconds>(input);
- if (!duration.has_value()) { return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError); }
+ if (!duration.has_value()) { return std::unexpected{core::ParsingErrorCode::GeneralParsingError}; }
- if (*duration < minimum) { return nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum); }
- if (*duration > maximum) { return nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum); }
+ if (*duration < minimum) { return std::unexpected{core::ParsingErrorCode::SmallerThanMinimum}; }
+ if (*duration > maximum) { return std::unexpected{core::ParsingErrorCode::LargerThanMaximum}; }
return *duration;
}
template<class TargetDuration>
-nonstd::expected<TargetDuration, std::error_code> parseDuration(const std::string_view input) {
+std::expected<TargetDuration, std::error_code> parseDuration(const std::string_view input) {
return parseDurationMinMax<TargetDuration>(input, TargetDuration::min(), TargetDuration::max());
}
template<typename T>
-nonstd::expected<T, std::error_code> parseEnum(const std::string_view input) {
+std::expected<T, std::error_code> parseEnum(const std::string_view input) {
std::optional<T> result = magic_enum::enum_cast<T>(input);
if (!result) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
return *result;
}
diff --git a/core-framework/common/include/utils/StringUtils.h b/core-framework/common/include/utils/StringUtils.h
index be9091a91..679f83801 100644
--- a/core-framework/common/include/utils/StringUtils.h
+++ b/core-framework/common/include/utils/StringUtils.h
@@ -430,7 +430,7 @@ bool matchesSequence(std::string_view str, const std::vector<std::string>& patte
bool splitToValueAndUnit(std::string_view input, int64_t& value, std::string& unit);
-nonstd::expected<std::optional<char>, std::error_code> parseCharacter(std::string_view input);
+std::expected<std::optional<char>, std::error_code> parseCharacter(std::string_view input);
std::string replaceEscapedCharacters(std::string_view input);
@@ -438,14 +438,14 @@ std::string replaceEscapedCharacters(std::string_view input);
template <typename T> concept arithmetic = std::integral<T> || std::floating_point<T>;
template<arithmetic T>
-nonstd::expected<T, std::error_code> parseNumber(std::string_view input) {
+std::expected<T, std::error_code> parseNumber(std::string_view input) {
T t{};
const auto [ptr, ec] = std::from_chars(input.data(), input.data() + input.size(), t);
if (ec != std::errc()) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
if (ptr != input.data() + input.size()) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
return t;
}
diff --git a/core-framework/common/include/utils/detail/MonadicOperationWrappers.h b/core-framework/common/include/utils/detail/MonadicOperationWrappers.h
index d17aa888b..a2d0a5035 100644
--- a/core-framework/common/include/utils/detail/MonadicOperationWrappers.h
+++ b/core-framework/common/include/utils/detail/MonadicOperationWrappers.h
@@ -104,7 +104,7 @@ detail::value_or_else_wrapper<T&&> valueOrElse(T&& func) noexcept { return {std:
/**
- * Converts from std::optional<T> to nonstd::expected<T, E>
+ * Converts from std::optional<T> to std::expected<T, E>
* The parameter will be used as the unexpected value if the optional is null.
*/
template<typename E>
@@ -112,7 +112,7 @@ detail::to_expected_wrapper<E> toExpected(E&& e) noexcept { return {std::forward
/**
- * Converts from nonstd::expected<T, E> to std::optional<T>
+ * Converts from std::expected<T, E> to std::optional<T>
* Consuming the expected and discarding the error, if any.
*/
inline detail::to_optional_wrapper toOptional() noexcept { return {}; }
diff --git a/core-framework/common/include/utils/expected.h b/core-framework/common/include/utils/expected.h
index fb0f3457e..6f07b6899 100644
--- a/core-framework/common/include/utils/expected.h
+++ b/core-framework/common/include/utils/expected.h
@@ -19,8 +19,8 @@
#include <utility>
#include <optional>
#include <iostream>
+#include <expected>
-#include "nonstd/expected.hpp"
#include "utils/detail/MonadicOperationWrappers.h"
#include "fmt/format.h"
#include "fmt/std.h"
@@ -32,7 +32,7 @@ template<typename T>
inline constexpr bool is_expected_v = false;
template<typename V, typename E>
-inline constexpr bool is_expected_v<nonstd::expected<V, E>> = true;
+inline constexpr bool is_expected_v<std::expected<V, E>> = true;
template<typename T>
concept expected = is_expected_v<std::remove_cvref_t<T>>;
@@ -44,7 +44,7 @@ inline constexpr bool is_valid_unexpected_type_v = std::is_same_v<T, std::remove
// specialization: the type must not be a specialization of std::unexpected
template<typename E>
-inline constexpr bool is_valid_unexpected_type_v<nonstd::unexpected_type<E>> = false;
+inline constexpr bool is_valid_unexpected_type_v<std::unexpected<E>> = false;
template<typename T>
concept valid_unexpected_type = is_valid_unexpected_type_v<T>;
@@ -68,24 +68,24 @@ auto operator|(Expected&& object, transform_wrapper<F> f) {
if constexpr (std::is_void_v<value_type>) {
using function_return_type = std::remove_cvref_t<std::invoke_result_t<F>>;
if (!object.has_value()) {
- return nonstd::expected<function_return_type, error_type>{nonstd::unexpect, std::forward<Expected>(object).error()};
+ return std::expected<function_return_type, error_type>{std::unexpect, std::forward<Expected>(object).error()};
}
if constexpr (std::is_void_v<function_return_type>) {
std::invoke(std::forward<F>(f.function));
- return nonstd::expected<void, error_type>{};
+ return std::expected<void, error_type>{};
} else {
- return nonstd::expected<function_return_type, error_type>{std::invoke(std::forward<F>(f.function))};
+ return std::expected<function_return_type, error_type>{std::invoke(std::forward<F>(f.function))};
}
} else {
using function_return_type = std::remove_cvref_t<std::invoke_result_t<F, decltype(*std::forward<Expected>(object))>>;
if (!object.has_value()) {
- return nonstd::expected<function_return_type, error_type>{nonstd::unexpect, std::forward<Expected>(object).error()};
+ return std::expected<function_return_type, error_type>{std::unexpect, std::forward<Expected>(object).error()};
}
if constexpr (std::is_void_v<function_return_type>) {
std::invoke(std::forward<F>(f.function), *std::forward<Expected>(object));
- return nonstd::expected<void, error_type>{};
+ return std::expected<void, error_type>{};
} else {
- return nonstd::expected<function_return_type, error_type>{std::invoke(std::forward<F>(f.function), *std::forward<Expected>(object))};
+ return std::expected<function_return_type, error_type>{std::invoke(std::forward<F>(f.function), *std::forward<Expected>(object))};
}
}
}
@@ -100,7 +100,7 @@ auto operator|(Expected&& object, and_then_wrapper<F> f) {
if (object.has_value()) {
return std::invoke(std::forward<F>(f.function));
} else {
- return function_return_type{nonstd::unexpect, std::forward<Expected>(object).error()};
+ return function_return_type{std::unexpect, std::forward<Expected>(object).error()};
}
} else {
using function_return_type = std::remove_cvref_t<std::invoke_result_t<F, decltype(*std::forward<Expected>(object))>>;
@@ -108,7 +108,7 @@ auto operator|(Expected&& object, and_then_wrapper<F> f) {
if (object.has_value()) {
return std::invoke(std::forward<F>(f.function), *std::forward<Expected>(object));
} else {
- return function_return_type{nonstd::unexpect, std::forward<Expected>(object).error()};
+ return function_return_type{std::unexpect, std::forward<Expected>(object).error()};
}
}
}
@@ -188,11 +188,11 @@ auto operator|(Expected&& object, transform_error_wrapper<F> f) {
using value_type = typename std::remove_cvref_t<Expected>::value_type;
using transformed_error_type = std::remove_cv_t<std::invoke_result_t<F, decltype(std::forward<Expected>(object).error())>>;
static_assert(valid_unexpected_type<transformed_error_type>, "transformError expects a function returning a valid unexpected type");
- using transformed_expected_type = nonstd::expected<value_type, transformed_error_type>;
+ using transformed_expected_type = std::expected<value_type, transformed_error_type>;
if (object.has_value()) {
return transformed_expected_type{std::forward<Expected>(object).value()};
}
- return transformed_expected_type{nonstd::unexpect, std::invoke(std::forward<F>(f.function), std::forward<Expected>(object).error())};
+ return transformed_expected_type{std::unexpect, std::invoke(std::forward<F>(f.function), std::forward<Expected>(object).error())};
}
template<expected Expected>
@@ -224,7 +224,7 @@ typename std::remove_cvref_t<Expected>::value_type operator|(Expected object, de
template<typename F, typename... Args>
auto try_expression(F&& action, Args&&... args) noexcept {
using action_return_type = std::remove_cvref_t<std::invoke_result_t<F, Args&&...>>;
- using return_type = nonstd::expected<action_return_type, std::exception_ptr>;
+ using return_type = std::expected<action_return_type, std::exception_ptr>;
try {
if constexpr (std::is_void_v<action_return_type>) {
std::invoke(std::forward<F>(action), std::forward<Args>(args)...);
@@ -233,40 +233,8 @@ auto try_expression(F&& action, Args&&... args) noexcept {
return return_type{std::invoke(std::forward<F>(action), std::forward<Args>(args)...)};
}
} catch (...) {
- return return_type{nonstd::unexpect, std::current_exception()};
+ return return_type{std::unexpect, std::current_exception()};
}
}
} // namespace org::apache::nifi::minifi::utils
-
-template <typename T, typename E>
-concept HasStdExpected = requires { typename std::expected<T, E>; };
-
-template <typename T, typename E>
-concept ExpectedTypesDoNotConflict =
- (!HasStdExpected<T, E> ||
- !std::same_as<nonstd::expected<T, E>, std::expected<T, E>>);
-
-// based on fmt::formatter<std::expected<T, E>, Char>
-template <typename T, typename E, typename Char>
-requires ExpectedTypesDoNotConflict<T, E> &&
- (std::is_void_v<T> || fmt::is_formattable<T, Char>::value) &&
- fmt::is_formattable<E, Char>::value
-struct fmt::formatter<nonstd::expected<T, E>, Char> {
- constexpr auto parse(auto& ctx) { return ctx.begin(); }
-
- auto format(const nonstd::expected<T, E>& value, auto& ctx) const {
- auto out = ctx.out();
-
- if (value.has_value()) {
- out = fmt::detail::write<Char>(out, "nonstd::expected(");
- if constexpr (!std::is_void_v<T>)
- out = fmt::detail::write_escaped_alternative<Char>(out, *value);
- } else {
- out = fmt::detail::write<Char>(out, "nonstd::unexpected(");
- out = fmt::detail::write_escaped_alternative<Char>(out, value.error());
- }
- *out++ = ')';
- return out;
- }
-};
diff --git a/core-framework/common/src/utils/ParsingUtils.cpp b/core-framework/common/src/utils/ParsingUtils.cpp
index 1e3fd67e7..922704b95 100644
--- a/core-framework/common/src/utils/ParsingUtils.cpp
+++ b/core-framework/common/src/utils/ParsingUtils.cpp
@@ -20,11 +20,11 @@
namespace org::apache::nifi::minifi::parsing {
-nonstd::expected<bool, std::error_code> parseBool(const std::string_view input) {
+std::expected<bool, std::error_code> parseBool(const std::string_view input) {
if (utils::string::equalsIgnoreCase(input, "true")) { return true; }
if (utils::string::equalsIgnoreCase(input, "false")) { return false; }
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
namespace {
@@ -56,7 +56,7 @@ std::optional<uint64_t> getUnitMultiplier(const std::string_view unit_str) {
}
} // namespace
-nonstd::expected<uint64_t, std::error_code> parseDataSizeMinMax(const std::string_view input, const uint64_t minimum, const uint64_t maximum) {
+std::expected<uint64_t, std::error_code> parseDataSizeMinMax(const std::string_view input, const uint64_t minimum, const uint64_t maximum) {
const auto trimmed_input = utils::string::trim(input);
const auto split_pos = trimmed_input.find_first_not_of("0123456789");
@@ -67,27 +67,27 @@ nonstd::expected<uint64_t, std::error_code> parseDataSizeMinMax(const std::strin
const auto num_str = trimmed_input.substr(0, split_pos);
const std::string unit_str = utils::string::toUpper(std::string{trimmed_input.substr(split_pos, trimmed_input.size() - split_pos)});
- nonstd::expected<uint64_t, std::error_code> num_part = parseIntegral<uint64_t>(num_str);
- if (!num_part) { return nonstd::make_unexpected(num_part.error()); }
+ std::expected<uint64_t, std::error_code> num_part = parseIntegral<uint64_t>(num_str);
+ if (!num_part) { return std::unexpected{num_part.error()}; }
const auto unit_multiplier = getUnitMultiplier(utils::string::trim(unit_str));
- if (!unit_multiplier) { return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError); }
+ if (!unit_multiplier) { return std::unexpected{core::ParsingErrorCode::GeneralParsingError}; }
uint64_t result = *num_part * *unit_multiplier;
gsl_Assert(unit_multiplier != 0);
if ((result / *unit_multiplier) != *num_part) {
- return nonstd::make_unexpected(core::ParsingErrorCode::OverflowError);
+ return std::unexpected{core::ParsingErrorCode::OverflowError};
}
- if (result < minimum) { return nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum); }
- if (result > maximum) { return nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum); }
+ if (result < minimum) { return std::unexpected{core::ParsingErrorCode::SmallerThanMinimum}; }
+ if (result > maximum) { return std::unexpected{core::ParsingErrorCode::LargerThanMaximum}; }
return result;
}
-nonstd::expected<uint64_t, std::error_code> parseDataSize(const std::string_view input) {
+std::expected<uint64_t, std::error_code> parseDataSize(const std::string_view input) {
return parseDataSizeMinMax(input, std::numeric_limits<uint64_t>::min(), std::numeric_limits<uint64_t>::max());
}
-nonstd::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std::string_view input) {
+std::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std::string_view input) {
uint32_t result = 0U;
if (input.size() == 9U) {
/* Probably rwxrwxrwx formatted */
@@ -95,17 +95,17 @@ nonstd::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std:
if (input[i * 3] == 'r') {
result |= 04 << ((2 - i) * 3);
} else if (input[i * 3] != '-') {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
if (input[i * 3 + 1] == 'w') {
result |= 02 << ((2 - i) * 3);
} else if (input[i * 3 + 1] != '-') {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
if (input[i * 3 + 2] == 'x') {
result |= 01 << ((2 - i) * 3);
} else if (input[i * 3 + 2] != '-') {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
}
} else {
@@ -114,23 +114,23 @@ nonstd::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std:
size_t pos = 0U;
result = std::stoul(std::string{input}, &pos, 8);
if (pos != input.size()) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
if ((result & ~static_cast<uint32_t>(0777)) != 0U) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
} catch (...) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
}
return result;
}
-nonstd::expected<float, std::error_code> parseFloat(std::string_view input) {
+std::expected<float, std::error_code> parseFloat(std::string_view input) {
try {
return std::stof(std::string{input});
} catch(const std::exception&) {
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
}
diff --git a/core-framework/common/src/utils/StringUtils.cpp b/core-framework/common/src/utils/StringUtils.cpp
index eee74742d..e200bdf95 100644
--- a/core-framework/common/src/utils/StringUtils.cpp
+++ b/core-framework/common/src/utils/StringUtils.cpp
@@ -518,7 +518,7 @@ bool splitToValueAndUnit(std::string_view input, int64_t& value, std::string& un
return true;
}
-nonstd::expected<std::optional<char>, std::error_code> parseCharacter(const std::string_view input) {
+std::expected<std::optional<char>, std::error_code> parseCharacter(const std::string_view input) {
if (input.empty()) { return std::nullopt; }
if (input.size() == 1) { return input[0]; }
@@ -536,7 +536,7 @@ nonstd::expected<std::optional<char>, std::error_code> parseCharacter(const std:
default: break;
}
}
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
std::string replaceEscapedCharacters(std::string_view input) {
diff --git a/core-framework/include/core/ConfigurableComponentImpl.h b/core-framework/include/core/ConfigurableComponentImpl.h
index 8b212824e..90725d271 100644
--- a/core-framework/include/core/ConfigurableComponentImpl.h
+++ b/core-framework/include/core/ConfigurableComponentImpl.h
@@ -30,28 +30,28 @@ namespace org::apache::nifi::minifi::core {
class ConfigurableComponentImpl : public virtual ConfigurableComponent {
public:
- [[nodiscard]] nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const override;
- nonstd::expected<void, std::error_code> setProperty(std::string_view name, std::string value) override;
- nonstd::expected<void, std::error_code> clearProperty(std::string_view name) override;
+ [[nodiscard]] std::expected<std::string, std::error_code> getProperty(std::string_view name) const override;
+ std::expected<void, std::error_code> setProperty(std::string_view name, std::string value) override;
+ std::expected<void, std::error_code> clearProperty(std::string_view name) override;
- [[nodiscard]] nonstd::expected<std::string, std::error_code> getDynamicProperty(std::string_view name) const override;
- nonstd::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) override;
+ [[nodiscard]] std::expected<std::string, std::error_code> getDynamicProperty(std::string_view name) const override;
+ std::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) override;
void setSupportedProperties(std::span<const PropertyReference> properties);
void setSupportedProperties(std::span<const Property> properties);
[[nodiscard]] std::map<std::string, Property, std::less<>> getSupportedProperties() const override;
- [[nodiscard]] nonstd::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const override;
+ [[nodiscard]] std::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const override;
[[nodiscard]] std::vector<std::string> getDynamicPropertyKeys() const override;
[[nodiscard]] std::map<std::string, std::string> getDynamicProperties() const override;
// for property sequences
- nonstd::expected<void, std::error_code> appendProperty(std::string_view name, std::string value) override;
- nonstd::expected<void, std::error_code> appendDynamicProperty(std::string_view name, std::string value) override;
- [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
- [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllDynamicPropertyValues(std::string_view name) const override;
+ std::expected<void, std::error_code> appendProperty(std::string_view name, std::string value) override;
+ std::expected<void, std::error_code> appendDynamicProperty(std::string_view name, std::string value) override;
+ [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
+ [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllDynamicPropertyValues(std::string_view name) const override;
private:
std::shared_ptr<logging::Logger> logger_ = logging::LoggerFactory<ConfigurableComponentImpl>::getLogger();
diff --git a/core-framework/include/core/controller/ControllerServiceBase.h b/core-framework/include/core/controller/ControllerServiceBase.h
index 99c7f2a71..63d1813c7 100644
--- a/core-framework/include/core/controller/ControllerServiceBase.h
+++ b/core-framework/include/core/controller/ControllerServiceBase.h
@@ -75,12 +75,12 @@ class ControllerServiceBase : public ControllerServiceApi {
onEnable();
}
- [[nodiscard]] nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const {
+ [[nodiscard]] std::expected<std::string, std::error_code> getProperty(std::string_view name) const {
gsl_Expects(context_);
return context_->getProperty(name);
}
- [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const {
+ [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const {
gsl_Expects(context_);
return context_->getAllPropertyValues(name);
}
diff --git a/core-framework/include/utils/file/FileUtils.h b/core-framework/include/utils/file/FileUtils.h
index 07d5d610f..f22ea4e51 100644
--- a/core-framework/include/utils/file/FileUtils.h
+++ b/core-framework/include/utils/file/FileUtils.h
@@ -128,11 +128,11 @@ inline std::optional<std::chrono::file_clock::time_point> last_write_time(const
return std::nullopt;
}
-inline nonstd::expected<void, std::error_code> set_last_write_time(const std::filesystem::path& path, std::chrono::file_clock::time_point new_time) {
+inline std::expected<void, std::error_code> set_last_write_time(const std::filesystem::path& path, std::chrono::file_clock::time_point new_time) {
std::error_code ec;
std::filesystem::last_write_time(path, new_time, ec);
if (ec)
- return nonstd::make_unexpected(ec);
+ return std::unexpected{ec};
return {};
}
@@ -600,7 +600,7 @@ struct WindowsFileTimes {
std::chrono::file_clock::time_point last_write_time;
};
-nonstd::expected<WindowsFileTimes, std::error_code> getWindowsFileTimes(const std::filesystem::path& path);
+std::expected<WindowsFileTimes, std::error_code> getWindowsFileTimes(const std::filesystem::path& path);
#endif
} // namespace org::apache::nifi::minifi::utils::file
diff --git a/core-framework/include/utils/file/PathUtils.h b/core-framework/include/utils/file/PathUtils.h
index 04886c1a6..12ca6dd2c 100644
--- a/core-framework/include/utils/file/PathUtils.h
+++ b/core-framework/include/utils/file/PathUtils.h
@@ -43,22 +43,22 @@ inline std::optional<std::filesystem::path> canonicalize(const std::filesystem::
return result;
}
-inline nonstd::expected<void, std::string> validateRelativeFilePath(const std::filesystem::path& path) {
+inline std::expected<void, std::string> validateRelativeFilePath(const std::filesystem::path& path) {
if (path.empty()) {
- return nonstd::make_unexpected("Empty file path");
+ return std::unexpected{"Empty file path"};
}
if (!path.is_relative()) {
- return nonstd::make_unexpected("File path must be a relative path '" + path.string() + "'");
+ return std::unexpected{"File path must be a relative path '" + path.string() + "'"};
}
if (!path.has_filename()) {
- return nonstd::make_unexpected("Filename missing in output path '" + path.string() + "'");
+ return std::unexpected{"Filename missing in output path '" + path.string() + "'"};
}
if (path.filename() == "." || path.filename() == "..") {
- return nonstd::make_unexpected("Invalid filename '" + path.filename().string() + "'");
+ return std::unexpected{"Invalid filename '" + path.filename().string() + "'"};
}
for (const auto& segment : path) {
if (segment == "..") {
- return nonstd::make_unexpected("Accessing parent directory is forbidden in file path '" + path.string() + "'");
+ return std::unexpected{"Accessing parent directory is forbidden in file path '" + path.string() + "'"};
}
}
return {};
diff --git a/core-framework/include/utils/net/DNS.h b/core-framework/include/utils/net/DNS.h
index da8153b0e..600e424e8 100644
--- a/core-framework/include/utils/net/DNS.h
+++ b/core-framework/include/utils/net/DNS.h
@@ -20,15 +20,15 @@
#include <string>
#include <string_view>
#include <system_error>
+#include <expected>
-#include "nonstd/expected.hpp"
#include "asio/ip/address.hpp"
namespace org::apache::nifi::minifi::utils::net {
-nonstd::expected<asio::ip::address, std::error_code> addressFromString(std::string_view ip_address_str);
+std::expected<asio::ip::address, std::error_code> addressFromString(std::string_view ip_address_str);
-nonstd::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::address& ip_address, std::chrono::steady_clock::duration timeout = std::chrono::seconds(5));
+std::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::address& ip_address, std::chrono::steady_clock::duration timeout = std::chrono::seconds(5));
std::string getMyHostName();
diff --git a/core-framework/src/core/ConfigurableComponentImpl.cpp b/core-framework/src/core/ConfigurableComponentImpl.cpp
index db0edab2f..1dd09d1e1 100644
--- a/core-framework/src/core/ConfigurableComponentImpl.cpp
+++ b/core-framework/src/core/ConfigurableComponentImpl.cpp
@@ -40,67 +40,67 @@ void ConfigurableComponentImpl::setSupportedProperties(std::span<const Property>
}
-nonstd::expected<std::string, std::error_code> ConfigurableComponentImpl::getProperty(const std::string_view name) const {
+std::expected<std::string, std::error_code> ConfigurableComponentImpl::getProperty(const std::string_view name) const {
const std::lock_guard<std::mutex> lock(configuration_mutex_);
const auto it = supported_properties_.find(name);
- if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+ if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
const Property& prop = it->second;
return prop.getValue() | utils::transform([](const std::string_view value_view) -> std::string { return std::string{value_view}; });
}
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::setProperty(const std::string_view name, std::string value) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::setProperty(const std::string_view name, std::string value) {
const std::lock_guard<std::mutex> lock(configuration_mutex_);
const auto it = supported_properties_.find(name);
- if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+ if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
Property& prop = it->second;
return prop.setValue(std::move(value));
}
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::clearProperty(const std::string_view name) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::clearProperty(const std::string_view name) {
const std::lock_guard<std::mutex> lock(configuration_mutex_);
const auto it = supported_properties_.find(name);
- if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+ if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
Property& prop = it->second;
prop.clearValues();
return {};
}
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::appendProperty(const std::string_view name, std::string value) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::appendProperty(const std::string_view name, std::string value) {
const std::lock_guard<std::mutex> lock(configuration_mutex_);
const auto it = supported_properties_.find(name);
- if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+ if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
Property& prop = it->second;
return prop.appendValue(std::move(value));
}
-nonstd::expected<std::string, std::error_code> ConfigurableComponentImpl::getDynamicProperty(const std::string_view name) const {
+std::expected<std::string, std::error_code> ConfigurableComponentImpl::getDynamicProperty(const std::string_view name) const {
const std::lock_guard<std::mutex> lock(configuration_mutex_);
if (!supportsDynamicProperties()) {
- return nonstd::make_unexpected(PropertyErrorCode::DynamicPropertiesNotSupported);
+ return std::unexpected{PropertyErrorCode::DynamicPropertiesNotSupported};
}
const auto it = dynamic_properties_.find(name);
- if (it == dynamic_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::PropertyNotSet); }
+ if (it == dynamic_properties_.end()) { return std::unexpected{PropertyErrorCode::PropertyNotSet}; }
const Property& prop = it->second;
return prop.getValue() | utils::transform([](const std::string_view value_view) -> std::string { return std::string{value_view}; });
}
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::setDynamicProperty(std::string name, std::string value) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::setDynamicProperty(std::string name, std::string value) {
const std::lock_guard<std::mutex> lock(configuration_mutex_);
if (!supportsDynamicProperties()) {
- return nonstd::make_unexpected(PropertyErrorCode::DynamicPropertiesNotSupported);
+ return std::unexpected{PropertyErrorCode::DynamicPropertiesNotSupported};
}
Property& prop = dynamic_properties_[std::move(name)];
prop.setSupportsExpressionLanguage(true); // all dynamic properties support EL
return prop.setValue(std::move(value));
}
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::appendDynamicProperty(const std::string_view name, std::string value) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::appendDynamicProperty(const std::string_view name, std::string value) {
const std::lock_guard<std::mutex> lock(configuration_mutex_);
if (!supportsDynamicProperties()) {
- return nonstd::make_unexpected(PropertyErrorCode::DynamicPropertiesNotSupported);
+ return std::unexpected{PropertyErrorCode::DynamicPropertiesNotSupported};
}
Property& prop = dynamic_properties_[std::string{name}];
prop.setSupportsExpressionLanguage(true); // all dynamic properties support EL
@@ -122,20 +122,20 @@ std::map<std::string, std::string> ConfigurableComponentImpl::getDynamicProperti
return result;
}
-[[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> ConfigurableComponentImpl::getAllPropertyValues(const std::string_view name) const {
+[[nodiscard]] std::expected<std::vector<std::string>, std::error_code> ConfigurableComponentImpl::getAllPropertyValues(const std::string_view name) const {
std::lock_guard<std::mutex> lock(configuration_mutex_);
const auto it = supported_properties_.find(name);
- if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+ if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
const Property& prop = it->second;
return prop.getAllValues() | utils::transform([](const auto& values) -> std::vector<std::string> { return std::vector<std::string>{values.begin(), values.end()}; });
}
-[[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> ConfigurableComponentImpl::getAllDynamicPropertyValues(const std::string_view name) const {
+[[nodiscard]] std::expected<std::vector<std::string>, std::error_code> ConfigurableComponentImpl::getAllDynamicPropertyValues(const std::string_view name) const {
std::lock_guard<std::mutex> lock(configuration_mutex_);
const auto it = dynamic_properties_.find(name);
- if (it == dynamic_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::PropertyNotSet); }
+ if (it == dynamic_properties_.end()) { return std::unexpected{PropertyErrorCode::PropertyNotSet}; }
const Property& prop = it->second;
return prop.getAllValues() | utils::transform([](const auto& values) -> std::vector<std::string> { return std::vector<std::string>{values.begin(), values.end()}; });
}
@@ -149,10 +149,10 @@ std::map<std::string, std::string> ConfigurableComponentImpl::getDynamicProperti
return supported_properties;
}
-[[nodiscard]] nonstd::expected<Property, std::error_code> ConfigurableComponentImpl::getSupportedProperty(const std::string_view name) const {
+[[nodiscard]] std::expected<Property, std::error_code> ConfigurableComponentImpl::getSupportedProperty(const std::string_view name) const {
std::lock_guard<std::mutex> lock(configuration_mutex_);
const auto it = supported_properties_.find(name);
- if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+ if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
return it->second;
}
diff --git a/core-framework/src/core/Property.cpp b/core-framework/src/core/Property.cpp
index a55159cab..13f83ee56 100644
--- a/core-framework/src/core/Property.cpp
+++ b/core-framework/src/core/Property.cpp
@@ -119,30 +119,30 @@ Property::Property(std::string name, std::string description)
Property::Property() : is_required_(false), is_collection_(false), validator_{&StandardPropertyValidators::ALWAYS_VALID_VALIDATOR}, supports_el_(false), is_transient_(false) {}
-nonstd::expected<std::string_view, std::error_code> Property::getValue() const {
+std::expected<std::string_view, std::error_code> Property::getValue() const {
if (!values_.empty()) { return values_.back(); }
if (default_value_) { return *default_value_; }
- return nonstd::make_unexpected(PropertyErrorCode::PropertyNotSet);
+ return std::unexpected{PropertyErrorCode::PropertyNotSet};
}
-nonstd::expected<std::span<const std::string>, std::error_code> Property::getAllValues() const {
+std::expected<std::span<const std::string>, std::error_code> Property::getAllValues() const {
return std::span{values_};
}
-nonstd::expected<void, std::error_code> Property::setValue(std::string value) {
- if (!validator_->validate(value)) { return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed); }
+std::expected<void, std::error_code> Property::setValue(std::string value) {
+ if (!validator_->validate(value)) { return std::unexpected{PropertyErrorCode::ValidationFailed}; }
if (!allowed_values_.empty() && ranges::none_of(allowed_values_, [&](const auto& allowed_value) -> bool { return utils::string::toLower(allowed_value) == utils::string::toLower(value); })) {
- return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed);
+ return std::unexpected{PropertyErrorCode::ValidationFailed};
}
values_.clear();
values_.push_back(std::move(value));
return {};
}
-nonstd::expected<void, std::error_code> Property::appendValue(std::string value) {
- if (!validator_->validate(value)) { return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed); }
+std::expected<void, std::error_code> Property::appendValue(std::string value) {
+ if (!validator_->validate(value)) { return std::unexpected{PropertyErrorCode::ValidationFailed}; }
if (!allowed_values_.empty() && ranges::none_of(allowed_values_, [&](const auto& allowed_value) -> bool { return utils::string::toLower(allowed_value) == utils::string::toLower(value); })) {
- return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed);
+ return std::unexpected{PropertyErrorCode::ValidationFailed};
}
if (values_.empty() && default_value_) { values_.push_back(*default_value_); }
values_.push_back(std::move(value));
diff --git a/core-framework/src/utils/Cron.cpp b/core-framework/src/utils/Cron.cpp
index 93dc84b66..af0920166 100644
--- a/core-framework/src/utils/Cron.cpp
+++ b/core-framework/src/utils/Cron.cpp
@@ -46,14 +46,15 @@ namespace org::apache::nifi::minifi::utils {
namespace {
// https://github.com/HowardHinnant/date/issues/550
-// Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78714
-// the month parsing with '%b' and the weekday parsing with '%a' is case-sensitive in gcc11
-// This has been fixed in gcc13
+// Due to libstdc++ bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78714
+// the month parsing with '%b' and the weekday parsing with '%a' can be case-sensitive.
+// Normalizing to Title Case prevents parsing failures across all GCC versions.
std::stringstream getCaseInsensitiveCStream(const std::string& str) {
-#if defined(__GNUC__) && (__GNUC__ < 13)
+#if defined(__GLIBCXX__) || defined(__GLIBCPP__)
auto patched_str = string::toLower(str);
- if (!patched_str.empty())
+ if (!patched_str.empty()) {
patched_str[0] = static_cast<char>(std::toupper(static_cast<unsigned char>(patched_str[0])));
+ }
auto stream = std::stringstream{patched_str};
#else
auto stream = std::stringstream{str};
@@ -62,7 +63,6 @@ std::stringstream getCaseInsensitiveCStream(const std::string& str) {
return stream;
}
-
template<class T>
std::optional<T> fromChars(const std::string& input) {
T t{};
diff --git a/core-framework/src/utils/file/FileUtils.cpp b/core-framework/src/utils/file/FileUtils.cpp
index 1e8dc61ff..84f5fe3f4 100644
--- a/core-framework/src/utils/file/FileUtils.cpp
+++ b/core-framework/src/utils/file/FileUtils.cpp
@@ -132,11 +132,11 @@ std::chrono::file_clock::time_point fileTimePointFromFileTime(const FILETIME& fi
return std::chrono::file_clock::time_point{duration};
}
-nonstd::expected<WindowsFileTimes, std::error_code> getWindowsFileTimes(const std::filesystem::path& path) {
+std::expected<WindowsFileTimes, std::error_code> getWindowsFileTimes(const std::filesystem::path& path) {
WIN32_FILE_ATTRIBUTE_DATA file_attributes;
auto get_file_attributes_result = GetFileAttributesExW(path.c_str(), GetFileExInfoStandard, &file_attributes);
if (!get_file_attributes_result)
- return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(GetLastError()));
+ return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(GetLastError())};
return WindowsFileTimes{.creation_time = fileTimePointFromFileTime(file_attributes.ftCreationTime),
.last_access_time = fileTimePointFromFileTime(file_attributes.ftLastAccessTime),
.last_write_time = fileTimePointFromFileTime(file_attributes.ftLastWriteTime)};
diff --git a/core-framework/src/utils/net/DNS.cpp b/core-framework/src/utils/net/DNS.cpp
index 160277dac..726a41ccd 100644
--- a/core-framework/src/utils/net/DNS.cpp
+++ b/core-framework/src/utils/net/DNS.cpp
@@ -25,11 +25,11 @@
namespace org::apache::nifi::minifi::utils::net {
-nonstd::expected<asio::ip::address, std::error_code> addressFromString(const std::string_view ip_address_str) {
+std::expected<asio::ip::address, std::error_code> addressFromString(const std::string_view ip_address_str) {
std::error_code ip_address_from_string_error;
auto ip_address = asio::ip::make_address(ip_address_str, ip_address_from_string_error);
if (ip_address_from_string_error)
- return nonstd::make_unexpected(ip_address_from_string_error);
+ return std::unexpected{ip_address_from_string_error};
return ip_address;
}
@@ -41,7 +41,7 @@ asio::awaitable<std::tuple<std::error_code, asio::ip::basic_resolver<asio::ip::u
}
} // namespace
-nonstd::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::address& ip_address, std::chrono::steady_clock::duration timeout_duration) {
+std::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::address& ip_address, std::chrono::steady_clock::duration timeout_duration) {
asio::io_context io_context;
std::error_code resolve_error;
@@ -54,11 +54,11 @@ nonstd::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::
io_context.run();
if (resolve_error)
- return nonstd::make_unexpected(resolve_error);
+ return std::unexpected{resolve_error};
if (!results.empty()) {
return results.begin()->host_name();
}
- return nonstd::make_unexpected(std::make_error_code(std::errc::host_unreachable));
+ return std::unexpected{std::make_error_code(std::errc::host_unreachable)};
}
std::string getMyHostName() {
diff --git a/docker/rockylinux/Dockerfile b/docker/rockylinux/Dockerfile
index 07069e525..d10a82aba 100644
--- a/docker/rockylinux/Dockerfile
+++ b/docker/rockylinux/Dockerfile
@@ -41,7 +41,7 @@ COPY . ${MINIFI_BASE_DIR}
# Install the system dependencies needed for a build
# ccache is in EPEL
-RUN dnf -y install epel-release && dnf -y install gcc-toolset-12 sudo git which make libarchive ccache ca-certificates perl patch bison flex libtool cmake rpmdevtools && \
+RUN dnf -y install epel-release && dnf -y install gcc-toolset-14 sudo git which make libarchive ccache ca-certificates perl patch bison flex libtool cmake rpmdevtools && \
if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_ALL=ON\|ENABLE_PYTHON_SCRIPTING=ON\|ENABLE_OPC=ON"; then dnf -y --enablerepo=devel install python3-devel; fi && \
if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_SFTP=ON" && [ "${DOCKER_SKIP_TESTS}" == "OFF" ]; then dnf -y install java-1.8.0-openjdk maven; fi
@@ -52,16 +52,13 @@ RUN cd $MINIFI_BASE_DIR && \
RUN groupadd -g ${GID} ${USER} && useradd -g ${GID} ${USER} && \
chown -R ${USER}:${USER} ${MINIFI_BASE_DIR}
-# Patching standard header to avoid https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105651
-RUN patch -p1 /opt/rh/gcc-toolset-12/root/usr/include/c++/12/bits/basic_string.tcc ${MINIFI_BASE_DIR}/thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch
-
USER ${USER}
# Perform the build
RUN cd $MINIFI_BASE_DIR && \
mkdir build && \
cd build && \
- source /opt/rh/gcc-toolset-12/enable && \
+ source /opt/rh/gcc-toolset-14/enable && \
export PATH=/usr/lib64/ccache${PATH:+:${PATH}} && \
export CCACHE_DIR=${MINIFI_BASE_DIR}/.ccache && \
cmake -DSTATIC_BUILD= -DSKIP_TESTS=${DOCKER_SKIP_TESTS} ${MINIFI_OPTIONS} -DAWS_ENABLE_UNITY_BUILD=OFF -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. && \
@@ -71,7 +68,7 @@ RUN cd $MINIFI_BASE_DIR && \
RUN if [[ "${DOCKER_CREATE_RPM}" == "ON" ]] ; then \
cd $MINIFI_BASE_DIR && \
cd build && \
- source /opt/rh/gcc-toolset-12/enable && \
+ source /opt/rh/gcc-toolset-14/enable && \
cmake -DMINIFI_PACKAGING_TYPE=RPM .. && \
make -j "$(nproc)" package&& \
../packaging/rpm/check_rpm_contents.sh *.rpm expected-rpm-contents.txt; \
diff --git a/extension-framework/CMakeLists.txt b/extension-framework/CMakeLists.txt
index 9bcfd285c..679f937d9 100644
--- a/extension-framework/CMakeLists.txt
+++ b/extension-framework/CMakeLists.txt
@@ -18,13 +18,10 @@ target_link_libraries(minifi-extension-framework PUBLIC minifi-api)
include(RangeV3)
include(Asio)
include(MagicEnum)
-list(APPEND CORE_LIBRARIES ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite range-v3 expected-lite asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
+list(APPEND CORE_LIBRARIES ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite range-v3 asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
if(NOT WIN32)
list(APPEND CORE_LIBRARIES OSSP::libuuid++)
endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
- list(APPEND CORE_LIBRARIES stdc++fs)
-endif()
target_link_libraries(minifi-extension-framework PUBLIC ${CMAKE_DL_LIBS} ${CORE_LIBRARIES})
if (APPLE)
target_link_libraries(minifi-extension-framework PUBLIC "-framework CoreFoundation -framework SystemConfiguration")
diff --git a/extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h b/extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h
index 50f5ebaa5..442f9bbf4 100644
--- a/extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h
+++ b/extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h
@@ -18,9 +18,9 @@
#pragma once
#include <string>
+#include <expected>
#include "minifi-c.h"
-#include "nonstd/expected.hpp"
#include "minifi-cpp/core/PropertyDefinition.h"
#include "api/core/FlowFile.h"
@@ -30,8 +30,8 @@ class ProcessContext {
public:
explicit ProcessContext(MinifiProcessContext* impl): impl_(impl) {}
- nonstd::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file = nullptr) const;
- nonstd::expected<std::string, std::error_code> getProperty(const minifi::core::PropertyReference& property_reference, const FlowFile* flow_file = nullptr) const {
+ std::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file = nullptr) const;
+ std::expected<std::string, std::error_code> getProperty(const minifi::core::PropertyReference& property_reference, const FlowFile* flow_file = nullptr) const {
return getProperty(property_reference.name, flow_file);
}
diff --git a/extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp b/extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp
index 58016d804..958274d7d 100644
--- a/extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp
+++ b/extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp
@@ -21,7 +21,7 @@
namespace org::apache::nifi::minifi::api::core {
-nonstd::expected<std::string, std::error_code> ProcessContext::getProperty(std::string_view name, const FlowFile* flow_file) const {
+std::expected<std::string, std::error_code> ProcessContext::getProperty(std::string_view name, const FlowFile* flow_file) const {
std::optional<std::string> value;
MinifiStatus status = MinifiProcessContextGetProperty(impl_, utils::toStringView(name), flow_file ? flow_file->get() : MINIFI_NULL,
[] (void* data, MinifiStringView result) {
@@ -29,7 +29,7 @@ nonstd::expected<std::string, std::error_code> ProcessContext::getProperty(std::
}, &value);
if (!value) {
- return nonstd::make_unexpected(utils::make_error_code(status));
+ return std::unexpected{utils::make_error_code(status)};
}
return value.value();
}
diff --git a/extensions/aws/processors/PutKinesisStream.cpp b/extensions/aws/processors/PutKinesisStream.cpp
index 2ce4b7872..432597606 100644
--- a/extensions/aws/processors/PutKinesisStream.cpp
+++ b/extensions/aws/processors/PutKinesisStream.cpp
@@ -53,7 +53,7 @@ void PutKinesisStream::onSchedule(core::ProcessContext& context, core::ProcessSe
}
}
-nonstd::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, PutKinesisStream::BatchItemError> PutKinesisStream::createEntryFromFlowFile(const core::ProcessContext& context,
+std::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, PutKinesisStream::BatchItemError> PutKinesisStream::createEntryFromFlowFile(const core::ProcessContext& context,
core::ProcessSession& session,
const std::shared_ptr<core::FlowFile>& flow_file) const {
Aws::Kinesis::Model::PutRecordsRequestEntry entry;
@@ -62,7 +62,7 @@ nonstd::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, PutKinesisStream::
const auto [status, buffer] = session.readBuffer(flow_file);
if (io::isError(status)) {
logger_->log_error("Couldn't read content from {}", flow_file->getUUIDStr());
- return nonstd::make_unexpected(BatchItemError{.error_message = "Failed to read content", .error_code = std::nullopt});
+ return std::unexpected{BatchItemError{.error_message = "Failed to read content", .error_code = std::nullopt}};
}
Aws::Utils::ByteBuffer aws_buffer(reinterpret_cast<const unsigned char*>(buffer.data()), buffer.size());
entry.SetData(aws_buffer);
@@ -122,9 +122,9 @@ void PutKinesisStream::processBatch(StreamBatch& stream_batch, const Aws::Kinesi
const auto put_record_result = client.PutRecords(stream_batch.request);
if (!put_record_result.IsSuccess()) {
ranges::for_each(stream_batch.items, [&](auto& item) {
- item.result = nonstd::make_unexpected(BatchItemError{
+ item.result = std::unexpected{BatchItemError{
.error_message = put_record_result.GetError().GetMessage(),
- .error_code = std::to_string(static_cast<int>(put_record_result.GetError().GetResponseCode()))});
+ .error_code = std::to_string(static_cast<int>(put_record_result.GetError().GetResponseCode()))}};
});
return;
}
@@ -134,9 +134,9 @@ void PutKinesisStream::processBatch(StreamBatch& stream_batch, const Aws::Kinesi
logger_->log_critical("PutKinesisStream record size ({}) and result size ({}) mismatch in {} cannot tell which record succeeded and which didnt",
stream_batch.items.size(), result_records.size(), stream_batch.request.GetStreamName());
ranges::for_each(stream_batch.items, [&](auto& item) {
- item.result = nonstd::make_unexpected(BatchItemError{
+ item.result = std::unexpected{BatchItemError{
.error_message = "Record size mismatch",
- .error_code = std::nullopt});
+ .error_code = std::nullopt}};
});
return;
}
@@ -145,7 +145,7 @@ void PutKinesisStream::processBatch(StreamBatch& stream_batch, const Aws::Kinesi
auto& [flow_file, result] = stream_batch.items[i];
const auto& result_record = result_records[i];
if (!result_record.GetErrorCode().empty()) {
- result = nonstd::make_unexpected(BatchItemError{.error_message = result_record.GetErrorMessage(), .error_code = result_record.GetErrorCode()});
+ result = std::unexpected{BatchItemError{.error_message = result_record.GetErrorMessage(), .error_code = result_record.GetErrorCode()}};
} else {
result = BatchItemResult{.sequence_number = result_record.GetSequenceNumber(), .shard_id = result_record.GetShardId()};
}
diff --git a/extensions/aws/processors/PutKinesisStream.h b/extensions/aws/processors/PutKinesisStream.h
index a20d60653..524155b28 100644
--- a/extensions/aws/processors/PutKinesisStream.h
+++ b/extensions/aws/processors/PutKinesisStream.h
@@ -108,7 +108,7 @@ class PutKinesisStream : public AwsProcessor { // NOLINT(cppcoreguidelines-spec
};
struct BatchItem {
std::shared_ptr<core::FlowFile> flow_file;
- nonstd::expected<BatchItemResult, BatchItemError> result;
+ std::expected<BatchItemResult, BatchItemError> result;
};
struct StreamBatch {
uint64_t batch_size = 0;
@@ -116,7 +116,7 @@ class PutKinesisStream : public AwsProcessor { // NOLINT(cppcoreguidelines-spec
Aws::Kinesis::Model::PutRecordsRequest request;
};
- nonstd::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, BatchItemError> createEntryFromFlowFile(const core::ProcessContext& context,
+ std::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, BatchItemError> createEntryFromFlowFile(const core::ProcessContext& context,
core::ProcessSession& session,
const std::shared_ptr<core::FlowFile>& flow_file) const;
diff --git a/extensions/civetweb/processors/ListenHTTP.h b/extensions/civetweb/processors/ListenHTTP.h
index 5952d3236..3c10a4c0d 100644
--- a/extensions/civetweb/processors/ListenHTTP.h
+++ b/extensions/civetweb/processors/ListenHTTP.h
@@ -175,7 +175,7 @@ class ListenHTTP : public core::ProcessorImpl {
FailureReason reason;
std::promise<void> ret;
};
- using Request = std::promise<nonstd::expected<RequestValue, FailureValue>>;
+ using Request = std::promise<std::expected<RequestValue, FailureValue>>;
Handler(std::string base_uri,
std::optional<std::string> flow_id,
@@ -211,7 +211,7 @@ class ListenHTTP : public core::ProcessorImpl {
while (dequeueRequest(req)) {
std::promise<void> req_done_promise;
auto req_done = req_done_promise.get_future();
- req.set_value(nonstd::make_unexpected(FailureValue{Handler::FailureReason::PROCESSOR_SHUTDOWN, std::move(req_done_promise)}));
+ req.set_value(std::unexpected{FailureValue{Handler::FailureReason::PROCESSOR_SHUTDOWN, std::move(req_done_promise)}});
req_done.wait();
}
}
diff --git a/extensions/couchbase/CMakeLists.txt b/extensions/couchbase/CMakeLists.txt
index 3c7ac35e1..632c014e3 100644
--- a/extensions/couchbase/CMakeLists.txt
+++ b/extensions/couchbase/CMakeLists.txt
@@ -21,11 +21,7 @@ if (NOT (ENABLE_ALL OR ENABLE_COUCHBASE))
return()
endif()
-if (WIN32)
- include(Couchbase_1_0_2)
-else()
- include(Couchbase)
-endif()
+include(Couchbase)
include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
@@ -33,8 +29,13 @@ file(GLOB SOURCES "*.cpp" "controllerservices/*.cpp" "processors/*.cpp")
add_minifi_library(minifi-couchbase SHARED ${SOURCES})
-target_include_directories(minifi-couchbase PRIVATE BEFORE "${CMAKE_CURRENT_SOURCE_DIR}" "controllerservices" "processors" ${COUCHBASE_INCLUDE_DIR})
-target_link_libraries(minifi-couchbase ${LIBMINIFI} couchbase_cxx_client_static hdr_histogram_static snappy llhttp::llhttp)
+target_include_directories(minifi-couchbase PRIVATE BEFORE "${CMAKE_CURRENT_SOURCE_DIR}" "controllerservices" "processors")
+target_include_directories(minifi-couchbase SYSTEM PRIVATE ${COUCHBASE_INCLUDE_DIR})
+# Demote preprocessor warnings so <ciso646> doesn't break the build
+if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+ target_compile_options(minifi-couchbase PRIVATE -Wno-error=cpp)
+endif()
+target_link_libraries(minifi-couchbase ${LIBMINIFI} couchbase_cxx_client::couchbase_cxx_client_static hdr_histogram_static snappy llhttp::llhttp taocpp::json)
register_extension(minifi-couchbase "COUCHBASE EXTENSIONS" COUCHBASE-EXTENSIONS "This enables Couchbase support" "extensions/couchbase/tests")
diff --git a/extensions/couchbase/controllerservices/CouchbaseClusterService.cpp b/extensions/couchbase/controllerservices/CouchbaseClusterService.cpp
index 6c773a463..7c695bca4 100644
--- a/extensions/couchbase/controllerservices/CouchbaseClusterService.cpp
+++ b/extensions/couchbase/controllerservices/CouchbaseClusterService.cpp
@@ -95,20 +95,20 @@ CouchbaseClient::CouchbaseClient(std::string connection_string, std::string user
return cluster_options;
}
-nonstd::expected<::couchbase::collection, CouchbaseErrorType> CouchbaseClient::getCollection(const CouchbaseCollection& collection) {
+std::expected<::couchbase::collection, CouchbaseErrorType> CouchbaseClient::getCollection(const CouchbaseCollection& collection) {
auto connection_result = establishConnection();
if (!connection_result) {
- return nonstd::make_unexpected(connection_result.error());
+ return std::unexpected{connection_result.error()};
}
std::lock_guard<std::mutex> lock(cluster_mutex_);
return cluster_->bucket(collection.bucket_name).scope(collection.scope_name).collection(collection.collection_name);
}
-nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> CouchbaseClient::upsert(
+std::expected<CouchbaseUpsertResult, CouchbaseErrorType> CouchbaseClient::upsert(
const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id, const std::vector<std::byte>& buffer, const ::couchbase::upsert_options& options) {
auto collection_result = getCollection(collection);
if (!collection_result.has_value()) {
- return nonstd::make_unexpected(collection_result.error());
+ return std::unexpected{collection_result.error()};
}
std::pair<::couchbase::error, ::couchbase::mutation_result> result;
@@ -126,11 +126,11 @@ nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> CouchbaseClient::ups
if (getErrorType(upsert_err.ec()) == CouchbaseErrorType::TEMPORARY && upsert_err.ec().value() != static_cast<int>(::couchbase::errc::common::ambiguous_timeout)) {
logger_->log_error("Failed to upsert document '{}' to collection '{}.{}.{}' due to temporary issue, error code: '{}', message: '{}'", document_id, collection.bucket_name, collection.scope_name,
collection.collection_name, upsert_err.ec(), upsert_err.message());
- return nonstd::make_unexpected(CouchbaseErrorType::TEMPORARY);
+ return std::unexpected{CouchbaseErrorType::TEMPORARY};
}
logger_->log_error("Failed to upsert document '{}' to collection '{}.{}.{}' with error code: '{}', message: '{}'", document_id, collection.bucket_name, collection.scope_name,
collection.collection_name, upsert_err.ec(), upsert_err.message());
- return nonstd::make_unexpected(CouchbaseErrorType::FATAL);
+ return std::unexpected{CouchbaseErrorType::FATAL};
} else {
return CouchbaseUpsertResult {
{
@@ -144,10 +144,10 @@ nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> CouchbaseClient::ups
}
}
-nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> CouchbaseClient::get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type) {
+std::expected<CouchbaseGetResult, CouchbaseErrorType> CouchbaseClient::get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type) {
auto collection_result = getCollection(collection);
if (!collection_result.has_value()) {
- return nonstd::make_unexpected(collection_result.error());
+ return std::unexpected{collection_result.error()};
}
::couchbase::get_options options;
@@ -156,14 +156,14 @@ nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> CouchbaseClient::get(co
if (get_err.ec()) {
if (getErrorType(get_err.ec()) == CouchbaseErrorType::TEMPORARY) {
logger_->log_error("Failed to get document '{}' from collection '{}.{}.{}' due to timeout", document_id, collection.bucket_name, collection.scope_name, collection.collection_name);
- return nonstd::make_unexpected(CouchbaseErrorType::TEMPORARY);
+ return std::unexpected{CouchbaseErrorType::TEMPORARY};
}
logger_->log_error("Failed to get document '{}' from collection '{}.{}.{}' with error code: '{}', message: '{}'", document_id, collection.bucket_name, collection.scope_name,
collection.collection_name, get_err.ec(), get_err.message());
if (get_err.cause()) {
logger_->log_error("... root cause error code: '{}', message: '{}'", get_err.cause()->ec(), get_err.cause()->message());
}
- return nonstd::make_unexpected(CouchbaseErrorType::FATAL);
+ return std::unexpected{CouchbaseErrorType::FATAL};
} else {
try {
CouchbaseGetResult result;
@@ -183,7 +183,7 @@ nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> CouchbaseClient::get(co
} catch (const std::exception& ex) {
logger_->log_error("Failed to get content for document '{}' from collection '{}.{}.{}' with the following exception: '{}'", document_id, collection.bucket_name, collection.scope_name,
collection.collection_name, ex.what());
- return nonstd::make_unexpected(CouchbaseErrorType::FATAL);
+ return std::unexpected{CouchbaseErrorType::FATAL};
}
}
}
@@ -196,7 +196,7 @@ void CouchbaseClient::close() {
cluster_ = std::nullopt;
}
-nonstd::expected<void, CouchbaseErrorType> CouchbaseClient::establishConnection() {
+std::expected<void, CouchbaseErrorType> CouchbaseClient::establishConnection() {
std::lock_guard<std::mutex> lock(cluster_mutex_);
if (cluster_) {
return {};
@@ -205,7 +205,7 @@ nonstd::expected<void, CouchbaseErrorType> CouchbaseClient::establishConnection(
auto [connect_err, cluster] = ::couchbase::cluster::connect(connection_string_, cluster_options_).get();
if (connect_err.ec()) {
logger_->log_error("Failed to connect to Couchbase cluster with error code: '{}' and message: '{}'", connect_err.ec(), connect_err.message());
- return nonstd::make_unexpected(getErrorType(connect_err.ec()));
+ return std::unexpected{getErrorType(connect_err.ec())};
}
cluster_ = std::move(cluster);
diff --git a/extensions/couchbase/controllerservices/CouchbaseClusterService.h b/extensions/couchbase/controllerservices/CouchbaseClusterService.h
index f6cdddc52..3ae92029d 100644
--- a/extensions/couchbase/controllerservices/CouchbaseClusterService.h
+++ b/extensions/couchbase/controllerservices/CouchbaseClusterService.h
@@ -82,15 +82,15 @@ class CouchbaseClient {
CouchbaseClient& operator=(CouchbaseClient&&) = delete;
CouchbaseClient& operator=(const CouchbaseClient&) = delete;
- nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id,
+ std::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id,
const std::vector<std::byte>& buffer, const ::couchbase::upsert_options& options);
- nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type);
- nonstd::expected<void, CouchbaseErrorType> establishConnection();
+ std::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type);
+ std::expected<void, CouchbaseErrorType> establishConnection();
void close();
private:
::couchbase::cluster_options buildClusterOptions(std::string username, std::string password, minifi::controllers::SSLContextServiceInterface* ssl_context_service);
- nonstd::expected<::couchbase::collection, CouchbaseErrorType> getCollection(const CouchbaseCollection& collection);
+ std::expected<::couchbase::collection, CouchbaseErrorType> getCollection(const CouchbaseCollection& collection);
std::string connection_string_;
std::shared_ptr<core::logging::Logger> logger_;
@@ -140,13 +140,13 @@ class CouchbaseClusterService : public core::controller::ControllerServiceBase,
[[nodiscard]] ControllerServiceHandle* getControllerServiceHandle() override {return this;}
- virtual nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type,
+ virtual std::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type,
const std::string& document_id, const std::vector<std::byte>& buffer, const ::couchbase::upsert_options& options) {
gsl_Expects(client_);
return client_->upsert(collection, document_type, document_id, buffer, options);
}
- virtual nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type) {
+ virtual std::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type) {
gsl_Expects(client_);
return client_->get(collection, document_id, return_type);
}
diff --git a/extensions/couchbase/tests/CMakeLists.txt b/extensions/couchbase/tests/CMakeLists.txt
index 18caaeff0..d611fd138 100644
--- a/extensions/couchbase/tests/CMakeLists.txt
+++ b/extensions/couchbase/tests/CMakeLists.txt
@@ -29,6 +29,10 @@ FOREACH(testfile ${COUCHBASE_TESTS})
target_include_directories(${testfilename} PRIVATE BEFORE "${CMAKE_SOURCE_DIR}/extensions/couchbase/")
target_include_directories(${testfilename} PRIVATE BEFORE "${COUCHBASE_INCLUDE_DIR}")
+ # Demote preprocessor warnings so <ciso646> doesn't break the build
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+ target_compile_options(${testfilename} PRIVATE -Wno-error=cpp)
+ endif()
createTests("${testfilename}")
target_link_libraries(${testfilename} Catch2WithMain)
target_link_libraries(${testfilename} minifi-couchbase)
diff --git a/extensions/couchbase/tests/MockCouchbaseClusterService.h b/extensions/couchbase/tests/MockCouchbaseClusterService.h
index 6566e85d4..e36532b55 100644
--- a/extensions/couchbase/tests/MockCouchbaseClusterService.h
+++ b/extensions/couchbase/tests/MockCouchbaseClusterService.h
@@ -53,7 +53,7 @@ class MockCouchbaseClusterService : public controllers::CouchbaseClusterService
void onEnable() override {}
void notifyStop() override {}
- nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id,
+ std::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id,
const std::vector<std::byte>& buffer, const ::couchbase::upsert_options& options) override {
collection_ = collection;
upsert_parameters_.document_type = document_type;
@@ -62,19 +62,19 @@ class MockCouchbaseClusterService : public controllers::CouchbaseClusterService
upsert_parameters_.options = options;
if (upsert_error_) {
- return nonstd::make_unexpected(*upsert_error_);
+ return std::unexpected{*upsert_error_};
} else {
return CouchbaseUpsertResult{{collection_.bucket_name, COUCHBASE_PUT_RESULT_CAS}, COUCHBASE_PUT_RESULT_SEQUENCE_NUMBER, COUCHBASE_PUT_RESULT_PARTITION_UUID, COUCHBASE_PUT_RESULT_PARTITION_ID};
}
}
- nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType document_type) override {
+ std::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType document_type) override {
collection_ = collection;
get_parameters_.document_id = document_id;
get_parameters_.document_type = document_type;
if (get_error_) {
- return nonstd::make_unexpected(*get_error_);
+ return std::unexpected{*get_error_};
} else {
if (document_type == CouchbaseValueType::String) {
return CouchbaseGetResult{{collection_.bucket_name, COUCHBASE_GET_RESULT_CAS}, COUCHBASE_GET_RESULT_EXPIRY, COUCHBASE_GET_RESULT_CONTENT};
diff --git a/extensions/elasticsearch/PostElasticsearch.cpp b/extensions/elasticsearch/PostElasticsearch.cpp
index b734f4306..bd80eef85 100644
--- a/extensions/elasticsearch/PostElasticsearch.cpp
+++ b/extensions/elasticsearch/PostElasticsearch.cpp
@@ -76,25 +76,25 @@ class ElasticPayload {
return result;
}
- static nonstd::expected<ElasticPayload, std::string> parse(core::ProcessSession& session, core::ProcessContext& context, const std::shared_ptr<core::FlowFile>& flow_file) {
+ static std::expected<ElasticPayload, std::string> parse(core::ProcessSession& session, core::ProcessContext& context, const std::shared_ptr<core::FlowFile>& flow_file) {
auto action = context.getProperty(PostElasticsearch::Action, flow_file.get());
if (!action || (action != "index" && action != "create" && action != "delete" && action != "update" && action != "upsert"))
- return nonstd::make_unexpected("Missing or invalid action");
+ return std::unexpected{"Missing or invalid action"};
auto index = context.getProperty(PostElasticsearch::Index, flow_file.get());
if (!index)
- return nonstd::make_unexpected("Missing index");
+ return std::unexpected{"Missing index"};
auto id = context.getProperty(PostElasticsearch::Identifier, flow_file.get()) | utils::toOptional();
if (!id && (action == "delete" || action == "update" || action == "upsert"))
- return nonstd::make_unexpected("Identifier is required for DELETE,UPDATE and UPSERT actions");
+ return std::unexpected{"Identifier is required for DELETE,UPDATE and UPSERT actions"};
std::optional<rapidjson::Document> payload;
if (action == "index" || action == "create") {
payload = rapidjson::Document(rapidjson::kObjectType);
utils::JsonInputCallback callback(*payload);
if (session.read(flow_file, std::ref(callback)) < 0) {
- return nonstd::make_unexpected("invalid flowfile content");
+ return std::unexpected{"invalid flowfile content"};
}
}
if (action == "update" || action == "upsert") {
@@ -102,7 +102,7 @@ class ElasticPayload {
rapidjson::Document doc_member(rapidjson::kObjectType, &payload->GetAllocator());
utils::JsonInputCallback callback(doc_member);
if (session.read(flow_file, std::ref(callback)) < 0) {
- return nonstd::make_unexpected("invalid flowfile content");
+ return std::unexpected{"invalid flowfile content"};
}
if (action == "upsert") {
action = "update";
@@ -152,21 +152,21 @@ class ElasticPayload {
std::optional<rapidjson::Document> payload_;
};
-nonstd::expected<rapidjson::Document, std::string> submitRequest(http::HTTPClient& client, const std::string& payload, const size_t expected_items) {
+std::expected<rapidjson::Document, std::string> submitRequest(http::HTTPClient& client, const std::string& payload, const size_t expected_items) {
client.setPostFields(payload);
if (!client.submit())
- return nonstd::make_unexpected("Submit failed");
+ return std::unexpected{"Submit failed"};
auto response_code = client.getResponseCode();
if (response_code != 200)
- return nonstd::make_unexpected("Error occurred: " + std::to_string(response_code) + ", " + client.getResponseBody().data());
+ return std::unexpected{"Error occurred: " + std::to_string(response_code) + ", " + client.getResponseBody().data()};
rapidjson::Document response;
rapidjson::ParseResult parse_result = response.Parse<rapidjson::kParseStopWhenDoneFlag>(client.getResponseBody().data());
if (parse_result.IsError())
- return nonstd::make_unexpected("Response is not valid json");
+ return std::unexpected{"Response is not valid json"};
if (!response.HasMember("items"))
- return nonstd::make_unexpected("Response is invalid");
+ return std::unexpected{"Response is invalid"};
if (response["items"].Size() != expected_items)
- return nonstd::make_unexpected("The number of responses dont match the number of requests");
+ return std::unexpected{"The number of responses dont match the number of requests"};
return response;
}
diff --git a/extensions/grafana-loki/PushGrafanaLoki.h b/extensions/grafana-loki/PushGrafanaLoki.h
index d44669074..35f6bc088 100644
--- a/extensions/grafana-loki/PushGrafanaLoki.h
+++ b/extensions/grafana-loki/PushGrafanaLoki.h
@@ -134,7 +134,7 @@ class PushGrafanaLoki : public core::ProcessorImpl {
static std::map<std::string, std::string> buildStreamLabelMap(core::ProcessContext& context);
void processBatch(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session);
- virtual nonstd::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) = 0;
+ virtual std::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) = 0;
void initializeHttpClient(core::ProcessContext& context);
void restoreStartPushTime(core::ProcessContext& context);
virtual void setUpStreamLabels(core::ProcessContext& context) = 0;
diff --git a/extensions/grafana-loki/PushGrafanaLokiGrpc.cpp b/extensions/grafana-loki/PushGrafanaLokiGrpc.cpp
index 932c218d2..53428988f 100644
--- a/extensions/grafana-loki/PushGrafanaLokiGrpc.cpp
+++ b/extensions/grafana-loki/PushGrafanaLokiGrpc.cpp
@@ -109,7 +109,7 @@ void PushGrafanaLokiGrpc::onSchedule(core::ProcessContext& context, core::Proces
setUpGrpcChannel(url, context);
}
-nonstd::expected<void, std::string> PushGrafanaLokiGrpc::submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) {
+std::expected<void, std::string> PushGrafanaLokiGrpc::submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) {
logproto::PushRequest current_batch;
logproto::StreamAdapter *stream = current_batch.add_streams();
stream->set_labels(stream_labels_);
@@ -135,7 +135,7 @@ nonstd::expected<void, std::string> PushGrafanaLokiGrpc::submitRequest(const std
}
if (!push_channel_->WaitForConnected(std::chrono::system_clock::now() + connection_timeout_ms_)) {
- return nonstd::make_unexpected("Timeout waiting for connection to Grafana Loki gRPC server. Please check if the server is running and reachable and the Url value is correct.");
+ return std::unexpected{"Timeout waiting for connection to Grafana Loki gRPC server. Please check if the server is running and reachable and the Url value is correct."};
}
logproto::PushResponse response;
@@ -148,7 +148,7 @@ nonstd::expected<void, std::string> PushGrafanaLokiGrpc::submitRequest(const std
if (status.ok()) {
return {};
} else {
- return nonstd::make_unexpected(status.error_message());
+ return std::unexpected{status.error_message()};
}
}
diff --git a/extensions/grafana-loki/PushGrafanaLokiGrpc.h b/extensions/grafana-loki/PushGrafanaLokiGrpc.h
index 9d9726648..8ba3e0db9 100644
--- a/extensions/grafana-loki/PushGrafanaLokiGrpc.h
+++ b/extensions/grafana-loki/PushGrafanaLokiGrpc.h
@@ -58,7 +58,7 @@ class PushGrafanaLokiGrpc final : public PushGrafanaLoki {
protected:
void setUpStreamLabels(core::ProcessContext& context) override;
- nonstd::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) override;
+ std::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) override;
void setUpGrpcChannel(const std::string& url, core::ProcessContext& context);
std::string stream_labels_;
diff --git a/extensions/grafana-loki/PushGrafanaLokiREST.cpp b/extensions/grafana-loki/PushGrafanaLokiREST.cpp
index 8b421dbb7..fd01e15d4 100644
--- a/extensions/grafana-loki/PushGrafanaLokiREST.cpp
+++ b/extensions/grafana-loki/PushGrafanaLokiREST.cpp
@@ -158,15 +158,15 @@ std::string PushGrafanaLokiREST::createLokiJson(const std::vector<std::shared_pt
return buffer.GetString();
}
-nonstd::expected<void, std::string> PushGrafanaLokiREST::submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) {
+std::expected<void, std::string> PushGrafanaLokiREST::submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) {
auto loki_json = createLokiJson(batched_flow_files, session);
client_.setPostFields(loki_json);
if (!client_.submit()) {
- return nonstd::make_unexpected("Submit failed");
+ return std::unexpected{"Submit failed"};
}
auto response_code = client_.getResponseCode();
if (response_code < 200 || response_code >= 300) {
- return nonstd::make_unexpected("Error occurred: " + std::to_string(response_code));
+ return std::unexpected{"Error occurred: " + std::to_string(response_code)};
}
return {};
}
diff --git a/extensions/grafana-loki/PushGrafanaLokiREST.h b/extensions/grafana-loki/PushGrafanaLokiREST.h
index 93448b09c..62bac0ea5 100644
--- a/extensions/grafana-loki/PushGrafanaLokiREST.h
+++ b/extensions/grafana-loki/PushGrafanaLokiREST.h
@@ -59,7 +59,7 @@ class PushGrafanaLokiREST : public PushGrafanaLoki {
protected:
std::string createLokiJson(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) const;
- nonstd::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) override;
+ std::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) override;
void initializeHttpClient(core::ProcessContext& context);
void setUpStreamLabels(core::ProcessContext& context) override;
void setupClientTimeouts(const core::ProcessContext& context);
diff --git a/extensions/kubernetes/MetricsApi.cpp b/extensions/kubernetes/MetricsApi.cpp
index f392079c9..fbcfb7a9c 100644
--- a/extensions/kubernetes/MetricsApi.cpp
+++ b/extensions/kubernetes/MetricsApi.cpp
@@ -32,13 +32,13 @@ using genericClient_unique_ptr = std::unique_ptr<genericClient_t, genericClient_
namespace org::apache::nifi::minifi::kubernetes::metrics {
-nonstd::expected<std::string, std::string> podMetricsList(const kubernetes::ApiClient& api_client) {
+std::expected<std::string, std::string> podMetricsList(const kubernetes::ApiClient& api_client) {
genericClient_unique_ptr genericClient{genericClient_create(api_client.getClient(), "metrics.k8s.io", "v1beta1", "pods")};
utils::freeing_unique_ptr<char> api_response{Generic_list(genericClient.get())};
if (api_response) {
return std::string{api_response.get()};
} else {
- return nonstd::make_unexpected("Could not access the Kubernetes API /apis/metrics.k8s.io/v1beta1/pods");
+ return std::unexpected{"Could not access the Kubernetes API /apis/metrics.k8s.io/v1beta1/pods"};
}
}
diff --git a/extensions/kubernetes/MetricsApi.h b/extensions/kubernetes/MetricsApi.h
index bcbfad65a..f0ff656d1 100644
--- a/extensions/kubernetes/MetricsApi.h
+++ b/extensions/kubernetes/MetricsApi.h
@@ -24,6 +24,6 @@
namespace org::apache::nifi::minifi::kubernetes::metrics {
-nonstd::expected<std::string, std::string> podMetricsList(const kubernetes::ApiClient& api_client);
+std::expected<std::string, std::string> podMetricsList(const kubernetes::ApiClient& api_client);
} // namespace org::apache::nifi::minifi::kubernetes::metrics
diff --git a/extensions/kubernetes/MetricsFilter.cpp b/extensions/kubernetes/MetricsFilter.cpp
index 5538582cb..98a5ff62b 100644
--- a/extensions/kubernetes/MetricsFilter.cpp
+++ b/extensions/kubernetes/MetricsFilter.cpp
@@ -24,16 +24,16 @@
namespace org::apache::nifi::minifi::kubernetes::metrics {
-nonstd::expected<std::string, std::string> filter(const std::string& metrics_json, const std::function<bool(const kubernetes::ContainerInfo&)>& filter_function) {
+std::expected<std::string, std::string> filter(const std::string& metrics_json, const std::function<bool(const kubernetes::ContainerInfo&)>& filter_function) {
rapidjson::Document document;
rapidjson::ParseResult parse_result = document.Parse<rapidjson::kParseStopWhenDoneFlag>(metrics_json.data());
if (parse_result.IsError()) {
- return nonstd::make_unexpected(utils::string::join_pack("Error parsing the metrics received from the Kubernetes API at offset ",
- std::to_string(parse_result.Offset()), ": ", rapidjson::GetParseError_En(parse_result.Code())));
+ return std::unexpected{utils::string::join_pack("Error parsing the metrics received from the Kubernetes API at offset ",
+ std::to_string(parse_result.Offset()), ": ", rapidjson::GetParseError_En(parse_result.Code()))};
}
if (!document.HasMember("items") || !document["items"].IsArray()) {
- return nonstd::make_unexpected("Unexpected JSON received from the Kubernetes API: missing list of 'items'");
+ return std::unexpected{"Unexpected JSON received from the Kubernetes API: missing list of 'items'"};
}
rapidjson::Value& pods = document["items"];
diff --git a/extensions/kubernetes/MetricsFilter.h b/extensions/kubernetes/MetricsFilter.h
index 3ed60131a..709f0e4f3 100644
--- a/extensions/kubernetes/MetricsFilter.h
+++ b/extensions/kubernetes/MetricsFilter.h
@@ -24,7 +24,7 @@
namespace org::apache::nifi::minifi::kubernetes::metrics {
-[[nodiscard]] nonstd::expected<std::string, std::string> filter(
+[[nodiscard]] std::expected<std::string, std::string> filter(
const std::string& metrics_json,
const std::function<bool(const kubernetes::ContainerInfo&)>& filter_function);
diff --git a/extensions/llamacpp/processors/DefaultLlamaContext.cpp b/extensions/llamacpp/processors/DefaultLlamaContext.cpp
index cc8fb017d..23559fb7c 100644
--- a/extensions/llamacpp/processors/DefaultLlamaContext.cpp
+++ b/extensions/llamacpp/processors/DefaultLlamaContext.cpp
@@ -108,7 +108,7 @@ std::optional<std::string> DefaultLlamaContext::applyTemplate(const std::vector<
return text;
}
-nonstd::expected<GenerationResult, std::string> DefaultLlamaContext::generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) {
+std::expected<GenerationResult, std::string> DefaultLlamaContext::generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) {
GenerationResult result{};
auto start_time = std::chrono::steady_clock::now();
const llama_vocab * vocab = llama_model_get_vocab(llama_model_);
@@ -121,9 +121,9 @@ nonstd::expected<GenerationResult, std::string> DefaultLlamaContext::generate(co
while (true) {
int32_t res = llama_decode(llama_ctx_, batch);
if (res == 1) {
- return nonstd::make_unexpected("Could not find a KV slot for the batch (try reducing the size of the batch or increase the context)");
+ return std::unexpected{"Could not find a KV slot for the batch (try reducing the size of the batch or increase the context)"};
} else if (res < 0) {
- return nonstd::make_unexpected("Error occurred while executing llama decode");
+ return std::unexpected{"Error occurred while executing llama decode"};
}
new_token_id = llama_sampler_sample(llama_sampler_, llama_ctx_, -1);
@@ -142,7 +142,7 @@ nonstd::expected<GenerationResult, std::string> DefaultLlamaContext::generate(co
std::array<char, 128> buf{};
int32_t len = llama_token_to_piece(vocab, new_token_id, buf.data(), gsl::narrow<int32_t>(buf.size()), 0, true);
if (len < 0) {
- return nonstd::make_unexpected("Failed to convert token to text");
+ return std::unexpected{"Failed to convert token to text"};
}
gsl_Assert(len < 128);
diff --git a/extensions/llamacpp/processors/DefaultLlamaContext.h b/extensions/llamacpp/processors/DefaultLlamaContext.h
index 2d2bdf562..94c3346b2 100644
--- a/extensions/llamacpp/processors/DefaultLlamaContext.h
+++ b/extensions/llamacpp/processors/DefaultLlamaContext.h
@@ -32,7 +32,7 @@ class DefaultLlamaContext : public LlamaContext {
~DefaultLlamaContext() override;
std::optional<std::string> applyTemplate(const std::vector<LlamaChatMessage>& messages) override;
- nonstd::expected<GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) override;
+ std::expected<GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) override;
private:
const LlamaBackendInitializer& llama_context_initializer_ = LlamaBackendInitializer::get();
diff --git a/extensions/llamacpp/processors/LlamaContext.h b/extensions/llamacpp/processors/LlamaContext.h
index 3c107c2c5..a7cd2eb44 100644
--- a/extensions/llamacpp/processors/LlamaContext.h
+++ b/extensions/llamacpp/processors/LlamaContext.h
@@ -59,7 +59,7 @@ struct GenerationResult {
class LlamaContext {
public:
virtual std::optional<std::string> applyTemplate(const std::vector<LlamaChatMessage>& messages) = 0;
- virtual nonstd::expected<GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) = 0;
+ virtual std::expected<GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) = 0;
virtual ~LlamaContext() = default;
};
diff --git a/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp b/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
index 13754f1f5..9fa893fba 100644
--- a/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
+++ b/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
@@ -37,9 +37,9 @@ class MockLlamaContext : public processors::LlamaContext {
return "Test input";
}
- nonstd::expected<processors::GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) override {
+ std::expected<processors::GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) override {
if (fail_generation_) {
- return nonstd::make_unexpected("Generation failed");
+ return std::unexpected{"Generation failed"};
}
processors::GenerationResult result;
input_ = input;
diff --git a/extensions/mqtt/processors/PublishMQTT.cpp b/extensions/mqtt/processors/PublishMQTT.cpp
index 24bc72e90..576bf98e6 100644
--- a/extensions/mqtt/processors/PublishMQTT.cpp
+++ b/extensions/mqtt/processors/PublishMQTT.cpp
@@ -65,7 +65,7 @@ void PublishMQTT::onTriggerImpl(core::ProcessContext& context, core::ProcessSess
std::vector<std::shared_ptr<core::FlowFile>> flow_files;
if (record_converter_) {
- nonstd::expected<core::RecordSet, std::error_code> record_set;
+ std::expected<core::RecordSet, std::error_code> record_set;
session.read(original_flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
record_set = record_converter_->record_set_reader->read(*input_stream);
return io::IoResult::from(input_stream->size());
diff --git a/extensions/opc/include/putopc.h b/extensions/opc/include/putopc.h
index d98ac23b9..5aba702b8 100644
--- a/extensions/opc/include/putopc.h
+++ b/extensions/opc/include/putopc.h
@@ -118,7 +118,7 @@ class PutOPCProcessor final : public BaseOPCProcessor {
private:
bool readParentNodeId();
- nonstd::expected<std::pair<bool, UA_NodeId>, std::string> configureTargetNode(core::ProcessContext& context, core::FlowFile& flow_file) const;
+ std::expected<std::pair<bool, UA_NodeId>, std::string> configureTargetNode(core::ProcessContext& context, core::FlowFile& flow_file) const;
void updateNode(const UA_NodeId& target_node, const std::string& contentstr, core::ProcessSession& session, const std::shared_ptr<core::FlowFile>& flow_file) const;
void createNode(const UA_NodeId& target_node, const std::string& contentstr, core::ProcessContext& context, core::ProcessSession& session, const std::shared_ptr<core::FlowFile>& flow_file) const;
diff --git a/extensions/opc/src/putopc.cpp b/extensions/opc/src/putopc.cpp
index 1d6247571..e253d6765 100644
--- a/extensions/opc/src/putopc.cpp
+++ b/extensions/opc/src/putopc.cpp
@@ -88,29 +88,29 @@ bool PutOPCProcessor::readParentNodeId() {
return true;
}
-nonstd::expected<std::pair<bool, UA_NodeId>, std::string> PutOPCProcessor::configureTargetNode(core::ProcessContext& context, core::FlowFile& flow_file) const {
+std::expected<std::pair<bool, UA_NodeId>, std::string> PutOPCProcessor::configureTargetNode(core::ProcessContext& context, core::FlowFile& flow_file) const {
const auto namespaceidx = context.getProperty(TargetNodeNameSpaceIndex, &flow_file).value_or("");
if (namespaceidx.empty()) {
- return nonstd::make_unexpected(fmt::format("Flowfile {} had no target namespace index specified, routing to failure!", flow_file.getUUIDStr()));
+ return std::unexpected{fmt::format("Flowfile {} had no target namespace index specified, routing to failure!", flow_file.getUUIDStr())};
}
int32_t nsi = 0;
try {
nsi = std::stoi(namespaceidx);
} catch (const std::exception&) {
- return nonstd::make_unexpected(fmt::format("Flowfile {} has invalid namespace index ({}), routing to failure!",
- flow_file.getUUIDStr(), namespaceidx));
+ return std::unexpected{fmt::format("Flowfile {} has invalid namespace index ({}), routing to failure!",
+ flow_file.getUUIDStr(), namespaceidx)};
}
const auto target_id_type = context.getProperty(TargetNodeIDType, &flow_file).value_or("");
if (target_id_type.empty()) {
- return nonstd::make_unexpected(fmt::format("Flowfile {} has invalid target node id type, routing to failure!",
- flow_file.getUUIDStr()));
+ return std::unexpected{fmt::format("Flowfile {} has invalid target node id type, routing to failure!",
+ flow_file.getUUIDStr())};
}
const auto target_id = context.getProperty(TargetNodeID, &flow_file).value_or("");
if (target_id.empty()) {
- return nonstd::make_unexpected(fmt::format("Flowfile {} had target node ID type specified ({}) without ID, routing to failure!",
- flow_file.getUUIDStr(), target_id_type));
+ return std::unexpected{fmt::format("Flowfile {} had target node ID type specified ({}) without ID, routing to failure!",
+ flow_file.getUUIDStr(), target_id_type)};
}
UA_NodeId target_node;
@@ -120,15 +120,15 @@ nonstd::expected<std::pair<bool, UA_NodeId>, std::string> PutOPCProcessor::confi
try {
target_node.identifier.numeric = std::stoi(target_id); // NOLINT(cppcoreguidelines-pro-type-union-access)
} catch (const std::exception&) {
- return nonstd::make_unexpected(fmt::format("Flowfile {}: target node ID is not a valid integer: {}. Routing to failure!",
- flow_file.getUUIDStr(), target_id));
+ return std::unexpected{fmt::format("Flowfile {}: target node ID is not a valid integer: {}. Routing to failure!",
+ flow_file.getUUIDStr(), target_id)};
}
} else if (target_id_type == "String") {
target_node.identifierType = UA_NODEIDTYPE_STRING;
target_node.identifier.string = UA_STRING_ALLOC(target_id.c_str()); // NOLINT(cppcoreguidelines-pro-type-union-access)
} else {
- return nonstd::make_unexpected(fmt::format("Flowfile {}: target node ID type is invalid: {}. Routing to failure!",
- flow_file.getUUIDStr(), target_id_type));
+ return std::unexpected{fmt::format("Flowfile {}: target node ID type is invalid: {}. Routing to failure!",
+ flow_file.getUUIDStr(), target_id_type)};
}
return std::make_pair(connection_->exists(target_node), target_node);
}
diff --git a/extensions/python/types/PyRecordSetReader.cpp b/extensions/python/types/PyRecordSetReader.cpp
index 815d2d642..2e9a25aaa 100644
--- a/extensions/python/types/PyRecordSetReader.cpp
+++ b/extensions/python/types/PyRecordSetReader.cpp
@@ -86,7 +86,7 @@ PyObject* PyRecordSetReader::read(PyRecordSetReader* self, PyObject* args) {
return nullptr;
}
- nonstd::expected<core::RecordSet, std::error_code> read_result;
+ std::expected<core::RecordSet, std::error_code> read_result;
process_session->getSession().read(flow_file, [&record_set_reader, &read_result](const std::shared_ptr<io::InputStream>& input_stream) {
read_result = record_set_reader->read(*input_stream);
return io::IoResult::from(input_stream->size());
diff --git a/extensions/rocksdb-repos/FlowFileLoader.cpp b/extensions/rocksdb-repos/FlowFileLoader.cpp
index 07b413739..c43438071 100644
--- a/extensions/rocksdb-repos/FlowFileLoader.cpp
+++ b/extensions/rocksdb-repos/FlowFileLoader.cpp
@@ -50,7 +50,7 @@ std::future<FlowFileLoader::FlowFilePtrVec> FlowFileLoader::load(std::vector<Swa
// the dummy_future is for the return value of the Worker's lambda, rerunning this lambda
// depends on run_determinant + result
// we could create a custom run_determinant to instead determine if/when it should be rerun
- // based on the lambda's return value (e.g. it could return a nonstd::expected<FlowFilePtrVec, TaskRescheduleInfo>)
+ // based on the lambda's return value (e.g. it could return a std::expected<FlowFilePtrVec, TaskRescheduleInfo>)
// but then the std::future would also bear this type
std::future<utils::TaskRescheduleInfo> dummy_future;
thread_pool_.execute(std::move(task), dummy_future);
diff --git a/extensions/smb/SmbConnectionControllerService.cpp b/extensions/smb/SmbConnectionControllerService.cpp
index 3a9c930a5..a2b212912 100644
--- a/extensions/smb/SmbConnectionControllerService.cpp
+++ b/extensions/smb/SmbConnectionControllerService.cpp
@@ -59,7 +59,7 @@ void SmbConnectionControllerService::notifyStop() {
logger_->log_error("Error while disconnecting from SMB: {}", disconnection_result.error().message());
}
-nonstd::expected<void, std::error_code> SmbConnectionControllerService::connect() {
+std::expected<void, std::error_code> SmbConnectionControllerService::connect() {
auto connection_result = WNetAddConnection2A(&net_resource_,
credentials_ ? credentials_->password.c_str() : nullptr,
credentials_ ? credentials_->username.c_str() : nullptr,
@@ -67,15 +67,15 @@ nonstd::expected<void, std::error_code> SmbConnectionControllerService::connect(
if (connection_result == NO_ERROR)
return {};
- return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(connection_result));
+ return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(connection_result)};
}
-nonstd::expected<void, std::error_code> SmbConnectionControllerService::disconnect() {
+std::expected<void, std::error_code> SmbConnectionControllerService::disconnect() {
auto disconnection_result = WNetCancelConnection2A(server_path_.c_str(), 0, true);
if (disconnection_result == NO_ERROR)
return {};
- return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(disconnection_result));
+ return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(disconnection_result)};
}
bool SmbConnectionControllerService::isConnected() {
diff --git a/extensions/smb/SmbConnectionControllerService.h b/extensions/smb/SmbConnectionControllerService.h
index 22894badc..f84728974 100644
--- a/extensions/smb/SmbConnectionControllerService.h
+++ b/extensions/smb/SmbConnectionControllerService.h
@@ -84,8 +84,8 @@ class SmbConnectionControllerService : public core::controller::ControllerServic
virtual std::filesystem::path getPath() const { return server_path_; }
private:
- nonstd::expected<void, std::error_code> connect();
- nonstd::expected<void, std::error_code> disconnect();
+ std::expected<void, std::error_code> connect();
+ std::expected<void, std::error_code> disconnect();
bool isConnected();
struct Credentials {
diff --git a/extensions/smb/tests/utils/MockSmbConnectionControllerService.h b/extensions/smb/tests/utils/MockSmbConnectionControllerService.h
index bc158df48..8698fa3b1 100644
--- a/extensions/smb/tests/utils/MockSmbConnectionControllerService.h
+++ b/extensions/smb/tests/utils/MockSmbConnectionControllerService.h
@@ -73,7 +73,7 @@ class MockSmbConnectionControllerService : public SmbConnectionControllerService
void setPath(std::filesystem::path path) { server_path_ = std::move(path);}
- nonstd::expected<ListSmbExpectedAttributes, std::error_code> addFile(const std::filesystem::path& relative_path,
+ std::expected<ListSmbExpectedAttributes, std::error_code> addFile(const std::filesystem::path& relative_path,
std::string_view content,
std::chrono::file_clock::duration age) {
auto full_path = getPath() / relative_path;
@@ -81,13 +81,13 @@ class MockSmbConnectionControllerService : public SmbConnectionControllerService
{
std::ofstream out_file(full_path, std::ios::binary | std::ios::out);
if (!out_file.is_open())
- return nonstd::make_unexpected(std::make_error_code(std::errc::bad_file_descriptor));
+ return std::unexpected{std::make_error_code(std::errc::bad_file_descriptor)};
out_file << content;
}
auto current_time = std::chrono::system_clock::now();
auto last_write_time_error = utils::file::set_last_write_time(full_path, minifi::utils::file::from_sys(current_time) - age);
if (!last_write_time_error)
- return nonstd::make_unexpected(std::make_error_code(std::errc::bad_file_descriptor));
+ return std::unexpected{std::make_error_code(std::errc::bad_file_descriptor)};
auto path = relative_path.parent_path().empty() ? (std::filesystem::path(".") / "").string() : (relative_path.parent_path() / "").string();
return ListSmbExpectedAttributes{
.expected_filename = relative_path.filename().string(),
diff --git a/extensions/smb/tests/utils/TempSmbShare.h b/extensions/smb/tests/utils/TempSmbShare.h
index 170261a6e..e43690f0f 100644
--- a/extensions/smb/tests/utils/TempSmbShare.h
+++ b/extensions/smb/tests/utils/TempSmbShare.h
@@ -40,7 +40,7 @@ class TempSmbShare {
NetShareDel(nullptr, net_name_.data(), 0);
}
- static nonstd::expected<TempSmbShare, std::error_code> create(std::wstring net_name, std::wstring path) {
+ static std::expected<TempSmbShare, std::error_code> create(std::wstring net_name, std::wstring path) {
std::wstring remark = L"SMB share to test SMB capabilities of minifi";
SHARE_INFO_502 share_info = {
.shi502_netname = net_name.data(),
@@ -59,7 +59,7 @@ class TempSmbShare {
if (netshare_result == NERR_Success) {
return TempSmbShare(std::move(net_name), std::move(path));
}
- return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(netshare_result));
+ return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(netshare_result)};
}
std::filesystem::path getPath() const {
diff --git a/extensions/sql/CMakeLists.txt b/extensions/sql/CMakeLists.txt
index b6801df7d..849426f12 100644
--- a/extensions/sql/CMakeLists.txt
+++ b/extensions/sql/CMakeLists.txt
@@ -53,7 +53,7 @@ else()
CMAKE_COMMAND ""
UPDATE_COMMAND ""
INSTALL_COMMAND make install
- CONFIGURE_COMMAND ./autogen.sh && ./configure --prefix=${IODBC_BYPRODUCT_DIR} --with-pic
+ CONFIGURE_COMMAND bash "-c" "./autogen.sh && ./configure --prefix=${IODBC_BYPRODUCT_DIR} --with-pic CFLAGS='${CMAKE_C_FLAGS} -std=gnu17'"
STEP_TARGETS build
BUILD_BYPRODUCTS "${IODBC_BYPRODUCT_DIR}/${IODBC_BYPRODUCT}"
EXCLUDE_FROM_ALL TRUE
diff --git a/extensions/standard-processors/CMakeLists.txt b/extensions/standard-processors/CMakeLists.txt
index 100bae576..bd16be04f 100644
--- a/extensions/standard-processors/CMakeLists.txt
+++ b/extensions/standard-processors/CMakeLists.txt
@@ -30,8 +30,6 @@ include(Asio)
include(Jsoncons)
target_link_libraries(minifi-standard-processors ${LIBMINIFI} Threads::Threads range-v3 asio pugixml jsoncons)
-include(Coroutines)
-enable_coroutines()
register_extension(minifi-standard-processors "STANDARD PROCESSORS" STANDARD-PROCESSORS "Provides standard processors" "extensions/standard-processors/tests/")
diff --git a/extensions/standard-processors/controllers/JsonTreeReader.cpp b/extensions/standard-processors/controllers/JsonTreeReader.cpp
index c7bd1d5d6..662f31dc1 100644
--- a/extensions/standard-processors/controllers/JsonTreeReader.cpp
+++ b/extensions/standard-processors/controllers/JsonTreeReader.cpp
@@ -29,7 +29,7 @@ namespace org::apache::nifi::minifi::standard {
namespace {
-nonstd::expected<core::RecordField, std::error_code> parse(const rapidjson::Value& json_value) {
+std::expected<core::RecordField, std::error_code> parse(const rapidjson::Value& json_value) {
if (json_value.IsDouble()) {
return core::RecordField{json_value.GetDouble()};
}
@@ -47,7 +47,7 @@ nonstd::expected<core::RecordField, std::error_code> parse(const rapidjson::Valu
for (const auto& element : json_value.GetArray()) {
auto element_field = parse(element);
if (!element_field)
- return nonstd::make_unexpected(element_field.error());
+ return std::unexpected{element_field.error()};
record_array.push_back(std::move(*element_field));
}
return core::RecordField{std::move(record_array)};
@@ -58,33 +58,33 @@ nonstd::expected<core::RecordField, std::error_code> parse(const rapidjson::Valu
auto element_key = m.name.GetString();
auto element_field = parse(m.value);
if (!element_field)
- return nonstd::make_unexpected(element_field.error());
+ return std::unexpected{element_field.error()};
record_object.emplace(element_key, std::move(*element_field));
}
- // Workaround for GCC 12 false positive -Wfree-nonheap-object https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99098
-#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ <= 12)
+ // Workaround for GCC false positive -Wfree-nonheap-object https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99098
+#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
#endif
return core::RecordField{std::move(record_object)};
-#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ <= 12)
+#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif
}
- return nonstd::make_unexpected(std::make_error_code(std::errc::invalid_argument));
+ return std::unexpected{std::make_error_code(std::errc::invalid_argument)};
}
-nonstd::expected<core::Record, std::error_code> parseRecord(rapidjson::Value& record_json) {
+std::expected<core::Record, std::error_code> parseRecord(rapidjson::Value& record_json) {
core::Record result;
if (!record_json.IsObject()) {
- return nonstd::make_unexpected(std::make_error_code(std::errc::invalid_argument));
+ return std::unexpected{std::make_error_code(std::errc::invalid_argument)};
}
for (const auto& member : record_json.GetObject()) {
const auto element_key = member.name.GetString();
auto element_field = parse(member.value);
if (!element_field)
- return nonstd::make_unexpected(element_field.error());
+ return std::unexpected{element_field.error()};
result.emplace(element_key, std::move(*element_field));
}
return result;
@@ -121,7 +121,7 @@ bool readAsArray(const std::string& content, core::RecordSet& record_set) {
return true;
}
-nonstd::expected<core::RecordSet, std::error_code> JsonTreeReader::read(io::InputStream& input_stream) {
+std::expected<core::RecordSet, std::error_code> JsonTreeReader::read(io::InputStream& input_stream) {
core::RecordSet record_set{};
const auto read_result = [&record_set](io::InputStream& input_stream) -> size_t {
std::string content;
@@ -138,7 +138,7 @@ nonstd::expected<core::RecordSet, std::error_code> JsonTreeReader::read(io::Inpu
return read_ret;
}(input_stream);
if (io::isError(read_result))
- return nonstd::make_unexpected(std::make_error_code(std::errc::invalid_argument));
+ return std::unexpected{std::make_error_code(std::errc::invalid_argument)};
return record_set;
}
diff --git a/extensions/standard-processors/controllers/JsonTreeReader.h b/extensions/standard-processors/controllers/JsonTreeReader.h
index 28b41c688..91addd91c 100644
--- a/extensions/standard-processors/controllers/JsonTreeReader.h
+++ b/extensions/standard-processors/controllers/JsonTreeReader.h
@@ -44,7 +44,7 @@ class JsonTreeReader final : public core::RecordSetReaderImpl {
EXTENSIONAPI static constexpr auto ImplementsApis = std::array{ RecordSetReader::ProvidesApi };
ADD_COMMON_VIRTUAL_FUNCTIONS_FOR_CONTROLLER_SERVICES
- nonstd::expected<core::RecordSet, std::error_code> read(io::InputStream& input_stream) override;
+ std::expected<core::RecordSet, std::error_code> read(io::InputStream& input_stream) override;
void initialize() override {
setSupportedProperties(Properties);
diff --git a/extensions/standard-processors/controllers/XMLReader.cpp b/extensions/standard-processors/controllers/XMLReader.cpp
index 88cebe7ba..980ccc721 100644
--- a/extensions/standard-processors/controllers/XMLReader.cpp
+++ b/extensions/standard-processors/controllers/XMLReader.cpp
@@ -182,7 +182,7 @@ void XMLReader::onEnable() {
expect_records_as_array_ = parseBoolProperty(ExpectRecordsAsArray.name);
}
-nonstd::expected<core::RecordSet, std::error_code> XMLReader::read(io::InputStream& input_stream) {
+std::expected<core::RecordSet, std::error_code> XMLReader::read(io::InputStream& input_stream) {
core::RecordSet record_set{};
const auto read_result = [this, &record_set](io::InputStream& input_stream) -> size_t {
std::string content;
@@ -198,7 +198,7 @@ nonstd::expected<core::RecordSet, std::error_code> XMLReader::read(io::InputStre
return read_ret;
}(input_stream);
if (io::isError(read_result)) {
- return nonstd::make_unexpected(std::make_error_code(std::errc::invalid_argument));
+ return std::unexpected{std::make_error_code(std::errc::invalid_argument)};
}
return record_set;
}
diff --git a/extensions/standard-processors/controllers/XMLReader.h b/extensions/standard-processors/controllers/XMLReader.h
index 7ad5f3301..1222b7576 100644
--- a/extensions/standard-processors/controllers/XMLReader.h
+++ b/extensions/standard-processors/controllers/XMLReader.h
@@ -69,7 +69,7 @@ class XMLReader final : public core::RecordSetReaderImpl {
EXTENSIONAPI static constexpr auto ImplementsApis = std::array{ RecordSetReader::ProvidesApi };
ADD_COMMON_VIRTUAL_FUNCTIONS_FOR_CONTROLLER_SERVICES
- nonstd::expected<core::RecordSet, std::error_code> read(io::InputStream& input_stream) override;
+ std::expected<core::RecordSet, std::error_code> read(io::InputStream& input_stream) override;
void initialize() override {
setSupportedProperties(Properties);
diff --git a/extensions/standard-processors/modbus/FetchModbusTcp.cpp b/extensions/standard-processors/modbus/FetchModbusTcp.cpp
index 1969d7ea0..ad988de9a 100644
--- a/extensions/standard-processors/modbus/FetchModbusTcp.cpp
+++ b/extensions/standard-processors/modbus/FetchModbusTcp.cpp
@@ -168,16 +168,16 @@ void FetchModbusTcp::processFlowFile(const std::shared_ptr<utils::net::Connectio
}
}
-nonstd::expected<core::Record, std::error_code> FetchModbusTcp::readModbus(
+std::expected<core::Record, std::error_code> FetchModbusTcp::readModbus(
const std::shared_ptr<utils::net::ConnectionHandlerBase>& connection_handler,
const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map) {
- nonstd::expected<core::Record, std::error_code> result;
+ std::expected<core::Record, std::error_code> result;
io_context_.restart();
asio::co_spawn(io_context_,
sendRequestsAndReadResponses(*connection_handler, address_map),
[&result](const std::exception_ptr& exception_ptr, auto res) {
if (exception_ptr) {
- result = nonstd::make_unexpected(ModbusExceptionCode::InvalidResponse);
+ result = std::unexpected{ModbusExceptionCode::InvalidResponse};
} else {
result = std::move(res);
}
@@ -187,13 +187,13 @@ nonstd::expected<core::Record, std::error_code> FetchModbusTcp::readModbus(
}
auto FetchModbusTcp::sendRequestsAndReadResponses(utils::net::ConnectionHandlerBase& connection_handler,
- const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map) -> asio::awaitable<nonstd::expected<core::Record, std::error_code>> {
+ const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map) -> asio::awaitable<std::expected<core::Record, std::error_code>> {
core::Record result;
for (const auto& [variable, read_modbus_fn] : address_map) {
gsl_Expects(read_modbus_fn);
auto response = co_await sendRequestAndReadResponse(connection_handler, *read_modbus_fn);
if (!response) {
- co_return nonstd::make_unexpected(response.error());
+ co_return std::unexpected{response.error()};
}
result.emplace(variable, std::move(*response));
}
@@ -202,19 +202,19 @@ auto FetchModbusTcp::sendRequestsAndReadResponses(utils::net::ConnectionHandlerB
auto FetchModbusTcp::sendRequestAndReadResponse(utils::net::ConnectionHandlerBase& connection_handler,
- const ReadModbusFunction& read_modbus_function) -> asio::awaitable<nonstd::expected<core::RecordField, std::error_code>> {
+ const ReadModbusFunction& read_modbus_function) -> asio::awaitable<std::expected<core::RecordField, std::error_code>> {
if (auto connection_error = co_await connection_handler.setupUsableSocket(io_context_)) { // NOLINT (clang tidy doesnt like coroutines)
- co_return nonstd::make_unexpected(connection_error);
+ co_return std::unexpected{connection_error};
}
if (auto [write_error, bytes_written] = co_await connection_handler.write(asio::buffer(read_modbus_function.requestBytes())); write_error) {
- co_return nonstd::make_unexpected(write_error);
+ co_return std::unexpected{write_error};
}
std::array<std::byte, 7> apu_buffer{};
asio::mutable_buffer response_apu(apu_buffer.data(), 7);
if (auto [read_error, bytes_read] = co_await connection_handler.read(response_apu); read_error) {
- co_return nonstd::make_unexpected(read_error);
+ co_return std::unexpected{read_error};
}
const auto received_transaction_id = fromBytes<uint16_t>({apu_buffer[0], apu_buffer[1]});
@@ -223,23 +223,23 @@ auto FetchModbusTcp::sendRequestAndReadResponse(utils::net::ConnectionHandlerBas
const auto unit_id = static_cast<uint8_t>(apu_buffer[6]);
if (received_transaction_id != read_modbus_function.getTransactionId()) {
- co_return nonstd::make_unexpected(ModbusExceptionCode::InvalidTransactionId);
+ co_return std::unexpected{ModbusExceptionCode::InvalidTransactionId};
}
if (received_protocol != 0) {
- co_return nonstd::make_unexpected(ModbusExceptionCode::IllegalProtocol);
+ co_return std::unexpected{ModbusExceptionCode::IllegalProtocol};
}
if (unit_id != read_modbus_function.getUnitId()) {
- co_return nonstd::make_unexpected(ModbusExceptionCode::InvalidSlaveId);
+ co_return std::unexpected{ModbusExceptionCode::InvalidSlaveId};
}
if (received_length + 6 > 260 || received_length <= 1) {
- co_return nonstd::make_unexpected(ModbusExceptionCode::InvalidResponse);
+ co_return std::unexpected{ModbusExceptionCode::InvalidResponse};
}
std::array<std::byte, 260-7> pdu_buffer{};
asio::mutable_buffer response_pdu(pdu_buffer.data(), received_length-1);
auto [read_error, bytes_read] = co_await connection_handler.read(response_pdu);
if (read_error) {
- co_return nonstd::make_unexpected(read_error);
+ co_return std::unexpected{read_error};
}
const auto pdu_span = std::span<std::byte>(pdu_buffer.data(), received_length-1);
diff --git a/extensions/standard-processors/modbus/FetchModbusTcp.h b/extensions/standard-processors/modbus/FetchModbusTcp.h
index 68fe9cffd..a9cb07966 100644
--- a/extensions/standard-processors/modbus/FetchModbusTcp.h
+++ b/extensions/standard-processors/modbus/FetchModbusTcp.h
@@ -117,11 +117,11 @@ class FetchModbusTcp final : public core::ProcessorImpl {
core::ProcessSession& session,
const std::shared_ptr<core::FlowFile>& flow_file);
- nonstd::expected<core::Record, std::error_code> readModbus(const std::shared_ptr<utils::net::ConnectionHandlerBase>& connection_handler,
+ std::expected<core::Record, std::error_code> readModbus(const std::shared_ptr<utils::net::ConnectionHandlerBase>& connection_handler,
const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map);
- asio::awaitable<nonstd::expected<core::Record, std::error_code>> sendRequestsAndReadResponses(utils::net::ConnectionHandlerBase& connection_handler,
+ asio::awaitable<std::expected<core::Record, std::error_code>> sendRequestsAndReadResponses(utils::net::ConnectionHandlerBase& connection_handler,
const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map);
- asio::awaitable<nonstd::expected<core::RecordField, std::error_code>> sendRequestAndReadResponse(utils::net::ConnectionHandlerBase& connection_handler,
+ asio::awaitable<std::expected<core::RecordField, std::error_code>> sendRequestAndReadResponse(utils::net::ConnectionHandlerBase& connection_handler,
const ReadModbusFunction& read_modbus_function);
std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>> getAddressMap(core::ProcessContext& context, const core::FlowFile& flow_file);
static std::shared_ptr<core::FlowFile> getOrCreateFlowFile(core::ProcessContext& context, core::ProcessSession& session);
diff --git a/extensions/standard-processors/modbus/ReadModbusFunctions.cpp b/extensions/standard-processors/modbus/ReadModbusFunctions.cpp
index 6ade0dcf3..e92fe517b 100644
--- a/extensions/standard-processors/modbus/ReadModbusFunctions.cpp
+++ b/extensions/standard-processors/modbus/ReadModbusFunctions.cpp
@@ -36,13 +36,13 @@ std::vector<std::byte> ReadModbusFunction::requestBytes() const {
return request;
}
-[[nodiscard]] auto ReadModbusFunction::getRespBytes(std::span<const std::byte> resp_pdu) const -> nonstd::expected<std::span<const std::byte>, std::error_code> {
+[[nodiscard]] auto ReadModbusFunction::getRespBytes(std::span<const std::byte> resp_pdu) const -> std::expected<std::span<const std::byte>, std::error_code> {
if (resp_pdu.size() < 2) {
- return nonstd::make_unexpected(ModbusExceptionCode::MessageTooShort);
+ return std::unexpected{ModbusExceptionCode::MessageTooShort};
}
if (const auto resp_function_code = resp_pdu.front(); resp_function_code != getFunctionCode()) {
- return nonstd::make_unexpected(ModbusExceptionCode::UnexpectedResponseFunctionCode);
+ return std::unexpected{ModbusExceptionCode::UnexpectedResponseFunctionCode};
}
const auto resp_byte_count = static_cast<uint8_t>(resp_pdu[1]);
@@ -50,11 +50,11 @@ std::vector<std::byte> ReadModbusFunction::requestBytes() const {
constexpr uint8_t unit_id_length = 1;
const uint8_t expected_resp_pdu_size = resp_byte_count + function_code_length + unit_id_length;
if (resp_pdu.size() != expected_resp_pdu_size) {
- return nonstd::make_unexpected(ModbusExceptionCode::UnexpectedResponsePDUSize);
+ return std::unexpected{ModbusExceptionCode::UnexpectedResponsePDUSize};
}
if (resp_byte_count != expectedByteCount()) {
- return nonstd::make_unexpected(ModbusExceptionCode::InvalidResponse);
+ return std::unexpected{ModbusExceptionCode::InvalidResponse};
}
return resp_pdu.subspan(2, resp_pdu.size()-2);
@@ -69,10 +69,10 @@ std::vector<std::byte> ReadModbusFunction::requestBytes() const {
return result;
}
-[[nodiscard]] nonstd::expected<core::RecordField, std::error_code> ReadCoilStatus::responseToRecordField(const std::span<const std::byte> resp_pdu) const {
+[[nodiscard]] std::expected<core::RecordField, std::error_code> ReadCoilStatus::responseToRecordField(const std::span<const std::byte> resp_pdu) const {
const auto resp_bytes = getRespBytes(resp_pdu);
if (!resp_bytes)
- return nonstd::make_unexpected(resp_bytes.error());
+ return std::unexpected{resp_bytes.error()};
std::vector<bool> coils{};
diff --git a/extensions/standard-processors/modbus/ReadModbusFunctions.h b/extensions/standard-processors/modbus/ReadModbusFunctions.h
index cf6be3061..78f6bcf9a 100644
--- a/extensions/standard-processors/modbus/ReadModbusFunctions.h
+++ b/extensions/standard-processors/modbus/ReadModbusFunctions.h
@@ -54,12 +54,12 @@ class ReadModbusFunction {
[[nodiscard]] uint16_t getTransactionId() const { return transaction_id_; }
[[nodiscard]] uint8_t getUnitId() const { return unit_id_; }
- [[nodiscard]] virtual nonstd::expected<core::RecordField, std::error_code> responseToRecordField(std::span<const std::byte> resp_pdu) const = 0;
+ [[nodiscard]] virtual std::expected<core::RecordField, std::error_code> responseToRecordField(std::span<const std::byte> resp_pdu) const = 0;
static std::unique_ptr<ReadModbusFunction> parse(uint16_t transaction_id, uint8_t unit_id, const std::string& address);
protected:
- [[nodiscard]] auto getRespBytes(std::span<const std::byte> resp_pdu) const -> nonstd::expected<std::span<const std::byte>, std::error_code>;
+ [[nodiscard]] auto getRespBytes(std::span<const std::byte> resp_pdu) const -> std::expected<std::span<const std::byte>, std::error_code>;
[[nodiscard]] virtual std::byte getFunctionCode() const = 0;
[[nodiscard]] virtual std::array<std::byte, 5> rawPdu() const = 0;
@@ -77,7 +77,7 @@ class ReadCoilStatus : public ReadModbusFunction {
number_of_points_(number_of_points) {
}
- [[nodiscard]] nonstd::expected<core::RecordField, std::error_code> responseToRecordField(std::span<const std::byte> resp_pdu) const override;
+ [[nodiscard]] std::expected<core::RecordField, std::error_code> responseToRecordField(std::span<const std::byte> resp_pdu) const override;
[[nodiscard]] std::byte getFunctionCode() const override;
[[nodiscard]] std::array<std::byte, 5> rawPdu() const override;
@@ -120,10 +120,10 @@ class ReadRegisters : public ReadModbusFunction {
return expectedByteCount() / sizeof(uint16_t);
}
- [[nodiscard]] nonstd::expected<core::RecordField, std::error_code> responseToRecordField(const std::span<const std::byte> resp_pdu) const override {
+ [[nodiscard]] std::expected<core::RecordField, std::error_code> responseToRecordField(const std::span<const std::byte> resp_pdu) const override {
const auto resp_bytes = getRespBytes(resp_pdu);
if (!resp_bytes)
- return nonstd::make_unexpected(resp_bytes.error());
+ return std::unexpected{resp_bytes.error()};
std::vector<T> holding_registers{};
for (auto&& register_chunk : ranges::views::chunk(*resp_bytes, std::max(sizeof(T), sizeof(uint16_t)))) {
diff --git a/extensions/standard-processors/processors/ConvertRecord.cpp b/extensions/standard-processors/processors/ConvertRecord.cpp
index 00d864b8c..565bc6741 100644
--- a/extensions/standard-processors/processors/ConvertRecord.cpp
+++ b/extensions/standard-processors/processors/ConvertRecord.cpp
@@ -16,8 +16,9 @@
*/
#include "ConvertRecord.h"
+#include <expected>
+
#include "core/Resource.h"
-#include "nonstd/expected.hpp"
#include "utils/GeneralUtils.h"
#include "utils/ProcessorConfigUtils.h"
#include "minifi-cpp/utils/gsl.h"
@@ -40,7 +41,7 @@ void ConvertRecord::onTrigger(core::ProcessContext& context, core::ProcessSessio
return;
}
- nonstd::expected<core::RecordSet, std::error_code> record_set;
+ std::expected<core::RecordSet, std::error_code> record_set;
session.read(flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
record_set = record_converter_->record_set_reader->read(*input_stream);
return io::IoResult::from(input_stream->size());
diff --git a/extensions/standard-processors/processors/InvokeHTTP.cpp b/extensions/standard-processors/processors/InvokeHTTP.cpp
index e652a00c6..a089cba5c 100644
--- a/extensions/standard-processors/processors/InvokeHTTP.cpp
+++ b/extensions/standard-processors/processors/InvokeHTTP.cpp
@@ -79,16 +79,16 @@ void HttpClientStore::returnClient(http::HTTPClient& client) {
} // namespace invoke_http
namespace {
-nonstd::expected<std::string_view, std::error_code> removePerSecSuffix(const std::string_view input) {
+std::expected<std::string_view, std::error_code> removePerSecSuffix(const std::string_view input) {
const auto trimmed_input = utils::string::trim(input);
if (trimmed_input.ends_with("/s") || trimmed_input.ends_with("/S")) {
return trimmed_input.substr(0, trimmed_input.size() - 2);
}
- return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
}
} // namespace
-nonstd::expected<uint64_t, std::error_code> invoke_http::parseDataTransferSpeed(const std::string_view input) {
+std::expected<uint64_t, std::error_code> invoke_http::parseDataTransferSpeed(const std::string_view input) {
return removePerSecSuffix(input) | utils::andThen(parsing::parseDataSize);
}
diff --git a/extensions/standard-processors/processors/InvokeHTTP.h b/extensions/standard-processors/processors/InvokeHTTP.h
index d63a64387..702804853 100644
--- a/extensions/standard-processors/processors/InvokeHTTP.h
+++ b/extensions/standard-processors/processors/InvokeHTTP.h
@@ -62,7 +62,7 @@ class DataTransferSpeedValidator final : public core::PropertyValidator {
inline constexpr auto DATA_TRANSFER_SPEED_VALIDATOR = DataTransferSpeedValidator{};
-nonstd::expected<uint64_t, std::error_code> parseDataTransferSpeed(const std::string_view input);
+std::expected<uint64_t, std::error_code> parseDataTransferSpeed(const std::string_view input);
class HttpClientStore {
public:
diff --git a/extensions/standard-processors/processors/PutUDP.cpp b/extensions/standard-processors/processors/PutUDP.cpp
index aa4b1eb63..0320891a9 100644
--- a/extensions/standard-processors/processors/PutUDP.cpp
+++ b/extensions/standard-processors/processors/PutUDP.cpp
@@ -76,16 +76,16 @@ void PutUDP::onTrigger(core::ProcessContext& context, core::ProcessSession& sess
asio::io_context io_context;
- const auto resolve_hostname = [&io_context, &hostname, &port]() -> nonstd::expected<udp::resolver::results_type, std::error_code> {
+ const auto resolve_hostname = [&io_context, &hostname, &port]() -> std::expected<udp::resolver::results_type, std::error_code> {
udp::resolver resolver(io_context);
std::error_code error_code;
auto results = resolver.resolve(hostname, port, error_code);
if (error_code)
- return nonstd::make_unexpected(error_code);
+ return std::unexpected{error_code};
return results;
};
- const auto send_data_to_endpoint = [&io_context, &data, &logger = this->logger_](const udp::resolver::results_type& resolved_query) -> nonstd::expected<void, std::error_code> {
+ const auto send_data_to_endpoint = [&io_context, &data, &logger = this->logger_](const udp::resolver::results_type& resolved_query) -> std::expected<void, std::error_code> {
std::error_code error;
for (const auto& resolver_entry : resolved_query) {
error.clear();
@@ -103,7 +103,7 @@ void PutUDP::onTrigger(core::ProcessContext& context, core::ProcessSession& sess
logger->log_debug("sending to endpoint {} succeeded", resolver_entry.endpoint());
return {};
}
- return nonstd::make_unexpected(error);
+ return std::unexpected{error};
};
const auto transfer_to_success = [&session, &flow_file]() -> void {
diff --git a/extensions/standard-processors/processors/SplitRecord.cpp b/extensions/standard-processors/processors/SplitRecord.cpp
index ba501473a..3399610cb 100644
--- a/extensions/standard-processors/processors/SplitRecord.cpp
+++ b/extensions/standard-processors/processors/SplitRecord.cpp
@@ -16,8 +16,9 @@
*/
#include "SplitRecord.h"
+#include <expected>
+
#include "core/Resource.h"
-#include "nonstd/expected.hpp"
#include "utils/GeneralUtils.h"
#include "utils/ProcessorConfigUtils.h"
#include "minifi-cpp/utils/gsl.h"
@@ -31,7 +32,7 @@ void SplitRecord::onSchedule(core::ProcessContext& context, core::ProcessSession
};
}
-nonstd::expected<std::size_t, std::string> SplitRecord::readRecordsPerSplit(core::ProcessContext& context, const core::FlowFile& original_flow_file) {
+std::expected<std::size_t, std::string> SplitRecord::readRecordsPerSplit(core::ProcessContext& context, const core::FlowFile& original_flow_file) {
return context.getProperty(RecordsPerSplit, &original_flow_file)
| utils::andThen([](const auto& records_per_split_str) {
return parsing::parseIntegralMinMax<std::size_t>(records_per_split_str, 1, std::numeric_limits<std::size_t>::max());
@@ -54,7 +55,7 @@ void SplitRecord::onTrigger(core::ProcessContext& context, core::ProcessSession&
return;
}
- nonstd::expected<core::RecordSet, std::error_code> record_set;
+ std::expected<core::RecordSet, std::error_code> record_set;
session.read(original_flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
record_set = record_converter_->record_set_reader->read(*input_stream);
return io::IoResult::from(input_stream->size());
diff --git a/extensions/standard-processors/processors/SplitRecord.h b/extensions/standard-processors/processors/SplitRecord.h
index c594024d3..d078ab820 100644
--- a/extensions/standard-processors/processors/SplitRecord.h
+++ b/extensions/standard-processors/processors/SplitRecord.h
@@ -86,7 +86,7 @@ class SplitRecord final : public core::AbstractProcessor<SplitRecord> {
void onTrigger(core::ProcessContext& context, core::ProcessSession& session) override;
private:
- static nonstd::expected<std::size_t, std::string> readRecordsPerSplit(core::ProcessContext& context, const core::FlowFile& original_flow_file);
+ static std::expected<std::size_t, std::string> readRecordsPerSplit(core::ProcessContext& context, const core::FlowFile& original_flow_file);
std::optional<core::RecordConverter> record_converter_;
};
diff --git a/extensions/standard-processors/processors/SplitText.cpp b/extensions/standard-processors/processors/SplitText.cpp
index 3573169a8..203e179e1 100644
--- a/extensions/standard-processors/processors/SplitText.cpp
+++ b/extensions/standard-processors/processors/SplitText.cpp
@@ -135,15 +135,15 @@ class SplitTextFragmentGenerator {
SplitTextFragmentGenerator(const std::shared_ptr<io::InputStream>& stream, const SplitTextConfiguration& split_text_config, size_t buffer_size);
std::optional<Fragment> readNextFragment();
- nonstd::expected<Fragment, const char*> readHeaderFragment();
+ std::expected<Fragment, const char*> readHeaderFragment();
[[nodiscard]] detail::StreamReadState getState() const { return line_reader_.getState(); }
private:
static void addLineToFragment(Fragment& fragment, const detail::LineReader::LineInfo& line);
void finalizeFragmentOffset(Fragment& current_fragment);
[[nodiscard]] bool lineSizeWouldExceedMaxFragmentSize(const detail::LineReader::LineInfo& line, uint64_t fragment_size) const;
- nonstd::expected<Fragment, const char*> createHeaderFragmentUsingLineCount();
- nonstd::expected<Fragment, const char*> createHeaderFragmentUsingHeaderMarkerCharacters();
+ std::expected<Fragment, const char*> createHeaderFragmentUsingLineCount();
+ std::expected<Fragment, const char*> createHeaderFragmentUsingHeaderMarkerCharacters();
detail::LineReader line_reader_;
// In case the read line would exceed the maximum fragment size, we need to buffer it for the next fragment
@@ -201,19 +201,19 @@ bool SplitTextFragmentGenerator::lineSizeWouldExceedMaxFragmentSize(const detail
return split_text_config_.maximum_fragment_size && fragment_size + line.size + header_fragment_size_ > split_text_config_.maximum_fragment_size.value();
}
-nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::createHeaderFragmentUsingLineCount() {
+std::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::createHeaderFragmentUsingLineCount() {
Fragment header_fragment;
for (uint64_t i = 0; i < split_text_config_.header_line_count; ++i) {
auto line = line_reader_.readNextLine();
if (!line) {
if (getState() == detail::StreamReadState::EndOfStream) {
- return nonstd::make_unexpected("The flow file's line count is less than the specified header line count!");
+ return std::unexpected{"The flow file's line count is less than the specified header line count!"};
} else {
- return nonstd::make_unexpected("Error while reading flow file stream!");
+ return std::unexpected{"Error while reading flow file stream!"};
}
}
if (lineSizeWouldExceedMaxFragmentSize(*line, header_fragment.fragment_size)) {
- return nonstd::make_unexpected("Header line would exceed the maximum fragment size!");
+ return std::unexpected{"Header line would exceed the maximum fragment size!"};
}
addLineToFragment(header_fragment, *line);
@@ -224,7 +224,7 @@ nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFra
return header_fragment;
}
-nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::createHeaderFragmentUsingHeaderMarkerCharacters() {
+std::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::createHeaderFragmentUsingHeaderMarkerCharacters() {
Fragment header_fragment;
while (auto line = line_reader_.readNextLine(split_text_config_.header_line_marker_characters)) {
if (line->size < split_text_config_.header_line_marker_characters->size() || !line->matches_starts_with) {
@@ -232,7 +232,7 @@ nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFra
break;
}
if (lineSizeWouldExceedMaxFragmentSize(*line, header_fragment.fragment_size)) {
- return nonstd::make_unexpected("Header line would exceed the maximum fragment size!");
+ return std::unexpected{"Header line would exceed the maximum fragment size!"};
}
addLineToFragment(header_fragment, *line);
@@ -243,7 +243,7 @@ nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFra
return header_fragment;
}
-nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::readHeaderFragment() {
+std::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::readHeaderFragment() {
gsl_Expects(flow_file_offset_ == 0 && (split_text_config_.header_line_count > 0 || split_text_config_.header_line_marker_characters));
if (split_text_config_.header_line_count > 0) {
return createHeaderFragmentUsingLineCount();
@@ -356,7 +356,7 @@ void ReadCallback::createFragmentFlowWithoutHeader(const SplitTextFragmentGenera
io::IoResult ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
SplitTextFragmentGenerator fragment_generator(stream, split_text_config_, buffer_size_);
- nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> header_fragment;
+ std::expected<SplitTextFragmentGenerator::Fragment, const char*> header_fragment;
std::shared_ptr<core::FlowFile> header_flow; // cache header flow file to avoid cloning it for each fragment
if (split_text_config_.header_line_count > 0 || split_text_config_.header_line_marker_characters) {
header_fragment = fragment_generator.readHeaderFragment();
diff --git a/extensions/standard-processors/tests/CMakeLists.txt b/extensions/standard-processors/tests/CMakeLists.txt
index aecfc84ea..6d87a3433 100644
--- a/extensions/standard-processors/tests/CMakeLists.txt
+++ b/extensions/standard-processors/tests/CMakeLists.txt
@@ -17,9 +17,7 @@
# under the License.
#
-include(Coroutines)
include(JoltTests)
-enable_coroutines()
file(GLOB PROCESSOR_UNIT_TESTS "unit/*.cpp" "unit/modbus/*.cpp")
file(GLOB PROCESSOR_INTEGRATION_TESTS "integration/*.cpp")
diff --git a/extensions/standard-processors/tests/integration/InvokeHTTPTests.cpp b/extensions/standard-processors/tests/integration/InvokeHTTPTests.cpp
index d4e94b62f..67914def2 100644
--- a/extensions/standard-processors/tests/integration/InvokeHTTPTests.cpp
+++ b/extensions/standard-processors/tests/integration/InvokeHTTPTests.cpp
@@ -388,8 +388,8 @@ TEST_CASE("Data transfer speed parsing") {
CHECK(processors::invoke_http::parseDataTransferSpeed("10 kB/s") == 10_KiB);
CHECK(processors::invoke_http::parseDataTransferSpeed("20 MB/s") == 20_MiB);
CHECK(processors::invoke_http::parseDataTransferSpeed("19 TB/s") == 19_TiB);
- CHECK(processors::invoke_http::parseDataTransferSpeed("1KBinvalidsuffix") == nonstd::make_unexpected(make_error_code(core::ParsingErrorCode::GeneralParsingError)));
- CHECK(processors::invoke_http::parseDataTransferSpeed("1KB") == nonstd::make_unexpected(make_error_code(core::ParsingErrorCode::GeneralParsingError)));
+ CHECK(processors::invoke_http::parseDataTransferSpeed("1KBinvalidsuffix") == std::unexpected{make_error_code(core::ParsingErrorCode::GeneralParsingError)});
+ CHECK(processors::invoke_http::parseDataTransferSpeed("1KB") == std::unexpected{make_error_code(core::ParsingErrorCode::GeneralParsingError)});
}
TEST_CASE("InvokeHTTP: invalid characters are removed from outgoing HTTP headers", "[InvokeHTTP][http][attribute][header][sanitize]") {
diff --git a/extensions/standard-processors/utils/JoltUtils.cpp b/extensions/standard-processors/utils/JoltUtils.cpp
index bf9392527..66406b55b 100644
--- a/extensions/standard-processors/utils/JoltUtils.cpp
+++ b/extensions/standard-processors/utils/JoltUtils.cpp
@@ -51,7 +51,7 @@ bool Spec::Template::check(std::string_view str) {
return false;
}
-nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Template::parse(It begin, It end) {
+std::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Template::parse(It begin, It end) {
enum class State {
Plain,
Escaped,
@@ -93,10 +93,10 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
}
case State::Escaped: {
if (!ch) {
- return nonstd::make_unexpected("Unterminated escape sequence");
+ return std::unexpected{"Unterminated escape sequence"};
}
if (ch != '\\' && !isSpecialChar(ch.value())) {
- return nonstd::make_unexpected(fmt::format("Unknown escape sequence in template '\\{}'", ch.value()));
+ return std::unexpected{fmt::format("Unknown escape sequence in template '\\{}'", ch.value())};
}
fragments.back() += ch.value();
state = State::Plain;
@@ -135,7 +135,7 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
target += ch.value();
state = State::ParentIndex;
} else {
- return nonstd::make_unexpected(fmt::format("Expected an index at {}", std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Expected an index at {}", std::distance(begin, ch_it))};
}
break;
}
@@ -149,7 +149,7 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
references.back().first = std::stoi(target);
state = State::Plain;
} else {
- return nonstd::make_unexpected(fmt::format("Invalid character at {}, expected digit, comma or close parenthesis", std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Invalid character at {}, expected digit, comma or close parenthesis", std::distance(begin, ch_it))};
}
break;
}
@@ -159,7 +159,7 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
target += ch.value();
state = State::MatchIndex;
} else {
- return nonstd::make_unexpected(fmt::format("Expected an index at {}", std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Expected an index at {}", std::distance(begin, ch_it))};
}
break;
}
@@ -170,7 +170,7 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
references.back().second = std::stoi(target);
state = State::Plain;
} else {
- return nonstd::make_unexpected(fmt::format("Invalid character at {}, expected digit or close parenthesis", std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Invalid character at {}, expected digit or close parenthesis", std::distance(begin, ch_it))};
}
break;
}
@@ -213,7 +213,7 @@ bool Spec::Regex::check(std::string_view str) {
return false;
}
-nonstd::expected<Spec::Regex, std::string> Spec::Regex::parse(std::string_view str) {
+std::expected<Spec::Regex, std::string> Spec::Regex::parse(std::string_view str) {
enum class State {
Plain,
Escaped
@@ -239,10 +239,10 @@ nonstd::expected<Spec::Regex, std::string> Spec::Regex::parse(std::string_view s
}
case State::Escaped: {
if (!ch) {
- return nonstd::make_unexpected("Unterminated escape sequence");
+ return std::unexpected{"Unterminated escape sequence"};
}
if (ch != '\\' && !isSpecialChar(ch.value())) {
- return nonstd::make_unexpected(fmt::format("Unknown escape sequence in pattern '\\{}'", ch.value()));
+ return std::unexpected{fmt::format("Unknown escape sequence in pattern '\\{}'", ch.value())};
}
fragments.back() += ch.value();
state = State::Plain;
@@ -312,7 +312,7 @@ std::optional<std::vector<std::string_view>> Spec::Regex::match(std::string_view
namespace {
-nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDestination(const Spec::Context& ctx, Spec::It begin, Spec::It end);
+std::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDestination(const Spec::Context& ctx, Spec::It begin, Spec::It end);
Spec::Destinations parseDestinations(const Spec::Context& ctx, const rapidjson::Value& val);
Spec::Pattern::Value parseValue(const Spec::Context& ctx, const rapidjson::Value& val);
@@ -460,29 +460,29 @@ std::string parseLiteral(std::string_view str) {
return result;
}
-nonstd::expected<std::pair<Spec::Path, Spec::It>, std::string> parsePath(const Spec::Context& ctx, Spec::It begin, Spec::It end) {
+std::expected<std::pair<Spec::Path, Spec::It>, std::string> parsePath(const Spec::Context& ctx, Spec::It begin, Spec::It end) {
auto dst = parseDestination(ctx, begin, end);
if (!dst) {
- return nonstd::make_unexpected(std::move(dst.error()));
+ return std::unexpected{std::move(dst.error())};
}
Spec::Path result;
for (auto&& [member, type] : std::move(dst->first)) {
if (!holds_alternative<Spec::Template>(member)) {
- return nonstd::make_unexpected(fmt::format("Value reference at {} cannot contain nested value reference path", ctx.path()));
+ return std::unexpected{fmt::format("Value reference at {} cannot contain nested value reference path", ctx.path())};
}
result.emplace_back(std::move(std::get<Spec::Template>(member)), type);
}
return std::pair<Spec::Path, Spec::It>{result, dst->second};
}
-nonstd::expected<std::pair<Spec::ValueRef, Spec::It>, std::string> parseValueReference(const Spec::Context& ctx, Spec::It begin, Spec::It end, bool greedy_path) {
+std::expected<std::pair<Spec::ValueRef, Spec::It>, std::string> parseValueReference(const Spec::Context& ctx, Spec::It begin, Spec::It end, bool greedy_path) {
using ResultT = std::pair<Spec::ValueRef, Spec::It>;
auto it = begin;
if (it == end) {
- return nonstd::make_unexpected("Cannot parse value reference from empty string");
+ return std::unexpected{"Cannot parse value reference from empty string"};
}
if (*it != '@') {
- return nonstd::make_unexpected("Value reference must start with '@'");
+ return std::unexpected{"Value reference must start with '@'"};
}
++it;
if (it == end) {
@@ -522,11 +522,11 @@ nonstd::expected<std::pair<Spec::ValueRef, Spec::It>, std::string> parseValueRef
auto idx_end = it;
idx = std::stoull(std::string{idx_begin, idx_end});
if (it == end) {
- return nonstd::make_unexpected("Expected ')' in value reference");
+ return std::unexpected{"Expected ')' in value reference"};
}
if (*it != ',') {
if (*it != ')') {
- return nonstd::make_unexpected("Expected ')' in value reference");
+ return std::unexpected{"Expected ')' in value reference"};
}
++it;
return ResultT{{idx, {}}, it};
@@ -535,15 +535,15 @@ nonstd::expected<std::pair<Spec::ValueRef, Spec::It>, std::string> parseValueRef
++it;
}
if (it == end) {
- return nonstd::make_unexpected("Expected member accessor in value reference");
+ return std::unexpected{"Expected member accessor in value reference"};
}
auto path = parsePath(ctx, it, end);
if (!path) {
- return nonstd::make_unexpected(fmt::format("Invalid path in value reference: {}", path.error()));
+ return std::unexpected{fmt::format("Invalid path in value reference: {}", path.error())};
}
it = path->second;
if (it == end || *it != ')') {
- return nonstd::make_unexpected("Expected ')' in value reference");
+ return std::unexpected{"Expected ')' in value reference"};
}
++it;
return ResultT{{idx, std::move(path->first)}, it};
@@ -661,13 +661,13 @@ std::unique_ptr<Spec::Pattern> parseMap(const Spec::Context& ctx, const rapidjso
return map;
}
-nonstd::expected<std::pair<Spec::MatchingIndex, Spec::It>, std::string> parseMatchingIndex(Spec::It begin, Spec::It end) {
+std::expected<std::pair<Spec::MatchingIndex, Spec::It>, std::string> parseMatchingIndex(Spec::It begin, Spec::It end) {
auto it = begin;
if (it == end) {
- return nonstd::make_unexpected("Empty matching index");
+ return std::unexpected{"Empty matching index"};
}
if (*it != '#') {
- return nonstd::make_unexpected("Matching must start with a '#'");
+ return std::unexpected{"Matching must start with a '#'"};
}
++it;
auto idx_begin = it;
@@ -678,7 +678,7 @@ nonstd::expected<std::pair<Spec::MatchingIndex, Spec::It>, std::string> parseMat
}
// dot-delimited list of templates and value references
-nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDestination(const Spec::Context& ctx, Spec::It begin, Spec::It end) {
+std::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDestination(const Spec::Context& ctx, Spec::It begin, Spec::It end) {
Spec::Destination result;
Spec::MemberType type = Spec::MemberType::FIELD;
auto ch_it = begin;
@@ -688,10 +688,10 @@ nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDesti
while (!isEnd()) {
if (auto match_idx = parseMatchingIndex(ch_it, end)) {
if (type != Spec::MemberType::INDEX) {
- return nonstd::make_unexpected("Matching index can only be used in index context, e.g. apple[#2]");
+ return std::unexpected{"Matching index can only be used in index context, e.g. apple[#2]"};
}
if (!ctx.find(match_idx->first)) {
- return nonstd::make_unexpected(fmt::format("Invalid matching index at {} to ancestor {}", ctx.path(), match_idx->first));
+ return std::unexpected{fmt::format("Invalid matching index at {} to ancestor {}", ctx.path(), match_idx->first)};
}
Spec::Destination::value_type result_element{match_idx->first, type};
result.push_back(result_element);
@@ -705,11 +705,11 @@ nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDesti
result.push_back({std::move(templ->first), type});
ch_it = templ->second;
} else {
- return nonstd::make_unexpected(fmt::format("Could not parse neither value reference or template in {} at {}", ctx.path(), std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Could not parse neither value reference or template in {} at {}", ctx.path(), std::distance(begin, ch_it))};
}
if (type == Spec::MemberType::INDEX) {
if (ch_it == end || *ch_it != ']') {
- return nonstd::make_unexpected(fmt::format("Expected closing index ']' in {} at {}", ctx.path(), std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Expected closing index ']' in {} at {}", ctx.path(), std::distance(begin, ch_it))};
}
++ch_it;
}
@@ -719,14 +719,14 @@ nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDesti
} else if (*ch_it == '[') {
type = Spec::MemberType::INDEX;
} else {
- return nonstd::make_unexpected(fmt::format("Unexpected destination delimiter '{}' in {} at {}", *ch_it, ctx.path(), std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Unexpected destination delimiter '{}' in {} at {}", *ch_it, ctx.path(), std::distance(begin, ch_it))};
}
++ch_it;
if (ch_it == end) {
if (type == Spec::MemberType::FIELD) {
- return nonstd::make_unexpected(fmt::format("Unterminated member in {} at {}", ctx.path(), std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Unterminated member in {} at {}", ctx.path(), std::distance(begin, ch_it))};
} else {
- return nonstd::make_unexpected(fmt::format("Unterminated indexed member in {} at {}", ctx.path(), std::distance(begin, ch_it)));
+ return std::unexpected{fmt::format("Unterminated indexed member in {} at {}", ctx.path(), std::distance(begin, ch_it))};
}
}
}
@@ -807,7 +807,7 @@ std::pair<std::string, std::string> toString(const Spec::Context& ctx, const Spe
return {raw, result};
}
-nonstd::expected<std::reference_wrapper<const rapidjson::Value>, std::string> resolvePath(const Spec::Context& ctx, std::string_view root_path, const rapidjson::Value& root, const Spec::Path& path);
+std::expected<std::reference_wrapper<const rapidjson::Value>, std::string> resolvePath(const Spec::Context& ctx, std::string_view root_path, const rapidjson::Value& root, const Spec::Path& path);
Spec::Pattern::Value parseValue(const Spec::Context& ctx, const rapidjson::Value& val) {
if (val.IsObject()) {
@@ -953,7 +953,7 @@ void putValue(const Spec::Context& ctx, const Spec::Destinations& destinations,
}
}
-nonstd::expected<std::reference_wrapper<const rapidjson::Value>, std::string> resolvePath(const Spec::Context& ctx, std::string_view root_path, const rapidjson::Value& root, const Spec::Path& path) {
+std::expected<std::reference_wrapper<const rapidjson::Value>, std::string> resolvePath(const Spec::Context& ctx, std::string_view root_path, const rapidjson::Value& root, const Spec::Path& path) {
std::string full_path{root_path};
std::reference_wrapper<const rapidjson::Value> result = std::ref(root);
for (auto& [templ, type] : path) {
@@ -961,20 +961,20 @@ nonstd::expected<std::reference_wrapper<const rapidjson::Value>, std::string> re
if (type == Spec::MemberType::FIELD) {
full_path += "." + member;
if (!result.get().IsObject()) {
- return nonstd::make_unexpected(fmt::format("Expected object at {}", full_path));
+ return std::unexpected{fmt::format("Expected object at {}", full_path)};
}
if (!result.get().HasMember(member)) {
- return nonstd::make_unexpected(fmt::format("Object does not have member '{}' at {}", member, full_path));
+ return std::unexpected{fmt::format("Object does not have member '{}' at {}", member, full_path)};
}
result = result.get()[member];
} else if (type == Spec::MemberType::INDEX) {
size_t idx = std::stoull(member);
full_path += "[" + member + "]";
if (!result.get().IsArray()) {
- return nonstd::make_unexpected(fmt::format("Expected array at {}", full_path));
+ return std::unexpected{fmt::format("Expected array at {}", full_path)};
}
if (result.get().Size() <= idx) {
- return nonstd::make_unexpected(fmt::format("Array of size {} does not have item at index {} at {}", result.get().Size(), idx, full_path));
+ return std::unexpected{fmt::format("Array of size {} does not have item at index {} at {}", result.get().Size(), idx, full_path)};
}
result = result.get()[gsl::narrow<rapidjson::SizeType>(idx)];
}
@@ -984,17 +984,17 @@ nonstd::expected<std::reference_wrapper<const rapidjson::Value>, std::string> re
} // namespace
-nonstd::expected<Spec, std::string> Spec::parse(std::string_view str, std::shared_ptr<core::logging::Logger> logger) {
+std::expected<Spec, std::string> Spec::parse(std::string_view str, std::shared_ptr<core::logging::Logger> logger) {
rapidjson::Document doc;
rapidjson::ParseResult res = doc.Parse(str.data(), str.length());
if (!res) {
- return nonstd::make_unexpected(fmt::format("{} at {}", rapidjson::GetParseError_En(res.Code()), res.Offset()));
+ return std::unexpected{fmt::format("{} at {}", rapidjson::GetParseError_En(res.Code()), res.Offset())};
}
try {
Spec::Context ctx{.matches = {"root"}, .logger = std::move(logger)};
return Spec{parseMap(ctx, doc)};
} catch (const std::exception& ex) {
- return nonstd::make_unexpected(ex.what());
+ return std::unexpected{ex.what()};
}
}
@@ -1129,13 +1129,13 @@ void Spec::Pattern::process(const Context& ctx, const rapidjson::Value &input, r
}
}
-nonstd::expected<rapidjson::Document, std::string> Spec::process(const rapidjson::Value &input, std::shared_ptr<core::logging::Logger> logger) const {
+std::expected<rapidjson::Document, std::string> Spec::process(const rapidjson::Value &input, std::shared_ptr<core::logging::Logger> logger) const {
rapidjson::Document output;
try {
value_->process(Context{.matches = {"root"}, .node = &input, .logger = std::move(logger)}, input, output);
return output;
} catch (const std::exception& ex) {
- return nonstd::make_unexpected(ex.what());
+ return std::unexpected{ex.what()};
}
}
diff --git a/extensions/standard-processors/utils/JoltUtils.h b/extensions/standard-processors/utils/JoltUtils.h
index 62bbaa50a..06f105a8b 100644
--- a/extensions/standard-processors/utils/JoltUtils.h
+++ b/extensions/standard-processors/utils/JoltUtils.h
@@ -100,17 +100,17 @@ class Spec {
// checks if the string is definitely a template (i.e. has an unescaped '&' char)
static bool check(std::string_view str);
- static nonstd::expected<Template, std::string> parse(std::string_view str) {
+ static std::expected<Template, std::string> parse(std::string_view str) {
if (auto res = parse(str.begin(), str.end())) {
if (res->second != str.end()) {
- return nonstd::make_unexpected("Failed to fully parse template");
+ return std::unexpected{"Failed to fully parse template"};
}
return {std::move(res->first)};
} else {
- return nonstd::make_unexpected(std::move(res.error()));
+ return std::unexpected{std::move(res.error())};
}
}
- static nonstd::expected<std::pair<Template, It>, std::string> parse(It begin, It end);
+ static std::expected<std::pair<Template, It>, std::string> parse(It begin, It end);
std::string eval(const Context& ctx) const;
@@ -140,7 +140,7 @@ class Spec {
}
// checks if the string is definitely a regex (i.e. has an unescaped '*' char)
static bool check(std::string_view str);
- static nonstd::expected<Regex, std::string> parse(std::string_view str);
+ static std::expected<Regex, std::string> parse(std::string_view str);
std::optional<std::vector<std::string_view>> match(std::string_view str) const;
@@ -194,9 +194,9 @@ class Spec {
std::map<std::string, Destinations> defaults; // #thing: a.b
};
- static nonstd::expected<Spec, std::string> parse(std::string_view str, std::shared_ptr<core::logging::Logger> logger = {});
+ static std::expected<Spec, std::string> parse(std::string_view str, std::shared_ptr<core::logging::Logger> logger = {});
- nonstd::expected<rapidjson::Document, std::string> process(const rapidjson::Value& input, std::shared_ptr<core::logging::Logger> logger = {}) const;
+ std::expected<rapidjson::Document, std::string> process(const rapidjson::Value& input, std::shared_ptr<core::logging::Logger> logger = {}) const;
private:
explicit Spec(std::unique_ptr<Pattern> value): value_(std::move(value)) {}
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
index 236d2abc6..9b96d8b88 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
@@ -430,7 +430,7 @@ void ConsumeWindowsEventLog::substituteXMLPercentageItems(pugi::xml_document& do
doc.traverse(treeWalker);
}
-nonstd::expected<std::string, std::string> ConsumeWindowsEventLog::renderEventAsXml(EVT_HANDLE event_handle) {
+std::expected<std::string, std::string> ConsumeWindowsEventLog::renderEventAsXml(EVT_HANDLE event_handle) {
logger_->log_trace("Rendering an event");
WCHAR stackBuffer[4096];
DWORD size = sizeof(stackBuffer);
@@ -441,32 +441,32 @@ nonstd::expected<std::string, std::string> ConsumeWindowsEventLog::renderEventAs
DWORD propertyCount = 0;
if (!EvtRender(nullptr, event_handle, EvtRenderEventXml, size, buf.get(), &used, &propertyCount)) {
if (ERROR_INSUFFICIENT_BUFFER != GetLastError()) {
- return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", wel::getLastError()));
+ return std::unexpected{fmt::format("EvtRender failed due to {}", wel::getLastError())};
}
if (used > max_buffer_size_) {
- return nonstd::make_unexpected(fmt::format("Dropping event because it couldn't be rendered within {} bytes.", max_buffer_size_));
+ return std::unexpected{fmt::format("Dropping event because it couldn't be rendered within {} bytes.", max_buffer_size_)};
}
size = used;
buf.reset((LPWSTR) malloc(size));
if (!buf) {
- return nonstd::make_unexpected("malloc failed");
+ return std::unexpected{"malloc failed"};
}
if (!EvtRender(nullptr, event_handle, EvtRenderEventXml, size, buf.get(), &used, &propertyCount)) {
- return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", wel::getLastError()));
+ return std::unexpected{fmt::format("EvtRender failed due to {}", wel::getLastError())};
}
}
logger_->log_trace("Event rendered with size {}", used);
return utils::to_string(std::wstring{buf.get()});
}
-nonstd::expected<wel::ProcessedEvent, std::string> ConsumeWindowsEventLog::processEvent(EVT_HANDLE event_handle) {
+std::expected<wel::ProcessedEvent, std::string> ConsumeWindowsEventLog::processEvent(EVT_HANDLE event_handle) {
auto event_as_xml = renderEventAsXml(event_handle);
if (!event_as_xml)
- return nonstd::make_unexpected(event_as_xml.error());
+ return std::unexpected{event_as_xml.error()};
pugi::xml_document doc;
if (!doc.load_string(event_as_xml->c_str()))
- return nonstd::make_unexpected("Invalid XML produced");
+ return std::unexpected{"Invalid XML produced"};
wel::ProcessedEvent result;
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.h b/extensions/windows-event-log/ConsumeWindowsEventLog.h
index cbf6fc706..f6368454f 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.h
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.h
@@ -216,10 +216,10 @@ class ConsumeWindowsEventLog : public core::ProcessorImpl {
void createAndCommitFlowFile(const wel::ProcessedEvent& processed_event, core::ProcessSession& session) const;
wel::WindowsEventLogProvider& getEventLogProvider(const std::string& name);
wel::HeaderNames createHeaderNames(const std::optional<std::string>& event_header_property) const;
- nonstd::expected<wel::ProcessedEvent, std::string> processEvent(EVT_HANDLE event_handle);
+ std::expected<wel::ProcessedEvent, std::string> processEvent(EVT_HANDLE event_handle);
void substituteXMLPercentageItems(pugi::xml_document& doc);
std::function<std::string(const std::string&)> userIdToUsernameFunction() const;
- nonstd::expected<std::string, std::string> renderEventAsXml(EVT_HANDLE event_handle);
+ std::expected<std::string, std::string> renderEventAsXml(EVT_HANDLE event_handle);
bool commitAndSaveBookmark(const std::wstring& bookmarkXml, core::ProcessContext& context, core::ProcessSession& session, core::StateManager* state_manager);
std::tuple<size_t, std::wstring> processEventLogs(core::ProcessSession& session, EVT_HANDLE event_query_results);
std::unique_ptr<wel::Bookmark> createBookmark(const core::ProcessContext& context, core::StateManager* state_manager) const;
diff --git a/extensions/windows-event-log/wel/Bookmark.cpp b/extensions/windows-event-log/wel/Bookmark.cpp
index 2adc364c2..1c83221d7 100644
--- a/extensions/windows-event-log/wel/Bookmark.cpp
+++ b/extensions/windows-event-log/wel/Bookmark.cpp
@@ -138,9 +138,9 @@ bool Bookmark::saveBookmark(EVT_HANDLE event_handle) {
return saveBookmarkXml(*bookmark_xml);
}
-nonstd::expected<std::wstring, std::string> Bookmark::getNewBookmarkXml(EVT_HANDLE hEvent) {
+std::expected<std::wstring, std::string> Bookmark::getNewBookmarkXml(EVT_HANDLE hEvent) {
if (!EvtUpdateBookmark(hBookmark_.get(), hEvent)) {
- return nonstd::make_unexpected(fmt::format("EvtUpdateBookmark failed due to {}", wel::getLastError()));
+ return std::unexpected{fmt::format("EvtUpdateBookmark failed due to {}", wel::getLastError())};
}
// Render the bookmark as an XML string that can be persisted.
logger_->log_trace("Rendering new bookmark");
@@ -149,17 +149,17 @@ nonstd::expected<std::wstring, std::string> Bookmark::getNewBookmarkXml(EVT_HAND
DWORD propertyCount{};
bool event_render_succeeded_without_buffer = EvtRender(nullptr, hBookmark_.get(), EvtRenderBookmark, bufferSize, nullptr, &bufferUsed, &propertyCount);
if (event_render_succeeded_without_buffer)
- return nonstd::make_unexpected("EvtRender failed to determine the required buffer size.");
+ return std::unexpected{"EvtRender failed to determine the required buffer size."};
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
- return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", wel::getLastError()));
+ return std::unexpected{fmt::format("EvtRender failed due to {}", wel::getLastError())};
}
bufferSize = bufferUsed;
std::vector<wchar_t> buf(bufferSize / 2 + 1);
if (!EvtRender(nullptr, hBookmark_.get(), EvtRenderBookmark, bufferSize, buf.data(), &bufferUsed, &propertyCount)) {
- return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", wel::getLastError()));
+ return std::unexpected{fmt::format("EvtRender failed due to {}", wel::getLastError())};
}
return std::wstring(buf.data());
diff --git a/extensions/windows-event-log/wel/Bookmark.h b/extensions/windows-event-log/wel/Bookmark.h
index ff9002f17..827351dfc 100644
--- a/extensions/windows-event-log/wel/Bookmark.h
+++ b/extensions/windows-event-log/wel/Bookmark.h
@@ -46,7 +46,7 @@ class Bookmark {
void setStateManager(core::StateManager* state_manager) { state_manager_ = state_manager; }
bool isValid() const noexcept;
/* non-owning */ EVT_HANDLE getBookmarkHandleFromXML();
- nonstd::expected<std::wstring, std::string> getNewBookmarkXml(EVT_HANDLE hEvent);
+ std::expected<std::wstring, std::string> getNewBookmarkXml(EVT_HANDLE hEvent);
bool saveBookmarkXml(const std::wstring& bookmarkXml);
private:
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.cpp b/extensions/windows-event-log/wel/WindowsEventLog.cpp
index d929534e3..c5d4b4470 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.cpp
+++ b/extensions/windows-event-log/wel/WindowsEventLog.cpp
@@ -167,7 +167,7 @@ std::string WindowsEventLogProvider::getEventDataImpl(EVT_FORMAT_MESSAGE_FLAGS f
return utils::to_string(std::wstring{buffer.get()});
}
-nonstd::expected<std::string, std::error_code> WindowsEventLogProvider::getEventMessage(EVT_HANDLE event_handle) const {
+std::expected<std::string, std::error_code> WindowsEventLogProvider::getEventMessage(EVT_HANDLE event_handle) const {
std::string returnValue;
WCHAR stack_buffer[4096];
DWORD num_chars_in_buffer = sizeof(stack_buffer) / sizeof(stack_buffer[0]);
@@ -182,17 +182,17 @@ nonstd::expected<std::string, std::error_code> WindowsEventLogProvider::getEvent
DWORD status = GetLastError();
if (status != ERROR_INSUFFICIENT_BUFFER)
- return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(status));
+ return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(status)};
num_chars_in_buffer = num_chars_used;
buffer.reset((LPWSTR) malloc(num_chars_in_buffer * sizeof(WCHAR)));
if (!buffer)
- return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(ERROR_OUTOFMEMORY));
+ return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(ERROR_OUTOFMEMORY)};
if (EvtFormatMessage(provider_handle_.get(), event_handle, 0, 0, nullptr,
EvtFormatMessageEvent, num_chars_in_buffer,
buffer.get(), &num_chars_used))
return utils::to_string(std::wstring{buffer.get()});
- return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(GetLastError()));
+ return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(GetLastError())};
}
namespace {
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.h b/extensions/windows-event-log/wel/WindowsEventLog.h
index 95ac9bc50..634d4f441 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.h
+++ b/extensions/windows-event-log/wel/WindowsEventLog.h
@@ -92,7 +92,7 @@ class WindowsEventLogProvider {
WindowsEventLogProvider() : provider_handle_(nullptr) {}
explicit WindowsEventLogProvider(EVT_HANDLE provider_handle) : provider_handle_(provider_handle) {}
- nonstd::expected<std::string, std::error_code> getEventMessage(EVT_HANDLE event_handle) const;
+ std::expected<std::string, std::error_code> getEventMessage(EVT_HANDLE event_handle) const;
[[nodiscard]] std::string getEventData(EVT_FORMAT_MESSAGE_FLAGS field, const std::string& key, EVT_HANDLE event_handle) const;
private:
diff --git a/libminifi/CMakeLists.txt b/libminifi/CMakeLists.txt
index fba4b84c0..85a7da3f8 100644
--- a/libminifi/CMakeLists.txt
+++ b/libminifi/CMakeLists.txt
@@ -83,13 +83,10 @@ endif()
include(RangeV3)
include(Asio)
include(MagicEnum)
-list(APPEND LIBMINIFI_LIBRARIES minifi-core-framework yaml-cpp ZLIB::ZLIB concurrentqueue RapidJSON spdlog::spdlog Threads::Threads gsl-lite libsodium range-v3 expected-lite asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON fmt::fmt)
+list(APPEND LIBMINIFI_LIBRARIES minifi-core-framework yaml-cpp ZLIB::ZLIB concurrentqueue RapidJSON spdlog::spdlog Threads::Threads gsl-lite libsodium range-v3 asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON fmt::fmt)
if(NOT WIN32)
list(APPEND LIBMINIFI_LIBRARIES OSSP::libuuid++)
endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
- list(APPEND LIBMINIFI_LIBRARIES stdc++fs)
-endif()
target_link_libraries(core-minifi ${CMAKE_DL_LIBS} ${LIBMINIFI_LIBRARIES})
if (APPLE)
target_link_libraries(core-minifi "-framework CoreFoundation -framework SystemConfiguration")
diff --git a/libminifi/include/FlowController.h b/libminifi/include/FlowController.h
index ddeafba51..5473dd6d0 100644
--- a/libminifi/include/FlowController.h
+++ b/libminifi/include/FlowController.h
@@ -98,7 +98,7 @@ class FlowController : public core::controller::ForwardingControllerServiceProvi
int16_t resume() override;
// Unload the current flow, clean the root process group and all its children
int16_t stop() override;
- nonstd::expected<void, std::string> applyUpdate(const std::string &source, const std::string &configuration, bool persist, const std::optional<std::string>& flow_id) override;
+ std::expected<void, std::string> applyUpdate(const std::string &source, const std::string &configuration, bool persist, const std::optional<std::string>& flow_id) override;
int16_t drainRepositories() override {
return -1;
}
@@ -120,7 +120,7 @@ class FlowController : public core::controller::ForwardingControllerServiceProvi
// first it will validate the payload with the current root node config for flowController
// like FlowController id/name is the same and new version is greater than the current version
// after that, it will apply the configuration
- nonstd::expected<void, std::string> applyConfiguration(const std::string &source, const std::string &configurePayload, const std::optional<std::string>& flow_id = std::nullopt);
+ std::expected<void, std::string> applyConfiguration(const std::string &source, const std::string &configurePayload, const std::optional<std::string>& flow_id = std::nullopt);
std::string getName() const override {
return root_wrapper_.getName();
diff --git a/libminifi/include/SchedulingAgent.h b/libminifi/include/SchedulingAgent.h
index f1e3b892b..d5cab7af5 100644
--- a/libminifi/include/SchedulingAgent.h
+++ b/libminifi/include/SchedulingAgent.h
@@ -86,10 +86,10 @@ class SchedulingAgent {
bool processorYields(core::Processor* processor) const;
- nonstd::expected<void, std::exception_ptr> triggerAndCommit(core::Processor* processor,
+ std::expected<void, std::exception_ptr> triggerAndCommit(core::Processor* processor,
const std::shared_ptr<core::ProcessContext>& process_context,
const std::shared_ptr<core::ProcessSessionFactory>& session_factory);
- nonstd::expected<bool, std::exception_ptr> trigger(core::Processor* processor,
+ std::expected<bool, std::exception_ptr> trigger(core::Processor* processor,
const std::shared_ptr<core::ProcessContext>& process_context,
const std::shared_ptr<core::ProcessSession>& process_session);
diff --git a/libminifi/include/c2/C2Utils.h b/libminifi/include/c2/C2Utils.h
index 7389e489e..4911cc5aa 100644
--- a/libminifi/include/c2/C2Utils.h
+++ b/libminifi/include/c2/C2Utils.h
@@ -36,6 +36,6 @@ inline constexpr const char* CONTROLLER_SOCKET_METRICS_PUBLISHER = "ControllerSo
bool isC2Enabled(const std::shared_ptr<Configure>& configuration);
bool isControllerSocketEnabled(const std::shared_ptr<Configure>& configuration);
-nonstd::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBundleArchive(const std::map<std::string, std::unique_ptr<io::InputStream>>& files);
+std::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBundleArchive(const std::map<std::string, std::unique_ptr<io::InputStream>>& files);
} // namespace org::apache::nifi::minifi::c2
diff --git a/libminifi/include/c2/FlowStatusBuilder.h b/libminifi/include/c2/FlowStatusBuilder.h
index 63ccd6255..7770d68f8 100644
--- a/libminifi/include/c2/FlowStatusBuilder.h
+++ b/libminifi/include/c2/FlowStatusBuilder.h
@@ -40,14 +40,14 @@ class FlowStatusBuilder {
void addProcessorStatus(core::Processor* processor, rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
const std::unordered_set<FlowStatusQueryOption>& options);
core::Processor* findProcessor(const std::string& processor_id);
- nonstd::expected<void, std::string> addProcessorStatuses(rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
+ std::expected<void, std::string> addProcessorStatuses(rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
const std::string& identifier, const std::unordered_set<FlowStatusQueryOption>& options);
static void addConnectionStatus(Connection* connection, rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
const std::unordered_set<FlowStatusQueryOption>& options);
- nonstd::expected<void, std::string> addConnectionStatuses(rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
+ std::expected<void, std::string> addConnectionStatuses(rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
const std::string& identifier, const std::unordered_set<FlowStatusQueryOption>& options);
- nonstd::expected<void, std::string> addInstanceStatus(rapidjson::Value& instance_status, rapidjson::Document::AllocatorType& allocator, const std::unordered_set<FlowStatusQueryOption>& options);
- nonstd::expected<void, std::string> addSystemDiagnosticsStatus(rapidjson::Value& system_diagnostics_status, rapidjson::Document::AllocatorType& allocator,
+ std::expected<void, std::string> addInstanceStatus(rapidjson::Value& instance_status, rapidjson::Document::AllocatorType& allocator, const std::unordered_set<FlowStatusQueryOption>& options);
+ std::expected<void, std::string> addSystemDiagnosticsStatus(rapidjson::Value& system_diagnostics_status, rapidjson::Document::AllocatorType& allocator,
const std::unordered_set<FlowStatusQueryOption>& options);
std::mutex root_mutex_;
diff --git a/libminifi/include/core/ProcessContextImpl.h b/libminifi/include/core/ProcessContextImpl.h
index 32ab936e5..9466e69df 100644
--- a/libminifi/include/core/ProcessContextImpl.h
+++ b/libminifi/include/core/ProcessContextImpl.h
@@ -65,14 +65,14 @@ class ProcessContextImpl : public core::VariableRegistryImpl, public virtual Pro
bool hasNonEmptyProperty(std::string_view name) const override;
bool isRunning() const override;
- nonstd::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile*) const override;
- nonstd::expected<void, std::error_code> setProperty(std::string_view name, std::string value) override;
- nonstd::expected<void, std::error_code> clearProperty(std::string_view name) override;
- nonstd::expected<std::string, std::error_code> getDynamicProperty(std::string_view name, const FlowFile*) const override;
- nonstd::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) override;
- nonstd::expected<std::string, std::error_code> getRawProperty(std::string_view name) const override;
- nonstd::expected<std::string, std::error_code> getRawDynamicProperty(std::string_view name) const override;
- [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
+ std::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile*) const override;
+ std::expected<void, std::error_code> setProperty(std::string_view name, std::string value) override;
+ std::expected<void, std::error_code> clearProperty(std::string_view name) override;
+ std::expected<std::string, std::error_code> getDynamicProperty(std::string_view name, const FlowFile*) const override;
+ std::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) override;
+ std::expected<std::string, std::error_code> getRawProperty(std::string_view name) const override;
+ std::expected<std::string, std::error_code> getRawDynamicProperty(std::string_view name) const override;
+ [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
bool hasIncomingConnections() const override;
void addAutoTerminatedRelationship(const core::Relationship& relationship) override;
diff --git a/libminifi/include/core/ProcessSession.h b/libminifi/include/core/ProcessSession.h
index 0abc13a02..72494dd1b 100644
--- a/libminifi/include/core/ProcessSession.h
+++ b/libminifi/include/core/ProcessSession.h
@@ -57,7 +57,7 @@ class ProcessSessionImpl : public ReferenceContainerImpl, public virtual Process
void commit() override;
void rollback() override;
- nonstd::expected<void, std::string> rollbackNoThrow() noexcept override;
+ std::expected<void, std::string> rollbackNoThrow() noexcept override;
std::shared_ptr<provenance::ProvenanceReporter> getProvenanceReporter() override {
return provenance_report_;
diff --git a/libminifi/include/core/controller/ControllerService.h b/libminifi/include/core/controller/ControllerService.h
index a4c26f547..8133c4dd8 100644
--- a/libminifi/include/core/controller/ControllerService.h
+++ b/libminifi/include/core/controller/ControllerService.h
@@ -52,8 +52,8 @@ class ControllerService : public ConfigurableComponentImpl, public CoreComponent
class ControllerServiceContextImpl : public ControllerServiceContext {
public:
explicit ControllerServiceContextImpl(ControllerService& impl): impl_(impl) {}
- [[nodiscard]] nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const override;
- [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
+ [[nodiscard]] std::expected<std::string, std::error_code> getProperty(std::string_view name) const override;
+ [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
private:
ControllerService& impl_;
@@ -146,11 +146,11 @@ inline void ControllerService::ControllerServiceDescriptorImpl::setSupportedProp
impl_.setSupportedProperties(properties);
}
-inline nonstd::expected<std::string, std::error_code> ControllerService::ControllerServiceContextImpl::getProperty(std::string_view name) const {
+inline std::expected<std::string, std::error_code> ControllerService::ControllerServiceContextImpl::getProperty(std::string_view name) const {
return impl_.getProperty(name);
}
-inline nonstd::expected<std::vector<std::string>, std::error_code> ControllerService::ControllerServiceContextImpl::getAllPropertyValues(std::string_view name) const {
+inline std::expected<std::vector<std::string>, std::error_code> ControllerService::ControllerServiceContextImpl::getAllPropertyValues(std::string_view name) const {
return impl_.getAllPropertyValues(name);
}
diff --git a/libminifi/include/core/flow/Node.h b/libminifi/include/core/flow/Node.h
index f127288b7..c237211c4 100644
--- a/libminifi/include/core/flow/Node.h
+++ b/libminifi/include/core/flow/Node.h
@@ -24,7 +24,7 @@
#include <string>
#include <memory>
#include <utility>
-#include "nonstd/expected.hpp"
+#include <expected>
#include "utils/StringUtils.h"
#include "minifi-cpp/utils/gsl.h"
diff --git a/libminifi/include/core/state/UpdateController.h b/libminifi/include/core/state/UpdateController.h
index 652f43f8d..bed22a5b6 100644
--- a/libminifi/include/core/state/UpdateController.h
+++ b/libminifi/include/core/state/UpdateController.h
@@ -159,7 +159,7 @@ class StateMonitor : public StateController {
/**
* Apply an update with the provided string.
*/
- virtual nonstd::expected<void, std::string> applyUpdate(const std::string & source, const std::string &configuration,
+ virtual std::expected<void, std::string> applyUpdate(const std::string & source, const std::string &configuration,
bool persist = false, const std::optional<std::string>& flow_id = std::nullopt) = 0;
/**
* Returns uptime for this module.
diff --git a/libminifi/include/core/state/nodes/ResponseNodeLoader.h b/libminifi/include/core/state/nodes/ResponseNodeLoader.h
index fd606a609..d4c4240af 100644
--- a/libminifi/include/core/state/nodes/ResponseNodeLoader.h
+++ b/libminifi/include/core/state/nodes/ResponseNodeLoader.h
@@ -55,7 +55,7 @@ class ResponseNodeLoaderImpl : public ResponseNodeLoader {
private:
void initializeComponentMetrics();
std::vector<SharedResponseNode> getComponentMetricsNodes(const std::string& metrics_class) const;
- nonstd::expected<SharedResponseNode, std::string> getSystemMetricsNode(const std::string& clazz);
+ std::expected<SharedResponseNode, std::string> getSystemMetricsNode(const std::string& clazz);
std::vector<SharedResponseNode> getResponseNodes(const std::string& clazz);
void initializeRepositoryMetrics(const SharedResponseNode& response_node) const;
void initializeQueueMetrics(const SharedResponseNode& response_node) const;
diff --git a/libminifi/include/utils/file/AssetManager.h b/libminifi/include/utils/file/AssetManager.h
index e90561c2e..7d7d41036 100644
--- a/libminifi/include/utils/file/AssetManager.h
+++ b/libminifi/include/utils/file/AssetManager.h
@@ -53,8 +53,8 @@ class AssetManager {
public:
explicit AssetManager(const Configure& configuration);
- nonstd::expected<void, std::string> sync(const AssetLayout& layout,
- const std::function<nonstd::expected<void, std::string>(std::string_view /*url*/, const std::filesystem::path& /*tmp_path*/)>& fetch);
+ std::expected<void, std::string> sync(const AssetLayout& layout,
+ const std::function<std::expected<void, std::string>(std::string_view /*url*/, const std::filesystem::path& /*tmp_path*/)>& fetch);
std::string hash() const;
diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp
index a9eaa280c..a6b199b98 100644
--- a/libminifi/src/FlowController.cpp
+++ b/libminifi/src/FlowController.cpp
@@ -107,20 +107,20 @@ FlowController::~FlowController() {
logger_->log_trace("Destroying FlowController");
}
-nonstd::expected<void, std::string> FlowController::applyConfiguration(const std::string &source, const std::string &configurePayload, const std::optional<std::string>& flow_id) {
+std::expected<void, std::string> FlowController::applyConfiguration(const std::string &source, const std::string &configurePayload, const std::optional<std::string>& flow_id) {
std::unique_ptr<core::ProcessGroup> newRoot;
try {
newRoot = updateFromPayload(source, configurePayload, flow_id);
} catch (const std::exception& ex) {
logger_->log_error("Invalid configuration payload, type: {}, what: {}", typeid(ex).name(), ex.what());
- return nonstd::make_unexpected(fmt::format("Invalid configuration payload, type: {}, what: {}", typeid(ex).name(), ex.what()));
+ return std::unexpected{fmt::format("Invalid configuration payload, type: {}, what: {}", typeid(ex).name(), ex.what())};
} catch (...) {
logger_->log_error("Invalid configuration payload, type: {}", getCurrentExceptionTypeName());
- return nonstd::make_unexpected(fmt::format("Invalid configuration payload, type: {}", getCurrentExceptionTypeName()));
+ return std::unexpected{fmt::format("Invalid configuration payload, type: {}", getCurrentExceptionTypeName())};
}
if (newRoot == nullptr)
- return nonstd::make_unexpected("Could not create root process group");
+ return std::unexpected{"Could not create root process group"};
logger_->log_info("Starting to reload Flow Controller with flow control name {}, version {}", newRoot->getName(), newRoot->getVersion());
@@ -163,7 +163,7 @@ nonstd::expected<void, std::string> FlowController::applyConfiguration(const std
}
if (!started) {
- return nonstd::make_unexpected("Failed to start flow");
+ return std::unexpected{"Failed to start flow"};
}
return {};
}
@@ -379,7 +379,7 @@ std::vector<std::string> FlowController::getSupportedConfigurationFormats() cons
return flow_configuration_->getSupportedFormats();
}
-nonstd::expected<void, std::string> FlowController::applyUpdate(const std::string &source, const std::string &configuration, bool persist, const std::optional<std::string>& flow_id) {
+std::expected<void, std::string> FlowController::applyUpdate(const std::string &source, const std::string &configuration, bool persist, const std::optional<std::string>& flow_id) {
auto result = applyConfiguration(source, configuration, flow_id);
if (result) {
if (persist) {
diff --git a/libminifi/src/SchedulingAgent.cpp b/libminifi/src/SchedulingAgent.cpp
index aed4c2a8d..1a58263ef 100644
--- a/libminifi/src/SchedulingAgent.cpp
+++ b/libminifi/src/SchedulingAgent.cpp
@@ -62,7 +62,7 @@ bool SchedulingAgent::processorYields(core::Processor* processor) const {
return false;
}
-nonstd::expected<void, std::exception_ptr> SchedulingAgent::triggerAndCommit(core::Processor* processor,
+std::expected<void, std::exception_ptr> SchedulingAgent::triggerAndCommit(core::Processor* processor,
const std::shared_ptr<core::ProcessContext>& process_context,
const std::shared_ptr<core::ProcessSessionFactory>& session_factory) {
gsl_Expects(processor);
@@ -92,17 +92,17 @@ nonstd::expected<void, std::exception_ptr> SchedulingAgent::triggerAndCommit(cor
logger_->log_warn("Caught Exception during SchedulingAgent::onTrigger of processor {} (uuid: {}), type: {}, what: {}",
processor->getName(), processor->getUUIDStr(), typeid(exception).name(), exception.what());
processor->yield(admin_yield_duration_);
- return nonstd::make_unexpected(std::current_exception());
+ return std::unexpected{std::current_exception()};
} catch (...) {
logger_->log_warn("Caught Exception during SchedulingAgent::onTrigger of processor {} (uuid: {}), type: {}",
processor->getName(), processor->getUUIDStr(), getCurrentExceptionTypeName());
processor->yield(admin_yield_duration_);
- return nonstd::make_unexpected(std::current_exception());
+ return std::unexpected{std::current_exception()};
}
return {};
}
-nonstd::expected<bool, std::exception_ptr> SchedulingAgent::trigger(core::Processor* processor,
+std::expected<bool, std::exception_ptr> SchedulingAgent::trigger(core::Processor* processor,
const std::shared_ptr<core::ProcessContext>& process_context,
const std::shared_ptr<core::ProcessSession>& process_session) {
gsl_Expects(processor);
@@ -130,12 +130,12 @@ nonstd::expected<bool, std::exception_ptr> SchedulingAgent::trigger(core::Proces
logger_->log_warn("Caught Exception during SchedulingAgent::onTrigger of processor {} (uuid: {}), type: {}, what: {}",
processor->getName(), processor->getUUIDStr(), typeid(exception).name(), exception.what());
processor->yield(admin_yield_duration_);
- return nonstd::make_unexpected(std::current_exception());
+ return std::unexpected{std::current_exception()};
} catch (...) {
logger_->log_warn("Caught Exception during SchedulingAgent::onTrigger of processor {} (uuid: {}), type: {}",
processor->getName(), processor->getUUIDStr(), getCurrentExceptionTypeName());
processor->yield(admin_yield_duration_);
- return nonstd::make_unexpected(std::current_exception());
+ return std::unexpected{std::current_exception()};
}
return true;
}
diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp
index ec8ab6842..ba96745ba 100644
--- a/libminifi/src/c2/C2Agent.cpp
+++ b/libminifi/src/c2/C2Agent.cpp
@@ -321,14 +321,14 @@ struct C2DebugBundleError : public C2TransferError {
using C2TransferError::C2TransferError;
};
-nonstd::expected<void, std::string> fetchAssetAsFile(C2Protocol& protocol, const std::string& url, const std::filesystem::path& file_path, const std::shared_ptr<core::logging::Logger>& logger) {
+std::expected<void, std::string> fetchAssetAsFile(C2Protocol& protocol, const std::string& url, const std::filesystem::path& file_path, const std::shared_ptr<core::logging::Logger>& logger) {
if (utils::file::create_dir(file_path.parent_path()) != 0) {
- return nonstd::make_unexpected(fmt::format("Failed to create directory '{}'", file_path.parent_path().string()));
+ return std::unexpected{fmt::format("Failed to create directory '{}'", file_path.parent_path().string())};
}
std::ofstream file{file_path, std::ofstream::binary};
if (!file) {
- return nonstd::make_unexpected(fmt::format("Failed to open file to write '{}'", file_path.string()));
+ return std::unexpected{fmt::format("Failed to open file to write '{}'", file_path.string())};
}
bool success = protocol.fetch(url, [&] (std::span<const char> chunk) {
file.write(chunk.data(), gsl::narrow<std::streamsize>(chunk.size()));
@@ -343,7 +343,7 @@ nonstd::expected<void, std::string> fetchAssetAsFile(C2Protocol& protocol, const
} else {
logger->log_info("Successfully removed partial asset file '{}'", file_path.string());
}
- return nonstd::make_unexpected(fmt::format("Failed to fetch asset from '{}'", url));
+ return std::unexpected{fmt::format("Failed to fetch asset from '{}'", url)};
}
return {};
}
@@ -801,12 +801,12 @@ void C2Agent::handle_sync(const org::apache::nifi::minifi::c2::C2ContentResponse
send_error(fmt::format("Malformed request, 'resourceList[{}]' is not an object", resource_idx));
return;
}
- auto get_member_str = [&] (const char* key) -> nonstd::expected<std::string_view, std::string> {
+ auto get_member_str = [&] (const char* key) -> std::expected<std::string_view, std::string> {
if (!resource.HasMember(key)) {
- return nonstd::make_unexpected(fmt::format("Malformed request, 'resourceList[{}]' has no member '{}'", resource_idx, key));
+ return std::unexpected{fmt::format("Malformed request, 'resourceList[{}]' has no member '{}'", resource_idx, key)};
}
if (!resource[key].IsString()) {
- return nonstd::make_unexpected(fmt::format("Malformed request, 'resourceList[{}].{}' is not a string", resource_idx, key));
+ return std::unexpected{fmt::format("Malformed request, 'resourceList[{}].{}' is not a string", resource_idx, key)};
}
return std::string_view{resource[key].GetString(), resource[key].GetStringLength()};
};
@@ -855,10 +855,10 @@ void C2Agent::handle_sync(const org::apache::nifi::minifi::c2::C2ContentResponse
});
}
- auto result = asset_manager_->sync(asset_layout, [&] (std::string_view url, const std::filesystem::path& file_path) -> nonstd::expected<void, std::string> {
+ auto result = asset_manager_->sync(asset_layout, [&] (std::string_view url, const std::filesystem::path& file_path) -> std::expected<void, std::string> {
auto resolved_url = resolveUrl(std::string{url});
if (!resolved_url) {
- return nonstd::make_unexpected("Couldn't resolve url");
+ return std::unexpected{"Couldn't resolve url"};
}
return fetchAssetAsFile(*protocol_, resolved_url.value(), file_path, logger_);
});
diff --git a/libminifi/src/c2/C2Utils.cpp b/libminifi/src/c2/C2Utils.cpp
index 00a8f6d9e..d6f998295 100644
--- a/libminifi/src/c2/C2Utils.cpp
+++ b/libminifi/src/c2/C2Utils.cpp
@@ -34,29 +34,29 @@ bool isControllerSocketEnabled(const std::shared_ptr<Configure>& configuration)
return utils::string::toBool(controller_socket_enable_str).value_or(false);
}
-nonstd::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBundleArchive(const std::map<std::string, std::unique_ptr<io::InputStream>>& files) {
+std::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBundleArchive(const std::map<std::string, std::unique_ptr<io::InputStream>>& files) {
auto stream_provider = core::ClassLoader::getDefaultClassLoader().instantiate<io::ArchiveStreamProvider>(
"ArchiveStreamProvider", "ArchiveStreamProvider");
if (!stream_provider) {
- return nonstd::make_unexpected("Couldn't instantiate archiver provider");
+ return std::unexpected{"Couldn't instantiate archiver provider"};
}
auto bundle = std::make_shared<io::BufferStream>();
auto archiver = stream_provider->createWriteStream(9, "gzip", bundle, nullptr);
if (!archiver) {
- return nonstd::make_unexpected("Couldn't instantiate archiver");
+ return std::unexpected{"Couldn't instantiate archiver"};
}
for (const auto& [filename, stream] : files) {
size_t file_size = stream->size();
if (!archiver->newEntry({filename, file_size})) {
- return nonstd::make_unexpected("Couldn't initialize archive entry for '" + filename + "'");
+ return std::unexpected{"Couldn't initialize archive entry for '" + filename + "'"};
}
if (gsl::narrow<int64_t>(file_size) != minifi::internal::pipe(*stream, *archiver).toI64()) {
// we have touched the input streams, they cannot be reused
- return nonstd::make_unexpected("Error while writing file '" + filename + "' into the debug bundle");
+ return std::unexpected{"Error while writing file '" + filename + "' into the debug bundle"};
}
}
if (!archiver->finish()) {
- return nonstd::make_unexpected("Failed to complete debug bundle archive");
+ return std::unexpected{"Failed to complete debug bundle archive"};
}
return bundle;
}
diff --git a/libminifi/src/c2/FlowStatusBuilder.cpp b/libminifi/src/c2/FlowStatusBuilder.cpp
index b4bcb8986..7512c31a1 100644
--- a/libminifi/src/c2/FlowStatusBuilder.cpp
+++ b/libminifi/src/c2/FlowStatusBuilder.cpp
@@ -109,7 +109,7 @@ core::Processor* FlowStatusBuilder::findProcessor(const std::string& processor_i
return nullptr;
}
-nonstd::expected<void, std::string> FlowStatusBuilder::addProcessorStatuses(rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
+std::expected<void, std::string> FlowStatusBuilder::addProcessorStatuses(rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
const std::string& identifier, const std::unordered_set<FlowStatusQueryOption>& options) {
static const std::unordered_set<FlowStatusQueryOption> valid_options = {
FlowStatusQueryOption::health,
@@ -120,14 +120,14 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addProcessorStatuses(rapi
for (const auto& option : options) {
if (!valid_options.contains(option)) {
logger_->log_error("Unable to get processorStatus: Invalid query option for processor status '{}'", magic_enum::enum_name(option));
- return nonstd::make_unexpected(fmt::format("Unable to get processorStatus: Invalid query option for processor status '{}'", magic_enum::enum_name(option)));
+ return std::unexpected{fmt::format("Unable to get processorStatus: Invalid query option for processor status '{}'", magic_enum::enum_name(option))};
}
}
std::lock_guard<std::mutex> guard(root_mutex_);
if (identifier.empty()) {
logger_->log_error("Unable to get processorStatus: Query is incomplete");
- return nonstd::make_unexpected("Unable to get processorStatus: Query is incomplete");
+ return std::unexpected{"Unable to get processorStatus: Query is incomplete"};
} else if (identifier == "all") {
for (const auto processor : processors_) {
addProcessorStatus(processor, processor_status_list, allocator, options);
@@ -136,7 +136,7 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addProcessorStatuses(rapi
auto processor = findProcessor(identifier);
if (!processor) {
logger_->log_error("Unable to get processorStatus: No processor with key '{}' to report status on", identifier);
- return nonstd::make_unexpected(fmt::format("Unable to get processorStatus: No processor with key '{}' to report status on", identifier));
+ return std::unexpected{fmt::format("Unable to get processorStatus: No processor with key '{}' to report status on", identifier)};
}
addProcessorStatus(processor, processor_status_list, allocator, options);
}
@@ -164,18 +164,18 @@ void FlowStatusBuilder::addConnectionStatus(Connection* connection, rapidjson::V
connection_status_list.PushBack(connection_status, allocator);
}
-nonstd::expected<void, std::string> FlowStatusBuilder::addConnectionStatuses(rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
+std::expected<void, std::string> FlowStatusBuilder::addConnectionStatuses(rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
const std::string& identifier, const std::unordered_set<FlowStatusQueryOption>& options) {
for (const auto& option : options) {
if (option != FlowStatusQueryOption::health) {
logger_->log_error("Unable to get connectionStatus: Invalid query option for connection status '{}'", magic_enum::enum_name(option));
- return nonstd::make_unexpected(fmt::format("Unable to get connectionStatus: Invalid query option for connection status '{}'", magic_enum::enum_name(option)));
+ return std::unexpected{fmt::format("Unable to get connectionStatus: Invalid query option for connection status '{}'", magic_enum::enum_name(option))};
}
}
std::lock_guard<std::mutex> guard(root_mutex_);
if (identifier.empty()) {
logger_->log_error("Unable to get connectionStatus: Query is incomplete");
- return nonstd::make_unexpected("Unable to get connectionStatus: Query is incomplete");
+ return std::unexpected{"Unable to get connectionStatus: Query is incomplete"};
}
if (identifier == "all") {
@@ -187,14 +187,14 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addConnectionStatuses(rap
addConnectionStatus(connection_map_[identifier], connection_status_list, allocator, options);
} else {
logger_->log_error("Unable to get connectionStatus: No connection with key '{}' to report status on", identifier);
- return nonstd::make_unexpected(fmt::format("Unable to get connectionStatus: No connection with key '{}' to report status on", identifier));
+ return std::unexpected{fmt::format("Unable to get connectionStatus: No connection with key '{}' to report status on", identifier)};
}
}
return {};
}
-nonstd::expected<void, std::string> FlowStatusBuilder::addInstanceStatus(rapidjson::Value& instance_status, rapidjson::Document::AllocatorType& allocator,
+std::expected<void, std::string> FlowStatusBuilder::addInstanceStatus(rapidjson::Value& instance_status, rapidjson::Document::AllocatorType& allocator,
const std::unordered_set<FlowStatusQueryOption>& options) {
static const std::unordered_set<FlowStatusQueryOption> valid_options = {
FlowStatusQueryOption::health,
@@ -205,7 +205,7 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addInstanceStatus(rapidjs
for (const auto& option : options) {
if (!valid_options.contains(option)) {
logger_->log_error("Unable to get instance: Invalid query option for instance status '{}'", magic_enum::enum_name(option));
- return nonstd::make_unexpected(fmt::format("Unable to get instance: Invalid query option for instance status '{}'", magic_enum::enum_name(option)));
+ return std::unexpected{fmt::format("Unable to get instance: Invalid query option for instance status '{}'", magic_enum::enum_name(option))};
}
}
@@ -273,7 +273,7 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addInstanceStatus(rapidjs
return {};
}
-nonstd::expected<void, std::string> FlowStatusBuilder::addSystemDiagnosticsStatus(rapidjson::Value& system_diagnostics_status, rapidjson::Document::AllocatorType& allocator,
+std::expected<void, std::string> FlowStatusBuilder::addSystemDiagnosticsStatus(rapidjson::Value& system_diagnostics_status, rapidjson::Document::AllocatorType& allocator,
const std::unordered_set<FlowStatusQueryOption>& options) {
static const std::unordered_set<FlowStatusQueryOption> valid_options = {
FlowStatusQueryOption::processorstats,
@@ -284,7 +284,7 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addSystemDiagnosticsStatu
for (const auto& option : options) {
if (!valid_options.contains(option)) {
logger_->log_error("Unable to get systemDiagnostics: Invalid query option for system diagnostics '{}'", magic_enum::enum_name(option));
- return nonstd::make_unexpected(fmt::format("Unable to get systemDiagnostics: Invalid query option for system diagnostics '{}'", magic_enum::enum_name(option)));
+ return std::unexpected{fmt::format("Unable to get systemDiagnostics: Invalid query option for system diagnostics '{}'", magic_enum::enum_name(option))};
}
}
@@ -350,7 +350,7 @@ rapidjson::Document FlowStatusBuilder::buildFlowStatus(const std::vector<FlowSta
auto allocator = doc.GetAllocator();
- auto handleError = [&doc, &allocator](const nonstd::expected<void, std::string>& result) {
+ auto handleError = [&doc, &allocator](const std::expected<void, std::string>& result) {
if (result) {
return;
}
diff --git a/libminifi/src/core/ProcessContextImpl.cpp b/libminifi/src/core/ProcessContextImpl.cpp
index 34846cc8a..841b74ca5 100644
--- a/libminifi/src/core/ProcessContextImpl.cpp
+++ b/libminifi/src/core/ProcessContextImpl.cpp
@@ -32,7 +32,7 @@ class StandardProcessorInfo : public ProcessorInfo {
[[nodiscard]] utils::Identifier getUUID() const override {return proc_.getUUID();}
[[nodiscard]] std::shared_ptr<state::FlowIdentifier> getFlowIdentifier() const override {return proc_.getFlowIdentifier();}
[[nodiscard]] std::map<std::string, core::Property, std::less<>> getSupportedProperties() const override {return proc_.getSupportedProperties();}
- [[nodiscard]] nonstd::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const override {return proc_.getSupportedProperty(name);}
+ [[nodiscard]] std::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const override {return proc_.getSupportedProperty(name);}
private:
Processor& proc_;
@@ -99,10 +99,10 @@ uint8_t ProcessContextImpl::getMaxConcurrentTasks() const { return processor_.ge
void ProcessContextImpl::yield() { processor_.yield(); }
-nonstd::expected<std::string, std::error_code> ProcessContextImpl::getProperty(const std::string_view name, const FlowFile* flow_file) const {
+std::expected<std::string, std::error_code> ProcessContextImpl::getProperty(const std::string_view name, const FlowFile* flow_file) const {
const auto property = getProcessorInfo().getSupportedProperty(name);
if (!property) {
- return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty);
+ return std::unexpected{PropertyErrorCode::NotSupportedProperty};
}
if (!property->supportsExpressionLanguage()) {
@@ -116,22 +116,22 @@ nonstd::expected<std::string, std::error_code> ProcessContextImpl::getProperty(c
expression::Parameters p(this, flow_file);
auto result = cached_expressions_[std::string{name}](p).asString();
if (!property->getValidator().validate(result)) {
- return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed);
+ return std::unexpected{PropertyErrorCode::ValidationFailed};
}
return result;
}
-nonstd::expected<void, std::error_code> ProcessContextImpl::setProperty(const std::string_view name, std::string value) {
+std::expected<void, std::error_code> ProcessContextImpl::setProperty(const std::string_view name, std::string value) {
cached_expressions_.erase(std::string{name});
return getProcessor().setProperty(name, std::move(value));
}
-nonstd::expected<void, std::error_code> ProcessContextImpl::clearProperty(const std::string_view name) {
+std::expected<void, std::error_code> ProcessContextImpl::clearProperty(const std::string_view name) {
cached_expressions_.erase(std::string{name});
return getProcessor().clearProperty(name);
}
-nonstd::expected<std::string, std::error_code> ProcessContextImpl::getDynamicProperty(const std::string_view name, const FlowFile* flow_file) const {
+std::expected<std::string, std::error_code> ProcessContextImpl::getDynamicProperty(const std::string_view name, const FlowFile* flow_file) const {
if (!cached_dynamic_expressions_.contains(name)) {
auto expression_str = getProcessor().getDynamicProperty(name);
if (!expression_str) { return expression_str; }
@@ -141,20 +141,20 @@ nonstd::expected<std::string, std::error_code> ProcessContextImpl::getDynamicPro
return cached_dynamic_expressions_[std::string{name}](p).asString();
}
-nonstd::expected<std::string, std::error_code> ProcessContextImpl::getRawProperty(const std::string_view name) const {
+std::expected<std::string, std::error_code> ProcessContextImpl::getRawProperty(const std::string_view name) const {
return getProcessor().getProperty(name);
}
-nonstd::expected<std::string, std::error_code> ProcessContextImpl::getRawDynamicProperty(const std::string_view name) const {
+std::expected<std::string, std::error_code> ProcessContextImpl::getRawDynamicProperty(const std::string_view name) const {
return getProcessor().getDynamicProperty(name);
}
-nonstd::expected<void, std::error_code> ProcessContextImpl::setDynamicProperty(std::string name, std::string value) {
+std::expected<void, std::error_code> ProcessContextImpl::setDynamicProperty(std::string name, std::string value) {
cached_dynamic_expressions_.erase(name);
return getProcessor().setDynamicProperty(std::move(name), std::move(value));
}
-[[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> ProcessContextImpl::getAllPropertyValues(std::string_view name) const {
+[[nodiscard]] std::expected<std::vector<std::string>, std::error_code> ProcessContextImpl::getAllPropertyValues(std::string_view name) const {
return getProcessor().getAllPropertyValues(name);
}
diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp
index 662f2b00e..a86f80e67 100644
--- a/libminifi/src/core/ProcessSession.cpp
+++ b/libminifi/src/core/ProcessSession.cpp
@@ -1041,12 +1041,12 @@ void ProcessSessionImpl::rollback() {
}
}
-nonstd::expected<void, std::string> ProcessSessionImpl::rollbackNoThrow() noexcept {
+std::expected<void, std::string> ProcessSessionImpl::rollbackNoThrow() noexcept {
try {
rollback();
return {};
} catch(const std::exception& exception) {
- return nonstd::make_unexpected(exception.what());
+ return std::unexpected{exception.what()};
} catch(...) {
logger_->log_critical("Caught unknown exception during rollback, type: {}, terminating", getCurrentExceptionTypeName());
std::terminate();
diff --git a/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp b/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp
index dc8f5211c..76a73f0b5 100644
--- a/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp
+++ b/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp
@@ -99,7 +99,7 @@ void ResponseNodeLoaderImpl::initializeComponentMetrics() {
}
}
-nonstd::expected<SharedResponseNode, std::string> ResponseNodeLoaderImpl::getSystemMetricsNode(const std::string& clazz) {
+std::expected<SharedResponseNode, std::string> ResponseNodeLoaderImpl::getSystemMetricsNode(const std::string& clazz) {
std::lock_guard<std::mutex> guard(system_metrics_mutex_);
if (system_metrics_.contains(clazz)) {
return system_metrics_.at(clazz);
@@ -108,7 +108,7 @@ nonstd::expected<SharedResponseNode, std::string> ResponseNodeLoaderImpl::getSys
std::shared_ptr ptr = core::ClassLoader::getDefaultClassLoader().instantiate(clazz, clazz);
auto response_node = std::dynamic_pointer_cast<ResponseNode>(ptr);
if (!response_node) {
- return nonstd::make_unexpected("Instantiated class '" + clazz + "' is not a ResponseNode!");
+ return std::unexpected{"Instantiated class '" + clazz + "' is not a ResponseNode!"};
}
system_metrics_.emplace(clazz, gsl::make_not_null(response_node));
return system_metrics_.at(clazz);
diff --git a/libminifi/src/sitetosite/SiteToSiteClient.cpp b/libminifi/src/sitetosite/SiteToSiteClient.cpp
index c5bd28850..8d934ac09 100644
--- a/libminifi/src/sitetosite/SiteToSiteClient.cpp
+++ b/libminifi/src/sitetosite/SiteToSiteClient.cpp
@@ -562,7 +562,7 @@ bool SiteToSiteClient::sendPacket(const DataPacket& packet) {
std::expected<void, std::string> SiteToSiteClient::readFlowFileHeaderData(io::InputStream& stream, const std::string& transaction_id_str, SiteToSiteClient::ReceiveFlowFileHeaderResult& result) {
uint32_t num_attributes = 0;
if (const auto ret = stream.read(num_attributes); ret == 0 || io::isError(ret) || num_attributes > MAX_NUM_ATTRIBUTES) {
- return std::unexpected(fmt::format("Site2Site failed to read number of attributes with return code {}, or number of attributes is invalid: {}", ret, num_attributes));
+ return std::unexpected{fmt::format("Site2Site failed to read number of attributes with return code {}, or number of attributes is invalid: {}", ret, num_attributes)};
}
logger_->log_debug("Site2Site transaction {} receives {} attributes", transaction_id_str, num_attributes);
@@ -570,11 +570,11 @@ std::expected<void, std::string> SiteToSiteClient::readFlowFileHeaderData(io::In
std::string key;
std::string value;
if (const auto ret = stream.read(key, true); ret == 0 || io::isError(ret)) {
- return std::unexpected(fmt::format("Site2Site transaction {} failed to read attribute key", transaction_id_str));
+ return std::unexpected{fmt::format("Site2Site transaction {} failed to read attribute key", transaction_id_str)};
}
if (const auto ret = stream.read(value, true); ret == 0 || io::isError(ret)) {
- return std::unexpected(fmt::format("Site2Site transaction {} failed to read attribute value for key {}", transaction_id_str, key));
+ return std::unexpected{fmt::format("Site2Site transaction {} failed to read attribute value for key {}", transaction_id_str, key)};
}
result.attributes[key] = value;
@@ -583,7 +583,7 @@ std::expected<void, std::string> SiteToSiteClient::readFlowFileHeaderData(io::In
uint64_t len = 0;
if (const auto ret = stream.read(len); ret == 0 || io::isError(ret)) {
- return std::unexpected(fmt::format("Site2Site transaction {} failed to read flow file data size", transaction_id_str));
+ return std::unexpected{fmt::format("Site2Site transaction {} failed to read flow file data size", transaction_id_str)};
}
result.flow_file_data_size = len;
@@ -596,16 +596,16 @@ std::expected<SiteToSiteClient::ReceiveFlowFileHeaderResult, std::string> SiteTo
}
if (peer_state_ != PeerState::READY) {
- return std::unexpected("Peer state is not ready");
+ return std::unexpected{"Peer state is not ready"};
}
const auto transaction_id_str = transaction->getUUIDStr();
if (transaction->getState() != TransactionState::TRANSACTION_STARTED && transaction->getState() != TransactionState::DATA_EXCHANGED) {
- return std::unexpected(fmt::format("Site2Site transaction {} is not at started or exchanged state", transaction_id_str));
+ return std::unexpected{fmt::format("Site2Site transaction {} is not at started or exchanged state", transaction_id_str)};
}
if (transaction->getDirection() != TransferDirection::RECEIVE) {
- return std::unexpected(fmt::format("Site2Site transaction {} direction is wrong", transaction_id_str));
+ return std::unexpected{fmt::format("Site2Site transaction {} direction is wrong", transaction_id_str)};
}
ReceiveFlowFileHeaderResult result;
@@ -618,7 +618,7 @@ std::expected<SiteToSiteClient::ReceiveFlowFileHeaderResult, std::string> SiteTo
// if we already have transferred a flow file before, check to see whether another one is available
auto response = readResponse(transaction);
if (!response) {
- return std::unexpected("Failed to read response");
+ return std::unexpected{"Failed to read response"};
}
if (response->code == ResponseCode::CONTINUE_TRANSACTION) {
logger_->log_debug("Site2Site transaction {} peer indicate continue transaction", transaction_id_str);
@@ -629,7 +629,7 @@ std::expected<SiteToSiteClient::ReceiveFlowFileHeaderResult, std::string> SiteTo
result.eof = true;
return result;
} else {
- return std::unexpected(fmt::format("Site2Site transaction {} peer indicate wrong response code {}", transaction_id_str, magic_enum::enum_underlying(response->code)));
+ return std::unexpected{fmt::format("Site2Site transaction {} peer indicate wrong response code {}", transaction_id_str, magic_enum::enum_underlying(response->code))};
}
}
@@ -640,7 +640,7 @@ std::expected<SiteToSiteClient::ReceiveFlowFileHeaderResult, std::string> SiteTo
}
if (auto ret = readFlowFileHeaderData(stream, transaction_id_str, result); !ret.has_value()) {
- return std::unexpected(fmt::format("Site2Site transaction {} failed to read flow file header data: {}", transaction_id_str, ret.error()));
+ return std::unexpected{fmt::format("Site2Site transaction {} failed to read flow file header data: {}", transaction_id_str, ret.error())};
}
if (result.flow_file_data_size > 0 || !result.attributes.empty()) {
diff --git a/libminifi/src/utils/file/AssetManager.cpp b/libminifi/src/utils/file/AssetManager.cpp
index dc1793033..73e4a11ff 100644
--- a/libminifi/src/utils/file/AssetManager.cpp
+++ b/libminifi/src/utils/file/AssetManager.cpp
@@ -119,9 +119,9 @@ std::string AssetManager::hash() const {
return state_.digest.empty() ? "null" : state_.digest;
}
-nonstd::expected<void, std::string> AssetManager::sync(
+std::expected<void, std::string> AssetManager::sync(
const AssetLayout& layout,
- const std::function<nonstd::expected<void, std::string>(std::string_view /*url*/, const std::filesystem::path& /*tmp_path*/)>& fetch) {
+ const std::function<std::expected<void, std::string>(std::string_view /*url*/, const std::filesystem::path& /*tmp_path*/)>& fetch) {
logger_->log_info("Synchronizing assets");
std::lock_guard lock(mtx_);
AssetLayout new_state{
@@ -182,7 +182,7 @@ nonstd::expected<void, std::string> AssetManager::sync(
persist();
if (!new_asset_errors.empty()) {
- return nonstd::make_unexpected(new_asset_errors);
+ return std::unexpected{new_asset_errors};
}
return {};
diff --git a/libminifi/test/libtest/unit/ProvenanceTestHelper.h b/libminifi/test/libtest/unit/ProvenanceTestHelper.h
index 4da9cea14..6b6d3cbae 100644
--- a/libminifi/test/libtest/unit/ProvenanceTestHelper.h
+++ b/libminifi/test/libtest/unit/ProvenanceTestHelper.h
@@ -46,6 +46,8 @@ class TestRepositoryBase : public T_BaseRepository {
: T_BaseRepository("repo_name", "./dir", 1s, TEST_MAX_REPOSITORY_STORAGE_SIZE, 0ms) {
}
+ virtual ~TestRepositoryBase() = default;
+
bool initialize(const std::shared_ptr<org::apache::nifi::minifi::Configure> &) override {
return true;
}
diff --git a/libminifi/test/unit/ExpectedTest.cpp b/libminifi/test/unit/ExpectedTest.cpp
index 978ce1cb6..11bc0e9ec 100644
--- a/libminifi/test/unit/ExpectedTest.cpp
+++ b/libminifi/test/unit/ExpectedTest.cpp
@@ -18,6 +18,7 @@
#define EXTENSION_LIST "" // NOLINT(cppcoreguidelines-macro-usage)
#include <memory>
#include <string_view>
+#include "fmt/std.h"
#include "unit/TestBase.h"
#include "unit/Catch.h"
#include "utils/expected.h"
@@ -34,129 +35,129 @@ TEST_CASE("expected transform", "[expected][transform]") {
auto ret_void = [](int) {};
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = e | utils::transform(mul2);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = e | utils::transform(mul2);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::transform(mul2);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::transform(mul2); // NOLINT(performance-move-const-arg)
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::transform(mul2);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::transform(mul2);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::transform(mul2);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::transform(mul2); // NOLINT(performance-move-const-arg)
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = e | utils::transform(ret_void);
REQUIRE(ret);
STATIC_REQUIRE(
- (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+ (std::is_same_v<decltype(ret), std::expected<void, int>>));
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = e | utils::transform(ret_void);
REQUIRE(ret);
STATIC_REQUIRE(
- (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+ (std::is_same_v<decltype(ret), std::expected<void, int>>));
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::transform(ret_void);
REQUIRE(ret);
STATIC_REQUIRE(
- (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+ (std::is_same_v<decltype(ret), std::expected<void, int>>));
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::transform(ret_void); // NOLINT(performance-move-const-arg)
REQUIRE(ret);
STATIC_REQUIRE(
- (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+ (std::is_same_v<decltype(ret), std::expected<void, int>>));
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::transform(ret_void);
REQUIRE(!ret);
STATIC_REQUIRE(
- (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+ (std::is_same_v<decltype(ret), std::expected<void, int>>));
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::transform(ret_void);
REQUIRE(!ret);
STATIC_REQUIRE(
- (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+ (std::is_same_v<decltype(ret), std::expected<void, int>>));
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::transform(ret_void);
REQUIRE(!ret);
STATIC_REQUIRE(
- (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+ (std::is_same_v<decltype(ret), std::expected<void, int>>));
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::transform(ret_void); // NOLINT(performance-move-const-arg)
REQUIRE(!ret);
STATIC_REQUIRE(
- (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+ (std::is_same_v<decltype(ret), std::expected<void, int>>));
}
// mapping functions which return references
{
- nonstd::expected<int, int> e(42);
+ std::expected<int, int> e(42);
auto ret = e | utils::transform([](int& i) -> int& { return i; });
REQUIRE(ret);
REQUIRE(*ret == 42);
@@ -164,116 +165,116 @@ TEST_CASE("expected transform", "[expected][transform]") {
}
TEST_CASE("expected andThen", "[expected][andThen]") {
- auto succeed = [](int) { return nonstd::expected<int, int>(21 * 2); };
- auto fail = [](int) { return nonstd::expected<int, int>(nonstd::unexpect, 17); };
+ auto succeed = [](int) { return std::expected<int, int>(21 * 2); };
+ auto fail = [](int) { return std::expected<int, int>(std::unexpect, 17); };
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = e | utils::andThen(succeed);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = e | utils::andThen(succeed);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::andThen(succeed);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::andThen(succeed); // NOLINT(performance-move-const-arg)
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = e | utils::andThen(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 17);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = e | utils::andThen(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 17);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::andThen(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 17);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::andThen(fail); // NOLINT(performance-move-const-arg)
REQUIRE(!ret);
REQUIRE(ret.error() == 17);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::andThen(succeed);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::andThen(succeed);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::andThen(succeed);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::andThen(succeed); // NOLINT(performance-move-const-arg)
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::andThen(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::andThen(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::andThen(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::andThen(fail); // NOLINT(performance-move-const-arg)
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
@@ -282,66 +283,66 @@ TEST_CASE("expected andThen", "[expected][andThen]") {
TEST_CASE("expected orElse", "[expected][orElse]") {
using eptr = std::unique_ptr<int>;
- auto succeed = [](int) { return nonstd::expected<int, int>(21 * 2); };
- auto succeedptr = [](eptr) { return nonstd::expected<int, eptr>(21*2); };
- auto fail = [](int) { return nonstd::expected<int, int>(nonstd::unexpect, 17); };
- auto efail = [](eptr e) { *e = 17; return nonstd::expected<int, eptr>(nonstd::unexpect, std::move(e)); };
+ auto succeed = [](int) { return std::expected<int, int>(21 * 2); };
+ auto succeedptr = [](eptr) { return std::expected<int, eptr>(21*2); };
+ auto fail = [](int) { return std::expected<int, int>(std::unexpect, 17); };
+ auto efail = [](eptr e) { *e = 17; return std::expected<int, eptr>(std::unexpect, std::move(e)); };
auto failvoid = [](int) {};
auto failvoidptr = [](const eptr&) { /* don't consume */};
auto consumeptr = [](eptr) {};
auto make_u_int = [](int n) { return std::make_unique<int>(n); };
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = e | utils::orElse(succeed);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = e | utils::orElse(succeed);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::orElse(succeed);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- nonstd::expected<int, eptr> e = 21;
+ std::expected<int, eptr> e = 21;
auto ret = std::move(e) | utils::orElse(succeedptr);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::orElse(succeed); // NOLINT(performance-move-const-arg)
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = e | utils::orElse(fail);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = e | utils::orElse(fail);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::orElse(fail);
REQUIRE(ret);
REQUIRE(*ret == 21);
@@ -349,119 +350,119 @@ TEST_CASE("expected orElse", "[expected][orElse]") {
{
- nonstd::expected<int, eptr> e = 21;
+ std::expected<int, eptr> e = 21;
auto ret = std::move(e) | utils::orElse(efail);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::orElse(fail); // NOLINT(performance-move-const-arg)
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::orElse(succeed);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::orElse(succeed);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::orElse(succeed);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- nonstd::expected<int, eptr> e(nonstd::unexpect, make_u_int(21));
+ std::expected<int, eptr> e(std::unexpect, make_u_int(21));
auto ret = std::move(e) | utils::orElse(succeedptr);
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::orElse(succeed); // NOLINT(performance-move-const-arg)
REQUIRE(ret);
REQUIRE(*ret == 42);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::orElse(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 17);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::orElse(failvoid);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::orElse(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 17);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = e | utils::orElse(failvoid);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::orElse(fail);
REQUIRE(!ret);
REQUIRE(ret.error() == 17);
}
{
- nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::orElse(failvoid);
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
}
{
- nonstd::expected<int, eptr> e(nonstd::unexpect, make_u_int(21));
+ std::expected<int, eptr> e(std::unexpect, make_u_int(21));
auto ret = std::move(e) | utils::orElse(failvoidptr);
REQUIRE(!ret);
REQUIRE(*ret.error() == 21);
}
{
- nonstd::expected<int, eptr> e(nonstd::unexpect, make_u_int(21));
+ std::expected<int, eptr> e(std::unexpect, make_u_int(21));
auto ret = std::move(e) | utils::orElse(consumeptr);
REQUIRE(!ret);
REQUIRE(ret.error() == nullptr);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::orElse(fail); // NOLINT(performance-move-const-arg)
REQUIRE(!ret);
REQUIRE(ret.error() == 17);
}
{
- const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+ const std::expected<int, int> e(std::unexpect, 21);
auto ret = std::move(e) | utils::orElse(failvoid); // NOLINT(performance-move-const-arg)
REQUIRE(!ret);
REQUIRE(ret.error() == 21);
@@ -470,7 +471,7 @@ TEST_CASE("expected orElse", "[expected][orElse]") {
TEST_CASE("expected valueOrElse", "[expected][valueOrElse]") {
using namespace std::literals; // NOLINT
- nonstd::expected<int, std::string> ex{nonstd::unexpect, "hello"};
+ std::expected<int, std::string> ex{std::unexpect, "hello"};
REQUIRE(42 == (ex | utils::valueOrElse([] { return 42; })));
REQUIRE_THROWS_AS(ex | utils::valueOrElse([]{ throw std::exception(); }), std::exception);
REQUIRE(gsl::narrow<int>("hello"sv.size()) == (ex | utils::valueOrElse([](const std::string& err) { return gsl::narrow<int>(err.size()); })));
@@ -486,63 +487,63 @@ TEST_CASE("expected transformError", "[expected][transformError]") {
auto mul2 = [](int a) { return a * 2; };
{
- nonstd::expected<int, int> e = nonstd::make_unexpected(21);
+ std::expected<int, int> e = std::unexpected{21};
auto ret = e | utils::transformError(mul2);
REQUIRE(!ret);
REQUIRE(ret.error() == 42);
}
{
- nonstd::expected<size_t, std::string> e = nonstd::make_unexpected("sajt");
+ std::expected<size_t, std::string> e = std::unexpected{"sajt"};
auto ret = e | utils::transformError([](const std::string& error) -> size_t { return error.length(); });
REQUIRE(!ret);
REQUIRE(ret.error() == 4);
}
{
- const nonstd::expected<int, int> e = nonstd::make_unexpected(21);
+ const std::expected<int, int> e = std::unexpected{21};
auto ret = e | utils::transformError(mul2);
REQUIRE(!ret);
REQUIRE(ret.error() == 42);
}
{
- nonstd::expected<int, int> e = nonstd::make_unexpected(21);
+ std::expected<int, int> e = std::unexpected{21};
auto ret = std::move(e) | utils::transformError(mul2);
REQUIRE(!ret);
REQUIRE(ret.error() == 42);
}
{
- const nonstd::expected<int, int> e = nonstd::make_unexpected(21);
+ const std::expected<int, int> e = std::unexpected{21};
auto ret = std::move(e) | utils::transformError(mul2); // NOLINT(performance-move-const-arg)
REQUIRE(!ret);
REQUIRE(ret.error() == 42);
}
{
- nonstd::expected<int, int> e = 21;
+ std::expected<int, int> e = 21;
auto ret = e | utils::transformError(mul2);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = e | utils::transformError(mul2);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- const auto mutable_rvalue_fn = []{ return nonstd::expected<int, int>{21}; };
+ const auto mutable_rvalue_fn = []{ return std::expected<int, int>{21}; };
auto ret = mutable_rvalue_fn() | utils::transformError(mul2);
REQUIRE(ret);
REQUIRE(*ret == 21);
}
{
- const nonstd::expected<int, int> e = 21;
+ const std::expected<int, int> e = 21;
auto ret = std::move(e) | utils::transformError(mul2); // NOLINT(performance-move-const-arg)
REQUIRE(ret);
REQUIRE(*ret == 21);
@@ -550,8 +551,8 @@ TEST_CASE("expected transformError", "[expected][transformError]") {
}
TEST_CASE("expected toOptional") {
- nonstd::expected<int, std::string> unexpected{nonstd::unexpect, "hello"};
- nonstd::expected<int, std::string> expected{5};
+ std::expected<int, std::string> unexpected{std::unexpect, "hello"};
+ std::expected<int, std::string> expected{5};
std::optional<int> res1 = std::move(unexpected) | utils::toOptional();
std::optional<int> res2 = std::move(expected) | utils::toOptional();
@@ -561,8 +562,8 @@ TEST_CASE("expected toOptional") {
}
TEST_CASE("expected orThrow") {
- nonstd::expected<int, std::string> unexpected{nonstd::unexpect, "hello"};
- nonstd::expected<int, std::string> expected{5};
+ std::expected<int, std::string> unexpected{std::unexpect, "hello"};
+ std::expected<int, std::string> expected{5};
REQUIRE_THROWS_MATCHES(std::move(unexpected) | utils::orThrow("should throw"),
@@ -572,8 +573,8 @@ TEST_CASE("expected orThrow") {
}
TEST_CASE("This fails to compile with std::expected on GCC 15.1 due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119714") {
- nonstd::expected<int, std::string> a;
- nonstd::expected<int, std::string> b;
+ std::expected<int, std::string> a;
+ std::expected<int, std::string> b;
CHECK(a == b);
}
diff --git a/libminifi/test/unit/OptionalTest.cpp b/libminifi/test/unit/OptionalTest.cpp
index 570222311..9c332467c 100644
--- a/libminifi/test/unit/OptionalTest.cpp
+++ b/libminifi/test/unit/OptionalTest.cpp
@@ -82,10 +82,10 @@ TEST_CASE("optional toExpected") {
std::optional<int> opt_with_value = 5;
std::optional<int> opt_without_value = std::nullopt;
- nonstd::expected<int, std::error_code> expected_from_value_ec = opt_with_value | utils::toExpected(std::make_error_code(std::io_errc::stream));
- nonstd::expected<int, std::error_code> expected_from_null_opt_ec = opt_without_value | utils::toExpected(std::make_error_code(std::io_errc::stream));
- nonstd::expected<int, int> expected_from_value_int = opt_with_value | utils::toExpected(9);
- nonstd::expected<int, int> expected_from_null_opt_int = opt_without_value | utils::toExpected(9);
+ std::expected<int, std::error_code> expected_from_value_ec = opt_with_value | utils::toExpected(std::make_error_code(std::io_errc::stream));
+ std::expected<int, std::error_code> expected_from_null_opt_ec = opt_without_value | utils::toExpected(std::make_error_code(std::io_errc::stream));
+ std::expected<int, int> expected_from_value_int = opt_with_value | utils::toExpected(9);
+ std::expected<int, int> expected_from_null_opt_int = opt_without_value | utils::toExpected(9);
CHECK(expected_from_value_ec == 5);
CHECK(expected_from_value_int == 5);
diff --git a/libminifi/test/unit/ParsingUtilsTests.cpp b/libminifi/test/unit/ParsingUtilsTests.cpp
index 1783ccffb..ea5ad048a 100644
--- a/libminifi/test/unit/ParsingUtilsTests.cpp
+++ b/libminifi/test/unit/ParsingUtilsTests.cpp
@@ -32,26 +32,26 @@ TEST_CASE("Test boolean parsing") {
TEST_CASE("Test integral parsing") {
CHECK(8000U == parseIntegral<uint64_t>("8000"));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<uint64_t>("8000 banana"));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<uint64_t>("-8000"));
+ CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<uint64_t>("8000 banana"));
+ CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<uint64_t>("-8000"));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum) == parseIntegralMinMax<uint64_t>("10", 3, 8));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum) == parseIntegralMinMax<uint64_t>("2", 3, 8));
+ CHECK(std::unexpected{core::ParsingErrorCode::LargerThanMaximum} == parseIntegralMinMax<uint64_t>("10", 3, 8));
+ CHECK(std::unexpected{core::ParsingErrorCode::SmallerThanMinimum} == parseIntegralMinMax<uint64_t>("2", 3, 8));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<int16_t>("90000"));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<int16_t>("-90000"));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<int16_t>("8000 banana"));
+ CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<int16_t>("90000"));
+ CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<int16_t>("-90000"));
+ CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<int16_t>("8000 banana"));
}
TEST_CASE("Test data size parsing") {
CHECK(8000U == parseDataSize("8000"));
CHECK(8192000U == parseDataSize("8000 kB"));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseDataSize("8000 banana"));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum) == parseDataSizeMinMax("9 MB", 3000, 8000));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum) == parseDataSizeMinMax("0 GB", 3000, 8000));
- CHECK(nonstd::make_unexpected(core::ParsingErrorCode::OverflowError) == parseDataSize("20000 PB"));
+ CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseDataSize("8000 banana"));
+ CHECK(std::unexpected{core::ParsingErrorCode::LargerThanMaximum} == parseDataSizeMinMax("9 MB", 3000, 8000));
+ CHECK(std::unexpected{core::ParsingErrorCode::SmallerThanMinimum} == parseDataSizeMinMax("0 GB", 3000, 8000));
+ CHECK(std::unexpected{core::ParsingErrorCode::OverflowError} == parseDataSize("20000 PB"));
}
TEST_CASE("Test Permissions Parsing") {
diff --git a/minifi-api/common/include/minifi-cpp/io/StreamCallback.h b/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
index 7063c7146..ec4fcf59e 100644
--- a/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
+++ b/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
@@ -40,8 +40,8 @@ class IoResult {
virtual ~IoResult() = default;
- static IoResult error() { return IoResult(nonstd::make_unexpected(MINIFI_IO_ERROR)); }
- static IoResult cancelled() { return IoResult(nonstd::make_unexpected(MINIFI_IO_CANCEL)); }
+ static IoResult error() { return IoResult(std::unexpected{MINIFI_IO_ERROR}); }
+ static IoResult cancelled() { return IoResult(std::unexpected{MINIFI_IO_CANCEL}); }
static IoResult zero() { return IoResult(0U); }
template <typename T>
@@ -51,7 +51,7 @@ class IoResult {
if constexpr (std::is_same_v<T, int64_t>) {
if (val < 0) {
- return IoResult(nonstd::make_unexpected(static_cast<MinifiIoStatus>(val)));
+ return IoResult(std::unexpected{static_cast<MinifiIoStatus>(val)});
}
} else if constexpr (std::is_same_v<T, size_t>) {
if (isError(val)) {
@@ -75,12 +75,12 @@ class IoResult {
uint64_t operator*() const { return *result_; }
- nonstd::expected<uint64_t, MinifiIoStatus> inner() const { return result_; }
+ std::expected<uint64_t, MinifiIoStatus> inner() const { return result_; }
private:
- explicit IoResult(nonstd::expected<uint64_t, MinifiIoStatus> result) : result_(std::move(result)) {}
+ explicit IoResult(std::expected<uint64_t, MinifiIoStatus> result) : result_(std::move(result)) {}
- nonstd::expected<uint64_t, MinifiIoStatus> result_;
+ std::expected<uint64_t, MinifiIoStatus> result_;
};
class ReadWriteResult {
@@ -95,8 +95,8 @@ class ReadWriteResult {
: result_(ReadWrite{.bytes_read = bytes_read, .bytes_written = bytes_written}) {}
static ReadWriteResult zero() { return ReadWriteResult(ReadWrite{.bytes_read = 0, .bytes_written = 0}); };
- static ReadWriteResult error() { return ReadWriteResult(nonstd::make_unexpected(MINIFI_IO_ERROR)); }
- static ReadWriteResult cancelled() { return ReadWriteResult(nonstd::make_unexpected(MINIFI_IO_CANCEL)); }
+ static ReadWriteResult error() { return ReadWriteResult(std::unexpected{MINIFI_IO_ERROR}); }
+ static ReadWriteResult cancelled() { return ReadWriteResult(std::unexpected{MINIFI_IO_CANCEL}); }
virtual ~ReadWriteResult() = default;
@@ -111,9 +111,9 @@ class ReadWriteResult {
uint64_t bytes_read;
uint64_t bytes_written;
};
- explicit ReadWriteResult(nonstd::expected<ReadWrite, MinifiIoStatus> result) : result_(std::move(result)) {}
+ explicit ReadWriteResult(std::expected<ReadWrite, MinifiIoStatus> result) : result_(std::move(result)) {}
- nonstd::expected<ReadWrite, MinifiIoStatus> result_;
+ std::expected<ReadWrite, MinifiIoStatus> result_;
};
using OutputStreamCallback = std::function<IoResult(const std::shared_ptr<OutputStream>& output_stream)>;
diff --git a/minifi-api/include/minifi-cpp/controllers/RecordSetReader.h b/minifi-api/include/minifi-cpp/controllers/RecordSetReader.h
index db7c26737..536491272 100644
--- a/minifi-api/include/minifi-cpp/controllers/RecordSetReader.h
+++ b/minifi-api/include/minifi-cpp/controllers/RecordSetReader.h
@@ -35,7 +35,7 @@ class RecordSetReader : public controller::ControllerServiceHandle {
.version = MINIFI_VERSION_STR
};
- virtual nonstd::expected<RecordSet, std::error_code> read(io::InputStream& input_stream) = 0;
+ virtual std::expected<RecordSet, std::error_code> read(io::InputStream& input_stream) = 0;
};
} // namespace org::apache::nifi::minifi::core
diff --git a/minifi-api/include/minifi-cpp/core/ConfigurableComponent.h b/minifi-api/include/minifi-cpp/core/ConfigurableComponent.h
index 1c9196a9e..377903754 100644
--- a/minifi-api/include/minifi-cpp/core/ConfigurableComponent.h
+++ b/minifi-api/include/minifi-cpp/core/ConfigurableComponent.h
@@ -35,26 +35,26 @@ class ConfigurableComponent : public virtual CoreComponent {
virtual void initialize() {};
virtual bool canEdit() = 0;
- [[nodiscard]] virtual nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const = 0;
- virtual nonstd::expected<void, std::error_code> setProperty(std::string_view name, std::string value) = 0;
- virtual nonstd::expected<void, std::error_code> appendProperty(std::string_view name, std::string value) = 0;
- virtual nonstd::expected<void, std::error_code> clearProperty(std::string_view name) = 0;
+ [[nodiscard]] virtual std::expected<std::string, std::error_code> getProperty(std::string_view name) const = 0;
+ virtual std::expected<void, std::error_code> setProperty(std::string_view name, std::string value) = 0;
+ virtual std::expected<void, std::error_code> appendProperty(std::string_view name, std::string value) = 0;
+ virtual std::expected<void, std::error_code> clearProperty(std::string_view name) = 0;
- [[nodiscard]] virtual nonstd::expected<std::string, std::error_code> getDynamicProperty(std::string_view name) const = 0;
- virtual nonstd::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) = 0;
- virtual nonstd::expected<void, std::error_code> appendDynamicProperty(std::string_view name, std::string value) = 0;
+ [[nodiscard]] virtual std::expected<std::string, std::error_code> getDynamicProperty(std::string_view name) const = 0;
+ virtual std::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) = 0;
+ virtual std::expected<void, std::error_code> appendDynamicProperty(std::string_view name, std::string value) = 0;
[[nodiscard]] virtual std::vector<std::string> getDynamicPropertyKeys() const = 0;
[[nodiscard]] virtual std::map<std::string, std::string> getDynamicProperties() const = 0;
- [[nodiscard]] virtual nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
- [[nodiscard]] virtual nonstd::expected<std::vector<std::string>, std::error_code> getAllDynamicPropertyValues(std::string_view name) const = 0;
+ [[nodiscard]] virtual std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
+ [[nodiscard]] virtual std::expected<std::vector<std::string>, std::error_code> getAllDynamicPropertyValues(std::string_view name) const = 0;
[[nodiscard]] virtual bool supportsDynamicProperties() const = 0;
[[nodiscard]] virtual bool supportsDynamicRelationships() const = 0;
[[nodiscard]] virtual std::map<std::string, Property, std::less<>> getSupportedProperties() const = 0;
- [[nodiscard]] virtual nonstd::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const = 0;
+ [[nodiscard]] virtual std::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const = 0;
};
} // namespace org::apache::nifi::minifi::core
diff --git a/minifi-api/include/minifi-cpp/core/ProcessContext.h b/minifi-api/include/minifi-cpp/core/ProcessContext.h
index cc5ec9e5d..6fa663a7a 100644
--- a/minifi-api/include/minifi-cpp/core/ProcessContext.h
+++ b/minifi-api/include/minifi-cpp/core/ProcessContext.h
@@ -38,7 +38,7 @@ class ProcessorInfo {
[[nodiscard]] virtual utils::Identifier getUUID() const = 0;
[[nodiscard]] virtual std::shared_ptr<state::FlowIdentifier> getFlowIdentifier() const = 0;
[[nodiscard]] virtual std::map<std::string, core::Property, std::less<>> getSupportedProperties() const = 0;
- [[nodiscard]] virtual nonstd::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const = 0;
+ [[nodiscard]] virtual std::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const = 0;
virtual ~ProcessorInfo() = default;
};
@@ -50,29 +50,29 @@ class ProcessContext : public virtual core::VariableRegistry, public virtual uti
virtual const ProcessorInfo& getProcessorInfo() const = 0;
virtual Processor& getProcessor() const = 0;
- virtual nonstd::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file = nullptr) const = 0;
- nonstd::expected<std::string, std::error_code> getProperty(const Property& property, const FlowFile* flow_file = nullptr) const { return getProperty(property.getName(), flow_file); }
- nonstd::expected<std::string, std::error_code> getProperty(const PropertyReference& property_reference, const FlowFile* flow_file = nullptr) const {
+ virtual std::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file = nullptr) const = 0;
+ std::expected<std::string, std::error_code> getProperty(const Property& property, const FlowFile* flow_file = nullptr) const { return getProperty(property.getName(), flow_file); }
+ std::expected<std::string, std::error_code> getProperty(const PropertyReference& property_reference, const FlowFile* flow_file = nullptr) const {
return getProperty(property_reference.name, flow_file);
}
- virtual nonstd::expected<std::string, std::error_code> getRawProperty(std::string_view name) const = 0;
+ virtual std::expected<std::string, std::error_code> getRawProperty(std::string_view name) const = 0;
- virtual nonstd::expected<void, std::error_code> setProperty(std::string_view name, std::string value) = 0;
- nonstd::expected<void, std::error_code> setProperty(const Property& property, std::string value) { return setProperty(property.getName(), std::move(value)); };
- nonstd::expected<void, std::error_code> setProperty(const PropertyReference& property_reference, std::string value) { return setProperty(property_reference.name, std::move(value)); };
+ virtual std::expected<void, std::error_code> setProperty(std::string_view name, std::string value) = 0;
+ std::expected<void, std::error_code> setProperty(const Property& property, std::string value) { return setProperty(property.getName(), std::move(value)); };
+ std::expected<void, std::error_code> setProperty(const PropertyReference& property_reference, std::string value) { return setProperty(property_reference.name, std::move(value)); };
- virtual nonstd::expected<void, std::error_code> clearProperty(std::string_view name) = 0;
+ virtual std::expected<void, std::error_code> clearProperty(std::string_view name) = 0;
- virtual nonstd::expected<std::string, std::error_code> getDynamicProperty(std::string_view name, const FlowFile* flow_file = nullptr) const = 0;
- virtual nonstd::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) = 0;
+ virtual std::expected<std::string, std::error_code> getDynamicProperty(std::string_view name, const FlowFile* flow_file = nullptr) const = 0;
+ virtual std::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) = 0;
- virtual nonstd::expected<std::string, std::error_code> getRawDynamicProperty(std::string_view name) const = 0;
+ virtual std::expected<std::string, std::error_code> getRawDynamicProperty(std::string_view name) const = 0;
virtual std::vector<std::string> getDynamicPropertyKeys() const = 0;
virtual std::map<std::string, std::string> getDynamicProperties(const FlowFile* flow_file = nullptr) const = 0;
- [[nodiscard]] virtual nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
+ [[nodiscard]] virtual std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
virtual void addAutoTerminatedRelationship(const core::Relationship& relationship) = 0;
diff --git a/minifi-api/include/minifi-cpp/core/ProcessSession.h b/minifi-api/include/minifi-cpp/core/ProcessSession.h
index d751515a0..5b77d8422 100644
--- a/minifi-api/include/minifi-cpp/core/ProcessSession.h
+++ b/minifi-api/include/minifi-cpp/core/ProcessSession.h
@@ -44,7 +44,7 @@ class ProcessSession : public virtual ReferenceContainer {
virtual void commit() = 0;
virtual void rollback() = 0;
- virtual nonstd::expected<void, std::string> rollbackNoThrow() noexcept = 0;
+ virtual std::expected<void, std::string> rollbackNoThrow() noexcept = 0;
virtual std::shared_ptr<provenance::ProvenanceReporter> getProvenanceReporter() = 0;
virtual void flushContent() = 0;
virtual std::shared_ptr<core::FlowFile> get() = 0;
diff --git a/minifi-api/include/minifi-cpp/core/Property.h b/minifi-api/include/minifi-cpp/core/Property.h
index 8d1225494..d802b7221 100644
--- a/minifi-api/include/minifi-cpp/core/Property.h
+++ b/minifi-api/include/minifi-cpp/core/Property.h
@@ -61,10 +61,10 @@ class Property final {
std::vector<std::string> getAllowedTypes() const;
std::string getDescription() const;
const PropertyValidator& getValidator() const;
- [[nodiscard]] nonstd::expected<std::span<const std::string>, std::error_code> getAllValues() const;
- [[nodiscard]] nonstd::expected<std::string_view, std::error_code> getValue() const;
- nonstd::expected<void, std::error_code> setValue(std::string value);
- nonstd::expected<void, std::error_code> appendValue(std::string value);
+ [[nodiscard]] std::expected<std::span<const std::string>, std::error_code> getAllValues() const;
+ [[nodiscard]] std::expected<std::string_view, std::error_code> getValue() const;
+ std::expected<void, std::error_code> setValue(std::string value);
+ std::expected<void, std::error_code> appendValue(std::string value);
void clearValues();
bool getRequired() const;
bool isSensitive() const;
diff --git a/minifi-api/include/minifi-cpp/core/controller/ControllerServiceContext.h b/minifi-api/include/minifi-cpp/core/controller/ControllerServiceContext.h
index ee906e856..843034fde 100644
--- a/minifi-api/include/minifi-cpp/core/controller/ControllerServiceContext.h
+++ b/minifi-api/include/minifi-cpp/core/controller/ControllerServiceContext.h
@@ -28,8 +28,8 @@ class ControllerServiceContext {
public:
virtual ~ControllerServiceContext() = default;
- [[nodiscard]] virtual nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const = 0;
- [[nodiscard]] virtual nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
+ [[nodiscard]] virtual std::expected<std::string, std::error_code> getProperty(std::string_view name) const = 0;
+ [[nodiscard]] virtual std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
};
} // namespace org::apache::nifi::minifi::core::controller
diff --git a/thirdparty/bustache/remove_installs.patch b/thirdparty/bustache/remove_installs.patch
new file mode 100644
index 000000000..af6eb5ec7
--- /dev/null
+++ b/thirdparty/bustache/remove_installs.patch
@@ -0,0 +1,49 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index efb1cbc..b1f2e71 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -58,43 +58,7 @@ add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
+
+ include(GNUInstallDirs)
+
+-# Install the library and headers.
+-install(
+- TARGETS
+- ${PROJECT_NAME}
+- EXPORT
+- ${PROJECT_NAME}-targets
+- LIBRARY DESTINATION
+- ${CMAKE_INSTALL_LIBDIR}
+- RUNTIME DESTINATION
+- ${CMAKE_INSTALL_BINDIR}
+- ARCHIVE DESTINATION
+- ${CMAKE_INSTALL_LIBDIR}
+- INCLUDES DESTINATION
+- include
+- PUBLIC_HEADER DESTINATION
+- include
+-)
+-
+-# Install version, config and target files.
+-install(
+- EXPORT
+- ${PROJECT_NAME}-targets
+- FILE
+- ${PROJECT_NAME}-targets.cmake
+- NAMESPACE
+- ${PROJECT_NAME}::
+- DESTINATION
+- ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
+-)
+-
+-# Install the `include` directory
+-install(
+- DIRECTORY
+- include/${PROJECT_NAME}
+- DESTINATION
+- include
+-)
++# removed installs
+
+ # Quick `config-version.cmake` creation
+ include(CMakePackageConfigHelpers)
diff --git a/thirdparty/couchbase/remove-debug-symbols.patch b/thirdparty/couchbase/remove-debug-symbols.patch
deleted file mode 100644
index bc7e4052e..000000000
--- a/thirdparty/couchbase/remove-debug-symbols.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 6c69b32..497e2f6 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -58,7 +58,6 @@ include(cmake/Sanitizers.cmake)
- # allow for static analysis options
- include(cmake/StaticAnalyzers.cmake)
-
--include(cmake/Backtrace.cmake)
- enable_sanitizers(project_options)
-
- if(COUCHBASE_CXX_CLIENT_MASTER_PROJECT)
diff --git a/thirdparty/couchbase/remove-thirdparty-1.0.2.patch b/thirdparty/couchbase/remove-thirdparty-1.0.2.patch
deleted file mode 100644
index 732576f14..000000000
--- a/thirdparty/couchbase/remove-thirdparty-1.0.2.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-diff --git a/cmake/ThirdPartyDependencies.cmake b/cmake/ThirdPartyDependencies.cmake
-index f02af02..f83c181 100644
---- a/cmake/ThirdPartyDependencies.cmake
-+++ b/cmake/ThirdPartyDependencies.cmake
-@@ -3,73 +3,30 @@
- include(cmake/CPM.cmake)
-
- # https://cmake.org/cmake/help/v3.28/policy/CMP0063.html
- set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
-
- function(declare_system_library target)
- message(STATUS "Declaring system library ${target}")
- get_target_property(target_aliased_name ${target} ALIASED_TARGET)
- if(target_aliased_name)
- set(target ${target_aliased_name})
- endif()
- set_target_properties(${target} PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
- $<TARGET_PROPERTY:${target},INTERFACE_INCLUDE_DIRECTORIES>)
- endfunction()
-
--if(NOT TARGET fmt::fmt)
-- # https://github.com/fmtlib/fmt/releases
-- cpmaddpackage(
-- NAME
-- fmt
-- GIT_TAG
-- 11.0.1
-- VERSION
-- 11.0.1
-- GITHUB_REPOSITORY
-- "fmtlib/fmt"
-- EXCLUDE_FROM_ALL ON
-- OPTIONS
-- "FMT_INSTALL OFF"
-- # Unicode support for MSVC enabled in CompilerWarnings.cmake
-- "FMT_UNICODE OFF"
-- "FMT_DOC OFF"
-- "BUILD_SHARED_LIBS OFF"
-- "CMAKE_C_VISIBILITY_PRESET hidden"
-- "CMAKE_CXX_VISIBILITY_PRESET hidden"
-- "CMAKE_POSITION_INDEPENDENT_CODE ON")
--endif()
--
--if(NOT TARGET spdlog::spdlog)
-- # https://github.com/gabime/spdlog/releases
-- cpmaddpackage(
-- NAME
-- spdlog
-- VERSION
-- 1.14.1
-- GITHUB_REPOSITORY
-- "gabime/spdlog"
-- EXCLUDE_FROM_ALL ON
-- OPTIONS
-- "SPDLOG_INSTALL OFF"
-- "BUILD_SHARED_LIBS OFF"
-- "CMAKE_C_VISIBILITY_PRESET hidden"
-- "CMAKE_CXX_VISIBILITY_PRESET hidden"
-- "CMAKE_POSITION_INDEPENDENT_CODE ON"
-- "SPDLOG_BUILD_SHARED OFF"
-- "SPDLOG_FMT_EXTERNAL ON")
--endif()
--
- if(NOT TARGET Microsoft.GSL::GSL)
- # https://github.com/microsoft/GSL/releases
- cpmaddpackage(
- NAME
- gsl
- VERSION
- 4.0.0
- GITHUB_REPOSITORY
- "microsoft/gsl"
- EXCLUDE_FROM_ALL ON
- OPTIONS
- "GSL_INSTALL OFF"
- "CMAKE_C_VISIBILITY_PRESET hidden"
- "CMAKE_CXX_VISIBILITY_PRESET hidden"
- "CMAKE_POSITION_INDEPENDENT_CODE ON")
-@@ -159,93 +116,24 @@ if(NOT TARGET taocpp::json)
- "CMAKE_POSITION_INDEPENDENT_CODE ON"
- "BUILD_SHARED_LIBS OFF"
- "PEGTL_INSTALL ${COUCHBASE_CXX_CLIENT_INSTALL}"
- "PEGTL_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/pegtl"
- "PEGTL_INSTALL_DOC_DIR ${CMAKE_INSTALL_DATAROOTDIR}/doc/tao/pegtl"
- "PEGTL_BUILD_TESTS OFF"
- "PEGTL_BUILD_EXAMPLES OFF"
- "PEGTL_USE_BOOST_FILESYSTEM OFF"
- "TAOCPP_JSON_INSTALL ${COUCHBASE_CXX_CLIENT_INSTALL}"
- "TAOCPP_JSON_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/taocpp-json"
- "TAOCPP_JSON_INSTALL_DOC_DIR ${CMAKE_INSTALL_DATAROOTDIR}/doc/tao/json"
- "TAOCPP_JSON_BUILD_TESTS OFF"
- "TAOCPP_JSON_BUILD_EXAMPLES OFF")
- endif()
-
--
--if(NOT TARGET asio::asio)
-- # https://github.com/chriskohlhoff/asio/tags
-- cpmaddpackage(
-- NAME
-- asio
-- GIT_TAG
-- asio-1-31-0
-- VERSION
-- 1.31.0
-- GITHUB_REPOSITORY
-- "chriskohlhoff/asio"
-- EXCLUDE_FROM_ALL ON)
--endif()
--
--# ASIO doesn't use CMake, we have to configure it manually. Extra notes for using on Windows:
--#
--# 1) If _WIN32_WINNT is not set, ASIO assumes _WIN32_WINNT=0x0501, i.e. Windows XP target, which is definitely not the
--# platform which most users target.
--#
--# 2) WIN32_LEAN_AND_MEAN is defined to make Winsock2 work.
--if(asio_ADDED)
-- add_library(asio STATIC ${asio_SOURCE_DIR}/asio/src/asio.cpp ${asio_SOURCE_DIR}/asio/src/asio_ssl.cpp)
--
-- target_include_directories(asio SYSTEM PUBLIC ${asio_SOURCE_DIR}/asio/include)
-- target_compile_definitions(asio PRIVATE ASIO_STANDALONE=1 ASIO_NO_DEPRECATED=1 ASIO_SEPARATE_COMPILATION=1)
-- target_link_libraries(asio PRIVATE Threads::Threads OpenSSL::SSL OpenSSL::Crypto)
-- set_target_properties(
-- asio
-- PROPERTIES C_VISIBILITY_PRESET hidden
-- CXX_VISIBILITY_PRESET hidden
-- POSITION_INDEPENDENT_CODE TRUE)
--
-- if(WIN32)
-- # macro see @ https://stackoverflow.com/a/40217291/1746503
-- macro(get_win32_winnt version)
-- if(CMAKE_SYSTEM_VERSION)
-- set(ver ${CMAKE_SYSTEM_VERSION})
-- string(REGEX MATCH "^([0-9]+).([0-9])" ver ${ver})
-- string(REGEX MATCH "^([0-9]+)" verMajor ${ver})
-- # Check for Windows 10, b/c we'll need to convert to hex 'A'.
-- if("${verMajor}" MATCHES "10")
-- set(verMajor "A")
-- string(REGEX REPLACE "^([0-9]+)" ${verMajor} ver ${ver})
-- endif("${verMajor}" MATCHES "10")
-- # Remove all remaining '.' characters.
-- string(REPLACE "." "" ver ${ver})
-- # Prepend each digit with a zero.
-- string(REGEX REPLACE "([0-9A-Z])" "0\\1" ver ${ver})
-- set(${version} "0x${ver}")
-- endif()
-- endmacro()
--
-- if(NOT DEFINED _WIN32_WINNT)
-- get_win32_winnt(ver)
-- set(_WIN32_WINNT ${ver})
-- endif()
--
-- message(STATUS "Set _WIN32_WINNT=${_WIN32_WINNT}")
--
-- target_compile_definitions(asio INTERFACE _WIN32_WINNT=${_WIN32_WINNT} WIN32_LEAN_AND_MEAN)
-- endif()
--
-- add_library(asio::asio ALIAS asio)
--endif()
--
- add_library(jsonsl OBJECT ${PROJECT_SOURCE_DIR}/third_party/jsonsl/jsonsl.c)
- set_target_properties(jsonsl PROPERTIES C_VISIBILITY_PRESET hidden POSITION_INDEPENDENT_CODE TRUE)
- target_include_directories(jsonsl SYSTEM PUBLIC ${PROJECT_SOURCE_DIR}/third_party/jsonsl)
-
- declare_system_library(snappy)
- declare_system_library(llhttp::llhttp)
- declare_system_library(hdr_histogram_static)
- declare_system_library(Microsoft.GSL::GSL)
--declare_system_library(spdlog::spdlog)
--declare_system_library(fmt::fmt)
--declare_system_library(asio)
- declare_system_library(taocpp::json)
diff --git a/thirdparty/couchbase/remove-thirdparty.patch b/thirdparty/couchbase/remove-thirdparty.patch
index 942e5fc27..13a97b409 100644
--- a/thirdparty/couchbase/remove-thirdparty.patch
+++ b/thirdparty/couchbase/remove-thirdparty.patch
@@ -1,27 +1,17 @@
+Subject: [PATCH] removed spdlog and asio thirdparty libs (since we already provide those)
+---
+Index: cmake/ThirdPartyDependencies.cmake
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
diff --git a/cmake/ThirdPartyDependencies.cmake b/cmake/ThirdPartyDependencies.cmake
-index af373ce..30cf2b6 100644
---- a/cmake/ThirdPartyDependencies.cmake
-+++ b/cmake/ThirdPartyDependencies.cmake
-@@ -1,232 +1,141 @@
- # NOTE: This file MUST be in sync with couchbase-sdk-cxx-black-duck-manifest.yaml
-
- include(cmake/CPM.cmake)
-
- set(CPM_USE_LOCAL_PACKAGES OFF)
-
- # https://cmake.org/cmake/help/v3.28/policy/CMP0063.html
- set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
-
- function(declare_system_library target)
- message(STATUS "Declaring system library ${target}")
- get_target_property(target_aliased_name ${target} ALIASED_TARGET)
- if(target_aliased_name)
- set(target ${target_aliased_name})
- endif()
- set_target_properties(${target} PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
- $<TARGET_PROPERTY:${target},INTERFACE_INCLUDE_DIRECTORIES>)
- endfunction()
-
+--- a/cmake/ThirdPartyDependencies.cmake (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/cmake/ThirdPartyDependencies.cmake (date 1776166918688)
+@@ -18,27 +18,6 @@
+
+ include(cmake/OpenSSL.cmake)
+
-if(NOT TARGET spdlog::spdlog)
- # https://github.com/gabime/spdlog/releases
- cpmaddpackage(
@@ -32,145 +22,37 @@ index af373ce..30cf2b6 100644
- GITHUB_REPOSITORY
- "gabime/spdlog"
- EXCLUDE_FROM_ALL ON
+- SYSTEM NO
- OPTIONS
- "SPDLOG_INSTALL OFF"
- "BUILD_SHARED_LIBS OFF"
- "CMAKE_C_VISIBILITY_PRESET hidden"
- "CMAKE_CXX_VISIBILITY_PRESET hidden"
- "CMAKE_POSITION_INDEPENDENT_CODE ON"
-- "NO_CMAKE_SYSTEM_PATH ON"
-- "NO_CMAKE_INSTALL_PREFIX ON"
-- "NO_CMAKE_SYSTEM_PACKAGE_REGISTRY ON"
- "SPDLOG_BUILD_SHARED OFF"
- "SPDLOG_FMT_EXTERNAL OFF")
-endif()
-
- if(NOT TARGET Microsoft.GSL::GSL)
- # https://github.com/microsoft/GSL/releases
- cpmaddpackage(
- NAME
- gsl
- VERSION
- 4.0.0
- GITHUB_REPOSITORY
- "microsoft/gsl"
- EXCLUDE_FROM_ALL ON
- OPTIONS
- "GSL_INSTALL OFF"
- "CMAKE_C_VISIBILITY_PRESET hidden"
- "CMAKE_CXX_VISIBILITY_PRESET hidden"
- "CMAKE_POSITION_INDEPENDENT_CODE ON")
- endif()
-
- if(NOT TARGET hdr_histogram_static)
- # https://github.com/HdrHistogram/HdrHistogram_c/releases
- cpmaddpackage(
- NAME
- hdr_histogram
- GIT_TAG
- 0.11.8
- VERSION
- 0.11.8
- GITHUB_REPOSITORY
- "HdrHistogram/HdrHistogram_c"
- EXCLUDE_FROM_ALL ON
- OPTIONS
- "CMAKE_C_VISIBILITY_PRESET hidden"
- "CMAKE_CXX_VISIBILITY_PRESET hidden"
- "CMAKE_POSITION_INDEPENDENT_CODE ON"
- "HDR_LOG_REQUIRED OFF"
- "HDR_HISTOGRAM_BUILD_SHARED OFF"
- "HDR_HISTOGRAM_BUILD_PROGRAMS OFF")
- endif()
-
- if(NOT TARGET llhttp::llhttp)
- # https://github.com/nodejs/llhttp/releases
- cpmaddpackage(
- NAME
- llhttp
- GIT_TAG
- release/v9.2.1
- VERSION
- 9.2.1
- GITHUB_REPOSITORY
- "nodejs/llhttp"
- EXCLUDE_FROM_ALL ON
- OPTIONS
- "CMAKE_C_VISIBILITY_PRESET hidden"
- "CMAKE_CXX_VISIBILITY_PRESET hidden"
- "CMAKE_POSITION_INDEPENDENT_CODE ON"
- "BUILD_SHARED_LIBS OFF"
- "BUILD_STATIC_LIBS ON")
- endif()
-
- if(NOT TARGET snappy)
- # https://github.com/google/snappy/releases
- cpmaddpackage(
- NAME
- snappy
- GIT_TAG
- 1.2.2
- VERSION
- 1.2.2
- GITHUB_REPOSITORY
- "google/snappy"
- EXCLUDE_FROM_ALL ON
- OPTIONS
- "SNAPPY_INSTALL OFF"
- "CMAKE_C_VISIBILITY_PRESET hidden"
- "CMAKE_CXX_VISIBILITY_PRESET hidden"
- "CMAKE_POSITION_INDEPENDENT_CODE ON"
- "BUILD_SHARED_LIBS OFF"
- "SNAPPY_BUILD_TESTS OFF"
- "SNAPPY_BUILD_BENCHMARKS OFF")
- endif()
- if(NOT MSVC)
- # https://github.com/google/snappy/pull/156
- target_compile_options(snappy PRIVATE -Wno-sign-compare)
- endif()
-
- if(NOT TARGET taocpp::json)
- # https://github.com/taocpp/json/releases
- cpmaddpackage(
- NAME
- json
- GIT_TAG
- 1.0.0-beta.14
- VERSION
- 1.0.0-beta.14
- GITHUB_REPOSITORY
- "taocpp/json"
- OPTIONS
- "CMAKE_C_VISIBILITY_PRESET hidden"
- "CMAKE_CXX_VISIBILITY_PRESET hidden"
- "CMAKE_POSITION_INDEPENDENT_CODE ON"
- "BUILD_SHARED_LIBS OFF"
- "PEGTL_INSTALL ${COUCHBASE_CXX_CLIENT_INSTALL}"
- "PEGTL_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/pegtl"
- "PEGTL_INSTALL_DOC_DIR ${CMAKE_INSTALL_DATAROOTDIR}/doc/tao/pegtl"
- "PEGTL_BUILD_TESTS OFF"
- "PEGTL_BUILD_EXAMPLES OFF"
- "PEGTL_USE_BOOST_FILESYSTEM OFF"
- "TAOCPP_JSON_INSTALL ${COUCHBASE_CXX_CLIENT_INSTALL}"
- "TAOCPP_JSON_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/taocpp-json"
- "TAOCPP_JSON_INSTALL_DOC_DIR ${CMAKE_INSTALL_DATAROOTDIR}/doc/tao/json"
- "TAOCPP_JSON_BUILD_TESTS OFF"
+ if(COUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY)
+ if(NOT TARGET opentelemetry)
+ # Disable curl HTTP client to avoid curl downloading and linking to BoringSSL
+@@ -196,103 +175,7 @@
"TAOCPP_JSON_BUILD_EXAMPLES OFF")
endif()
-
--
+
-if(NOT TARGET asio::asio)
- # https://github.com/chriskohlhoff/asio/tags
- cpmaddpackage(
- NAME
- asio
- GIT_TAG
-- asio-1-31-0
+- asio-1-34-2
- VERSION
-- 1.31.0
+- 1.34.2
- GITHUB_REPOSITORY
- "chriskohlhoff/asio"
-- EXCLUDE_FROM_ALL ON)
+- EXCLUDE_FROM_ALL ON
+- SYSTEM NO)
-endif()
-
-# ASIO doesn't use CMake, we have to configure it manually. Extra notes for using on Windows:
@@ -183,8 +65,17 @@ index af373ce..30cf2b6 100644
- add_library(asio STATIC ${asio_SOURCE_DIR}/asio/src/asio.cpp ${asio_SOURCE_DIR}/asio/src/asio_ssl.cpp)
-
- target_include_directories(asio SYSTEM PUBLIC ${asio_SOURCE_DIR}/asio/include)
-- target_compile_definitions(asio PRIVATE ASIO_STANDALONE=1 ASIO_NO_DEPRECATED=1 ASIO_SEPARATE_COMPILATION=1)
-- target_link_libraries(asio PRIVATE Threads::Threads OpenSSL::SSL OpenSSL::Crypto)
+- target_compile_definitions(asio PUBLIC ASIO_STANDALONE=1 ASIO_NO_DEPRECATED=1 ASIO_SEPARATE_COMPILATION=1)
+- target_link_libraries(asio PRIVATE Threads::Threads)
+- if(COUCHBASE_CXX_CLIENT_STATIC_BORINGSSL)
+- target_link_libraries(asio PUBLIC $<TARGET_OBJECTS:ssl> $<TARGET_OBJECTS:crypto>)
+- # Add BoringSSL include directories before asio's own include directories.
+- target_include_directories(
+- asio BEFORE PRIVATE $<BUILD_INTERFACE:$<TARGET_PROPERTY:ssl,INTERFACE_INCLUDE_DIRECTORIES>>
+- $<BUILD_INTERFACE:$<TARGET_PROPERTY:crypto,INTERFACE_INCLUDE_DIRECTORIES>>)
+- elseif(NOT COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL)
+- target_link_libraries(asio PRIVATE OpenSSL::SSL OpenSSL::Crypto)
+- endif()
- set_target_properties(
- asio
- PROPERTIES C_VISIBILITY_PRESET hidden
@@ -196,17 +87,39 @@ index af373ce..30cf2b6 100644
- macro(get_win32_winnt version)
- if(CMAKE_SYSTEM_VERSION)
- set(ver ${CMAKE_SYSTEM_VERSION})
-- string(REGEX MATCH "^([0-9]+).([0-9])" ver ${ver})
-- string(REGEX MATCH "^([0-9]+)" verMajor ${ver})
+- string(
+- REGEX MATCH
+- "^([0-9]+).([0-9])"
+- ver
+- ${ver})
+- string(
+- REGEX MATCH
+- "^([0-9]+)"
+- verMajor
+- ${ver})
- # Check for Windows 10, b/c we'll need to convert to hex 'A'.
- if("${verMajor}" MATCHES "10")
- set(verMajor "A")
-- string(REGEX REPLACE "^([0-9]+)" ${verMajor} ver ${ver})
+- string(
+- REGEX
+- REPLACE "^([0-9]+)"
+- ${verMajor}
+- ver
+- ${ver})
- endif("${verMajor}" MATCHES "10")
- # Remove all remaining '.' characters.
-- string(REPLACE "." "" ver ${ver})
+- string(
+- REPLACE "."
+- ""
+- ver
+- ${ver})
- # Prepend each digit with a zero.
-- string(REGEX REPLACE "([0-9A-Z])" "0\\1" ver ${ver})
+- string(
+- REGEX
+- REPLACE "([0-9A-Z])"
+- "0\\1"
+- ver
+- ${ver})
- set(${version} "0x${ver}")
- endif()
- endmacro()
@@ -219,19 +132,20 @@ index af373ce..30cf2b6 100644
- message(STATUS "Set _WIN32_WINNT=${_WIN32_WINNT}")
-
- target_compile_definitions(asio INTERFACE _WIN32_WINNT=${_WIN32_WINNT} WIN32_LEAN_AND_MEAN)
+- target_compile_options(asio INTERFACE /bigobj)
- endif()
-
- add_library(asio::asio ALIAS asio)
-endif()
--
++# MINIFICPP PATCH: removed asio and splog declare_system_library
+
add_library(jsonsl OBJECT ${PROJECT_SOURCE_DIR}/third_party/jsonsl/jsonsl.c)
set_target_properties(jsonsl PROPERTIES C_VISIBILITY_PRESET hidden POSITION_INDEPENDENT_CODE TRUE)
- target_include_directories(jsonsl SYSTEM PUBLIC ${PROJECT_SOURCE_DIR}/third_party/jsonsl)
-
- declare_system_library(snappy)
+@@ -302,7 +185,5 @@
declare_system_library(llhttp::llhttp)
declare_system_library(hdr_histogram_static)
declare_system_library(Microsoft.GSL::GSL)
-declare_system_library(spdlog::spdlog)
-declare_system_library(asio)
declare_system_library(taocpp::json)
+ declare_system_library(snappy)
diff --git a/thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch b/thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch
new file mode 100644
index 000000000..b0951e65d
--- /dev/null
+++ b/thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch
@@ -0,0 +1,2641 @@
+Subject: [PATCH] use fmt instead of spdlog/fmt
+---
+Index: core/operations/management/eventing_upsert_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_upsert_function.cxx b/core/operations/management/eventing_upsert_function.cxx
+--- a/core/operations/management/eventing_upsert_function.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_upsert_function.cxx (date 1776177013947)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/contrib/traits.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/fmt/key_value_status_code.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/fmt/key_value_status_code.hxx b/core/fmt/key_value_status_code.hxx
+--- a/core/fmt/key_value_status_code.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/fmt/key_value_status_code.hxx (date 1776177013919)
+@@ -19,7 +19,7 @@
+
+ #include "core/error_context/key_value_status_code.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ /**
+ * Helper for fmtlib to format @ref couchbase::core::key_value_status_code objects.
+Index: test/test_transaction_examples.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_transaction_examples.cxx b/test/test_transaction_examples.cxx
+--- a/test/test_transaction_examples.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_transaction_examples.cxx (date 1776177013913)
+@@ -21,7 +21,7 @@
+ #include <couchbase/codec/codec_flags.hxx>
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json.hpp>
+ #include <tao/json/to_string.hpp>
+
+Index: core/fmt/key_value_extended_error_info.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/fmt/key_value_extended_error_info.hxx b/core/fmt/key_value_extended_error_info.hxx
+--- a/core/fmt/key_value_extended_error_info.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/fmt/key_value_extended_error_info.hxx (date 1776177013911)
+@@ -19,7 +19,7 @@
+
+ #include "core/error_context/key_value_extended_error_info.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ /**
+ * Helper for fmtlib to format @ref couchbase::key_value_extended_error_info objects.
+Index: core/fmt/key_value_error_map_attribute.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/fmt/key_value_error_map_attribute.hxx b/core/fmt/key_value_error_map_attribute.hxx
+--- a/core/fmt/key_value_error_map_attribute.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/fmt/key_value_error_map_attribute.hxx (date 1776177014144)
+@@ -19,7 +19,7 @@
+
+ #include "core/error_context/key_value_error_map_attribute.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::key_value_error_map_attribute> {
+Index: core/operations/management/search_index_upsert.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_upsert.cxx b/core/operations/management/search_index_upsert.cxx
+--- a/core/operations/management/search_index_upsert.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_upsert.cxx (date 1776177014126)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/columnar/query_component.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/columnar/query_component.cxx b/core/columnar/query_component.cxx
+--- a/core/columnar/query_component.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/columnar/query_component.cxx (date 1776177014044)
+@@ -34,8 +34,8 @@
+ #include <asio/io_context.hpp>
+ #include <asio/steady_timer.hpp>
+ #include <gsl/util>
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+ #include <tl/expected.hpp>
+
+Index: core/operations/management/analytics_link_utils.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_utils.hxx b/core/operations/management/analytics_link_utils.hxx
+--- a/core/operations/management/analytics_link_utils.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_utils.hxx (date 1776177014124)
+@@ -19,7 +19,7 @@
+
+ #include "core/utils/url_codec.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <string>
+Index: test/test_unit_connection_string.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_unit_connection_string.cxx b/test/test_unit_connection_string.cxx
+--- a/test/test_unit_connection_string.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_unit_connection_string.cxx (date 1776177014011)
+@@ -22,7 +22,7 @@
+
+ #include <couchbase/build_config.hxx>
+
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/ranges.h>
+
+ TEST_CASE("unit: connection string", "[unit]")
+ {
+Index: core/operations/management/search_index_control_plan_freeze.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_control_plan_freeze.cxx b/core/operations/management/search_index_control_plan_freeze.cxx
+--- a/core/operations/management/search_index_control_plan_freeze.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_control_plan_freeze.cxx (date 1776177014021)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/query_error_context.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/query_error_context.cxx b/core/impl/query_error_context.cxx
+--- a/core/impl/query_error_context.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/query_error_context.cxx (date 1776177013926)
+@@ -17,7 +17,7 @@
+
+ #include "core/error_context/query_error_context.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/to_string.hpp>
+
+ #include <couchbase/fmt/retry_reason.hxx>
+Index: core/operations/management/analytics_get_pending_mutations.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_get_pending_mutations.cxx b/core/operations/management/analytics_get_pending_mutations.cxx
+--- a/core/operations/management/analytics_get_pending_mutations.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_get_pending_mutations.cxx (date 1776177013875)
+@@ -20,7 +20,7 @@
+ #include "core/utils/json.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/view_index_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/view_index_drop.cxx b/core/operations/management/view_index_drop.cxx
+--- a/core/operations/management/view_index_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/view_index_drop.cxx (date 1776177013996)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/eventing_resume_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_resume_function.cxx b/core/operations/management/eventing_resume_function.cxx
+--- a/core/operations/management/eventing_resume_function.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_resume_function.cxx (date 1776177013969)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/columnar/columnar_agent_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/columnar/columnar_agent_config.cxx b/core/columnar/columnar_agent_config.cxx
+--- a/core/columnar/columnar_agent_config.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/columnar/columnar_agent_config.cxx (date 1776177014156)
+@@ -17,8 +17,8 @@
+
+ #include "agent_config.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: test/utils/test_data.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/utils/test_data.cxx b/test/utils/test_data.cxx
+--- a/test/utils/test_data.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/utils/test_data.cxx (date 1776177013894)
+@@ -17,8 +17,8 @@
+
+ #include "core/mcbp/big_endian.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/core.h>
++#include <fmt/ranges.h>
+
+ #include <chrono>
+ #include <filesystem>
+Index: core/operations/management/search_index_get_stats.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_get_stats.cxx b/core/operations/management/search_index_get_stats.cxx
+--- a/core/operations/management/search_index_get_stats.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_get_stats.cxx (date 1776177014053)
+@@ -20,7 +20,7 @@
+ #include "core/utils/json.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: test/utils/wait_until.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/utils/wait_until.cxx b/test/utils/wait_until.cxx
+--- a/test/utils/wait_until.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/utils/wait_until.cxx (date 1776177013870)
+@@ -34,7 +34,7 @@
+ #include "core/topology/collections_manifest_fmt.hxx"
+ #include "core/utils/json.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json/value.hpp>
+
+ namespace test::utils
+Index: core/operations/management/analytics_dataset_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_dataset_create.cxx b/core/operations/management/analytics_dataset_create.cxx
+--- a/core/operations/management/analytics_dataset_create.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_dataset_create.cxx (date 1776177014167)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/search_index_control_ingest.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_control_ingest.cxx b/core/operations/management/search_index_control_ingest.cxx
+--- a/core/operations/management/search_index_control_ingest.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_control_ingest.cxx (date 1776177013872)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/group_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/group_drop.cxx b/core/operations/management/group_drop.cxx
+--- a/core/operations/management/group_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/group_drop.cxx (date 1776177013868)
+@@ -19,7 +19,7 @@
+
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::operations::management
+ {
+Index: core/operations/management/analytics_dataverse_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_dataverse_create.cxx b/core/operations/management/analytics_dataverse_create.cxx
+--- a/core/operations/management/analytics_dataverse_create.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_dataverse_create.cxx (date 1776177013965)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/eventing_pause_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_pause_function.cxx b/core/operations/management/eventing_pause_function.cxx
+--- a/core/operations/management/eventing_pause_function.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_pause_function.cxx (date 1776177014023)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/date_range.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/date_range.cxx b/core/impl/date_range.cxx
+--- a/core/impl/date_range.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/date_range.cxx (date 1776177013922)
+@@ -17,8 +17,8 @@
+
+ #include <couchbase/date_range.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <ctime>
+Index: core/operations/management/analytics_dataset_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_dataset_drop.cxx b/core/operations/management/analytics_dataset_drop.cxx
+--- a/core/operations/management/analytics_dataset_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_dataset_drop.cxx (date 1776177014132)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/sasl/oauthbearer/oauthbearer.cc
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/sasl/oauthbearer/oauthbearer.cc b/core/sasl/oauthbearer/oauthbearer.cc
+--- a/core/sasl/oauthbearer/oauthbearer.cc (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/sasl/oauthbearer/oauthbearer.cc (date 1776177014176)
+@@ -16,7 +16,7 @@
+
+ #include "oauthbearer.h"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::sasl::mechanism::oauthbearer
+ {
+Index: core/operations/management/search_index_get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_get.cxx b/core/operations/management/search_index_get.cxx
+--- a/core/operations/management/search_index_get.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_get.cxx (date 1776177013905)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/search_index_get_documents_count.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_get_documents_count.cxx b/core/operations/management/search_index_get_documents_count.cxx
+--- a/core/operations/management/search_index_get_documents_count.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_get_documents_count.cxx (date 1776177013866)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/bucket_describe.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/bucket_describe.cxx b/core/operations/management/bucket_describe.cxx
+--- a/core/operations/management/bucket_describe.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/bucket_describe.cxx (date 1776177014152)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <algorithm>
+Index: core/impl/date_range_query.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/date_range_query.cxx b/core/impl/date_range_query.cxx
+--- a/core/impl/date_range_query.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/date_range_query.cxx (date 1776177013915)
+@@ -21,8 +21,8 @@
+
+ #include <couchbase/error_codes.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+ #include <tao/json/type.hpp>
+
+ #include <chrono>
+Index: core/operations/management/analytics_link_connect.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_connect.cxx b/core/operations/management/analytics_link_connect.cxx
+--- a/core/operations/management/analytics_link_connect.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_connect.cxx (date 1776177014122)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/protocol/hello_feature_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/hello_feature_fmt.hxx b/core/protocol/hello_feature_fmt.hxx
+--- a/core/protocol/hello_feature_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/hello_feature_fmt.hxx (date 1776177014063)
+@@ -19,7 +19,7 @@
+
+ #include "hello_feature.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::hello_feature> {
+Index: core/operations/management/view_index_get_all.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/view_index_get_all.cxx b/core/operations/management/view_index_get_all.cxx
+--- a/core/operations/management/view_index_get_all.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/view_index_get_all.cxx (date 1776177014148)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/scope.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/scope.cxx b/core/impl/scope.cxx
+--- a/core/impl/scope.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/scope.cxx (date 1776177013917)
+@@ -34,7 +34,7 @@
+ #include <couchbase/collection.hxx>
+ #include <couchbase/scope.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <memory>
+ #include <utility>
+Index: core/operations/management/scope_get_all.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/scope_get_all.cxx b/core/operations/management/scope_get_all.cxx
+--- a/core/operations/management/scope_get_all.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/scope_get_all.cxx (date 1776177013885)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/protocol/magic_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/magic_fmt.hxx b/core/protocol/magic_fmt.hxx
+--- a/core/protocol/magic_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/magic_fmt.hxx (date 1776177014061)
+@@ -19,7 +19,7 @@
+
+ #include "magic.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::magic> {
+Index: core/impl/numeric_range.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/numeric_range.cxx b/core/impl/numeric_range.cxx
+--- a/core/impl/numeric_range.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/numeric_range.cxx (date 1776177014097)
+@@ -17,7 +17,7 @@
+
+ #include <couchbase/numeric_range.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ namespace couchbase
+ {
+Index: core/operations/management/analytics_link_get_all.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_get_all.cxx b/core/operations/management/analytics_link_get_all.cxx
+--- a/core/operations/management/analytics_link_get_all.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_get_all.cxx (date 1776177013852)
+@@ -24,7 +24,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/scope_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/scope_create.cxx b/core/operations/management/scope_create.cxx
+--- a/core/operations/management/scope_create.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/scope_create.cxx (date 1776177014109)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/impl/search.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/search.cxx b/core/impl/search.cxx
+--- a/core/impl/search.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/search.cxx (date 1776177013924)
+@@ -29,7 +29,7 @@
+ #include <couchbase/match_none_query.hxx>
+ #include <utility>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::impl
+ {
+Index: core/impl/expiry.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/expiry.cxx b/core/impl/expiry.cxx
+--- a/core/impl/expiry.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/expiry.cxx (date 1776177013828)
+@@ -18,8 +18,8 @@
+ #include <couchbase/error_codes.hxx>
+ #include <couchbase/expiry.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <cstdint>
+Index: tools/utils.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/utils.hxx b/tools/utils.hxx
+--- a/tools/utils.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/utils.hxx (date 1776177014136)
+@@ -26,8 +26,8 @@
+
+ #include <CLI/CLI.hpp>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <cstdint>
+Index: core/protocol/client_response.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/client_response.hxx b/core/protocol/client_response.hxx
+--- a/core/protocol/client_response.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/client_response.hxx (date 1776177014140)
+@@ -34,7 +34,7 @@
+ #include <couchbase/cas.hxx>
+
+ #include <gsl/assert>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <cmath>
+ #include <cstring>
+Index: core/operations/management/analytics_dataverse_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_dataverse_drop.cxx b/core/operations/management/analytics_dataverse_drop.cxx
+--- a/core/operations/management/analytics_dataverse_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_dataverse_drop.cxx (date 1776177013850)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/cbc.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/cbc.cxx b/tools/cbc.cxx
+--- a/tools/cbc.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/cbc.cxx (date 1776177013900)
+@@ -29,7 +29,7 @@
+
+ #include "core/meta/version.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ auto
+ main(int argc, const char** argv) -> int
+Index: core/operations/management/query_index_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/query_index_drop.cxx b/core/operations/management/query_index_drop.cxx
+--- a/core/operations/management/query_index_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/query_index_drop.cxx (date 1776177013877)
+@@ -21,7 +21,7 @@
+ #include "core/utils/keyspace.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/operations/management/bucket_flush.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/bucket_flush.cxx b/core/operations/management/bucket_flush.cxx
+--- a/core/operations/management/bucket_flush.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/bucket_flush.cxx (date 1776177013936)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::operations::management
+ {
+Index: tools/get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/get.cxx b/tools/get.cxx
+--- a/tools/get.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/get.cxx (date 1776177014158)
+@@ -29,7 +29,7 @@
+ #include <couchbase/read_preference.hxx>
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json.hpp>
+
+ #include <couchbase/fmt/cas.hxx>
+Index: core/operations/management/query_index_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/query_index_create.cxx b/core/operations/management/query_index_create.cxx
+--- a/core/operations/management/query_index_create.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/query_index_create.cxx (date 1776177014120)
+@@ -21,7 +21,7 @@
+ #include "core/utils/keyspace.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/operations/management/analytics_index_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_index_drop.cxx b/core/operations/management/analytics_index_drop.cxx
+--- a/core/operations/management/analytics_index_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_index_drop.cxx (date 1776177013898)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/change_password.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/change_password.cxx b/core/operations/management/change_password.cxx
+--- a/core/operations/management/change_password.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/change_password.cxx (date 1776177013994)
+@@ -19,7 +19,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::operations::management
+ {
+Index: core/operations/management/eventing_drop_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_drop_function.cxx b/core/operations/management/eventing_drop_function.cxx
+--- a/core/operations/management/eventing_drop_function.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_drop_function.cxx (date 1776177014162)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/best_effort_retry_strategy.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/best_effort_retry_strategy.cxx b/core/impl/best_effort_retry_strategy.cxx
+--- a/core/impl/best_effort_retry_strategy.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/best_effort_retry_strategy.cxx (date 1776177013890)
+@@ -21,7 +21,7 @@
+ #include <couchbase/retry_reason.hxx>
+ #include <couchbase/retry_request.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <chrono>
+Index: tools/pillowfight.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/pillowfight.cxx b/tools/pillowfight.cxx
+--- a/tools/pillowfight.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/pillowfight.cxx (date 1776177013889)
+@@ -31,8 +31,8 @@
+ #include <asio/steady_timer.hpp>
+ #include <gsl/util>
+ #include <hdr/hdr_histogram.h>
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/std.h>
++#include <fmt/chrono.h>
++#include <fmt/std.h>
+ #include <tao/json.hpp>
+
+ #include <couchbase/fmt/cas.hxx>
+Index: tools/utils.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/utils.cxx b/tools/utils.cxx
+--- a/tools/utils.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/utils.cxx (date 1776177013956)
+@@ -87,7 +87,7 @@
+ #endif
+
+ #include <spdlog/details/os.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <spdlog/spdlog.h>
+ #include <tao/json/value.hpp>
+
+Index: core/operations/management/view_index_get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/view_index_get.cxx b/core/operations/management/view_index_get.cxx
+--- a/core/operations/management/view_index_get.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/view_index_get.cxx (date 1776177013831)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/query.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/query.cxx b/tools/query.cxx
+--- a/tools/query.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/query.cxx (date 1776177014058)
+@@ -31,7 +31,7 @@
+ #include <couchbase/fmt/query_status.hxx>
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ #include <tao/json.hpp>
+ #include <tao/json/type.hpp>
+Index: core/query_context.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/query_context.hxx b/core/query_context.hxx
+--- a/core/query_context.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/query_context.hxx (date 1776177014099)
+@@ -16,7 +16,7 @@
+ */
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <optional>
+ #include <string>
+Index: core/key_value_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/key_value_config.cxx b/core/key_value_config.cxx
+--- a/core/key_value_config.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/key_value_config.cxx (date 1776177014056)
+@@ -15,8 +15,8 @@
+
+ #include "key_value_config.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core
+ {
+Index: core/operations/management/search_index_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_drop.cxx b/core/operations/management/search_index_drop.cxx
+--- a/core/operations/management/search_index_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_drop.cxx (date 1776177013928)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/error.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/error.cxx b/core/impl/error.cxx
+--- a/core/impl/error.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/error.cxx (date 1776177013836)
+@@ -43,7 +43,7 @@
+ #include <couchbase/error_codes.hxx>
+ #include <couchbase/error_context.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include "core/transactions/internal/exceptions_internal_fmt.hxx"
+Index: tools/version.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/version.cxx b/tools/version.cxx
+--- a/tools/version.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/version.cxx (date 1776177014111)
+@@ -21,7 +21,7 @@
+
+ #include <core/meta/version.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json.hpp>
+
+ namespace
+Index: core/impl/dns_srv_tracker.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/dns_srv_tracker.cxx b/core/impl/dns_srv_tracker.cxx
+--- a/core/impl/dns_srv_tracker.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/dns_srv_tracker.cxx (date 1776177014165)
+@@ -31,7 +31,7 @@
+ #include <asio/bind_executor.hpp>
+ #include <asio/io_context.hpp>
+ #include <asio/post.hpp>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <functional>
+ #include <memory>
+Index: core/operations/management/bucket_get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/bucket_get.cxx b/core/operations/management/bucket_get.cxx
+--- a/core/operations/management/bucket_get.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/bucket_get.cxx (date 1776177014128)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/beam.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/beam.cxx b/tools/beam.cxx
+--- a/tools/beam.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/beam.cxx (date 1776177013896)
+@@ -25,8 +25,8 @@
+ #include <couchbase/cluster.hxx>
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/chrono.h>
++#include <fmt/ranges.h>
+
+ #include <couchbase/fmt/cas.hxx>
+ #include <couchbase/fmt/error.hxx>
+Index: core/http_component.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/http_component.cxx b/core/http_component.cxx
+--- a/core/http_component.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/http_component.cxx (date 1776177014138)
+@@ -25,7 +25,7 @@
+ #include <couchbase/build_config.hxx>
+
+ #include <asio/error.hpp>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tl/expected.hpp>
+
+ #include <memory>
+Index: core/protocol/frame_info_id_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/frame_info_id_fmt.hxx b/core/protocol/frame_info_id_fmt.hxx
+--- a/core/protocol/frame_info_id_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/frame_info_id_fmt.hxx (date 1776177013967)
+@@ -19,7 +19,7 @@
+
+ #include "frame_info_id.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::request_frame_info_id> {
+Index: tools/analytics.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/analytics.cxx b/tools/analytics.cxx
+--- a/tools/analytics.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/analytics.cxx (date 1776177013985)
+@@ -30,7 +30,7 @@
+
+ #include <asio/io_context.hpp>
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json.hpp>
+
+ #include <regex>
+Index: core/operations/management/collection_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/collection_create.cxx b/core/operations/management/collection_create.cxx
+--- a/core/operations/management/collection_create.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/collection_create.cxx (date 1776177013892)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/impl/collection.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/collection.cxx b/core/impl/collection.cxx
+--- a/core/impl/collection.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/collection.cxx (date 1776177013958)
+@@ -94,7 +94,7 @@
+ #include <couchbase/unlock_options.hxx>
+ #include <couchbase/upsert_options.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <cstdint>
+Index: examples/async_game_server.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/async_game_server.cxx b/examples/async_game_server.cxx
+--- a/examples/async_game_server.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/async_game_server.cxx (date 1776177013934)
+@@ -19,7 +19,7 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+ #include <couchbase/logger.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <couchbase/fmt/error.hxx>
+
+Index: core/protocol/server_opcode_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/server_opcode_fmt.hxx b/core/protocol/server_opcode_fmt.hxx
+--- a/core/protocol/server_opcode_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/server_opcode_fmt.hxx (date 1776177014084)
+@@ -19,7 +19,7 @@
+
+ #include "server_opcode.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::server_opcode> {
+Index: examples/bulk_transactional_get_replace.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/bulk_transactional_get_replace.cxx b/examples/bulk_transactional_get_replace.cxx
+--- a/examples/bulk_transactional_get_replace.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/bulk_transactional_get_replace.cxx (date 1776177013864)
+@@ -19,8 +19,8 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+ #include <couchbase/transactions.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/chrono.h>
++#include <fmt/format.h>
+ #include <tao/json/to_string.hpp>
+
+ #include <couchbase/fmt/error.hxx>
+Index: core/collections_component.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/collections_component.cxx b/core/collections_component.cxx
+--- a/core/collections_component.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/collections_component.cxx (date 1776177014150)
+@@ -42,7 +42,7 @@
+ #include <asio/error.hpp>
+ #include <asio/io_context.hpp>
+ #include <asio/steady_timer.hpp>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+ #include <tao/pegtl/parse_error.hpp>
+ #include <tl/expected.hpp>
+Index: examples/bulk_base_api.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/bulk_base_api.cxx b/examples/bulk_base_api.cxx
+--- a/examples/bulk_base_api.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/bulk_base_api.cxx (date 1776177013999)
+@@ -18,8 +18,8 @@
+ #include <couchbase/cluster.hxx>
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/chrono.h>
++#include <fmt/format.h>
+ #include <tao/json/to_string.hpp>
+
+ #include <couchbase/fmt/error.hxx>
+Index: examples/distributed_mutex.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/distributed_mutex.cxx b/examples/distributed_mutex.cxx
+--- a/examples/distributed_mutex.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/distributed_mutex.cxx (date 1776177014094)
+@@ -19,8 +19,8 @@
+ #include <couchbase/cluster.hxx>
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/chrono.h>
++#include <fmt/format.h>
+
+ #include <couchbase/fmt/error_context.hxx>
+
+Index: examples/minimal.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/minimal.cxx b/examples/minimal.cxx
+--- a/examples/minimal.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/minimal.cxx (date 1776177014038)
+@@ -19,7 +19,7 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+ #include <couchbase/logger.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <couchbase/fmt/error.hxx>
+
+Index: core/document_id_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/document_id_fmt.hxx b/core/document_id_fmt.hxx
+--- a/core/document_id_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/document_id_fmt.hxx (date 1776177014065)
+@@ -19,7 +19,7 @@
+
+ #include "document_id.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::document_id> {
+Index: examples/bulk_transactional_api.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/bulk_transactional_api.cxx b/examples/bulk_transactional_api.cxx
+--- a/examples/bulk_transactional_api.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/bulk_transactional_api.cxx (date 1776177013847)
+@@ -19,8 +19,8 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+ #include <couchbase/transactions.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/chrono.h>
++#include <fmt/format.h>
+ #include <tao/json/to_string.hpp>
+
+ #include <couchbase/fmt/error.hxx>
+Index: core/impl/fail_fast_retry_strategy.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/fail_fast_retry_strategy.cxx b/core/impl/fail_fast_retry_strategy.cxx
+--- a/core/impl/fail_fast_retry_strategy.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/fail_fast_retry_strategy.cxx (date 1776177013971)
+@@ -20,7 +20,7 @@
+ #include <couchbase/retry_reason.hxx>
+ #include <couchbase/retry_request.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+
+ #include <memory>
+ #include <string>
+Index: core/bucket.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/bucket.cxx b/core/bucket.cxx
+--- a/core/bucket.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/bucket.cxx (date 1776177014174)
+@@ -55,7 +55,7 @@
+ #include <asio/post.hpp>
+ #include <asio/ssl/context.hpp>
+ #include <gsl/span>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <chrono>
+Index: core/impl/key_value_error_context.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/key_value_error_context.cxx b/core/impl/key_value_error_context.cxx
+--- a/core/impl/key_value_error_context.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/key_value_error_context.cxx (date 1776177014016)
+@@ -17,7 +17,7 @@
+
+ #include "core/error_context/key_value_error_context.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/to_string.hpp>
+
+ #include "core/fmt/key_value_error_map_attribute.hxx"
+Index: core/topology/configuration_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/topology/configuration_fmt.hxx b/core/topology/configuration_fmt.hxx
+--- a/core/topology/configuration_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/topology/configuration_fmt.hxx (date 1776177014105)
+@@ -22,7 +22,7 @@
+ #include "core/service_type_fmt.hxx"
+ #include "core/utils/join_strings.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::topology::configuration::node> {
+Index: core/transactions/async_attempt_context.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/async_attempt_context.cxx b/core/transactions/async_attempt_context.cxx
+--- a/core/transactions/async_attempt_context.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/async_attempt_context.cxx (date 1776177013977)
+@@ -18,7 +18,7 @@
+ #include <couchbase/scope.hxx>
+ #include <couchbase/transactions/async_attempt_context.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::transactions
+ {
+Index: core/protocol/client_opcode_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/client_opcode_fmt.hxx b/core/protocol/client_opcode_fmt.hxx
+--- a/core/protocol/client_opcode_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/client_opcode_fmt.hxx (date 1776177014050)
+@@ -19,7 +19,7 @@
+
+ #include "client_opcode.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::client_opcode> {
+Index: core/transactions/exceptions_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/exceptions_fmt.hxx b/core/transactions/exceptions_fmt.hxx
+--- a/core/transactions/exceptions_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/exceptions_fmt.hxx (date 1776177013940)
+@@ -18,7 +18,7 @@
+
+ #include "exceptions.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::transactions::external_exception> {
+Index: core/topology/capabilities_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/topology/capabilities_fmt.hxx b/core/topology/capabilities_fmt.hxx
+--- a/core/topology/capabilities_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/topology/capabilities_fmt.hxx (date 1776177013855)
+@@ -19,7 +19,7 @@
+
+ #include "capabilities.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::bucket_capability> {
+Index: core/transactions/attempt_context.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/attempt_context.cxx b/core/transactions/attempt_context.cxx
+--- a/core/transactions/attempt_context.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/attempt_context.cxx (date 1776177014154)
+@@ -18,7 +18,7 @@
+ #include <couchbase/scope.hxx>
+ #include <couchbase/transactions/attempt_context.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::transactions
+ {
+Index: core/topology/collections_manifest_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/topology/collections_manifest_fmt.hxx b/core/topology/collections_manifest_fmt.hxx
+--- a/core/topology/collections_manifest_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/topology/collections_manifest_fmt.hxx (date 1776177014006)
+@@ -21,7 +21,7 @@
+
+ #include "core/utils/join_strings.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <vector>
+
+Index: core/seed_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/seed_config.cxx b/core/seed_config.cxx
+--- a/core/seed_config.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/seed_config.cxx (date 1776177014088)
+@@ -15,8 +15,8 @@
+
+ #include "seed_config.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/core.h>
++#include <fmt/ranges.h>
+
+ namespace couchbase::core
+ {
+Index: core/retry_orchestrator.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/retry_orchestrator.cxx b/core/retry_orchestrator.cxx
+--- a/core/retry_orchestrator.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/retry_orchestrator.cxx (date 1776177013963)
+@@ -21,7 +21,7 @@
+
+ #include <couchbase/fmt/retry_reason.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ namespace couchbase::core
+ {
+Index: core/transactions/result_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/result_fmt.hxx b/core/transactions/result_fmt.hxx
+--- a/core/transactions/result_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/result_fmt.hxx (date 1776177014178)
+@@ -18,7 +18,7 @@
+
+ #include "result.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::transactions::result> {
+Index: core/document_id.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/document_id.cxx b/core/document_id.cxx
+--- a/core/document_id.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/document_id.cxx (date 1776177014103)
+@@ -20,7 +20,7 @@
+ #include "core/utils/binary.hxx"
+ #include "core/utils/unsigned_leb128.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <cstddef>
+Index: core/websocket_codec.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/websocket_codec.cxx b/core/websocket_codec.cxx
+--- a/core/websocket_codec.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/websocket_codec.cxx (date 1776177013887)
+@@ -20,7 +20,7 @@
+ #include "core/platform/random.h"
+
+ #include <llhttp.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <array>
+Index: core/transactions/transaction_links.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/transaction_links.hxx b/core/transactions/transaction_links.hxx
+--- a/core/transactions/transaction_links.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/transaction_links.hxx (date 1776177014101)
+@@ -18,7 +18,7 @@
+
+ #include <couchbase/codec/encoded_value.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <optional>
+Index: core/service_type_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/service_type_fmt.hxx b/core/service_type_fmt.hxx
+--- a/core/service_type_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/service_type_fmt.hxx (date 1776177013920)
+@@ -19,7 +19,7 @@
+
+ #include "service_type.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::service_type> {
+Index: core/mcbp/operation_queue.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/mcbp/operation_queue.cxx b/core/mcbp/operation_queue.cxx
+--- a/core/mcbp/operation_queue.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/mcbp/operation_queue.cxx (date 1776177014032)
+@@ -23,7 +23,7 @@
+
+ #include <couchbase/error_codes.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <iterator>
+Index: core/management/rbac_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/management/rbac_fmt.hxx b/core/management/rbac_fmt.hxx
+--- a/core/management/rbac_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/management/rbac_fmt.hxx (date 1776177014042)
+@@ -19,7 +19,7 @@
+
+ #include "rbac.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::management::rbac::auth_domain> {
+Index: core/agent_group_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/agent_group_config.cxx b/core/agent_group_config.cxx
+--- a/core/agent_group_config.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/agent_group_config.cxx (date 1776177013860)
+@@ -15,7 +15,7 @@
+
+ #include "agent_group_config.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/transactions/internal/exceptions_internal_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/exceptions_internal_fmt.hxx b/core/transactions/internal/exceptions_internal_fmt.hxx
+--- a/core/transactions/internal/exceptions_internal_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/exceptions_internal_fmt.hxx (date 1776177013953)
+@@ -16,7 +16,7 @@
+
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::transactions::error_class> {
+Index: core/transactions/internal/atr_cleanup_entry.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/atr_cleanup_entry.hxx b/core/transactions/internal/atr_cleanup_entry.hxx
+--- a/core/transactions/internal/atr_cleanup_entry.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/atr_cleanup_entry.hxx (date 1776177014142)
+@@ -21,7 +21,7 @@
+ #include "core/transactions/transaction_get_result.hxx"
+ #include "logging.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <memory>
+Index: core/crud_component.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/crud_component.cxx b/core/crud_component.cxx
+--- a/core/crud_component.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/crud_component.cxx (date 1776177014113)
+@@ -43,7 +43,7 @@
+ #include <gsl/span_ext>
+ #include <gsl/util>
+ #include <snappy.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+ #include <tl/expected.hpp>
+
+Index: core/cluster_agent_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/cluster_agent_config.cxx b/core/cluster_agent_config.cxx
+--- a/core/cluster_agent_config.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/cluster_agent_config.cxx (date 1776177014034)
+@@ -15,7 +15,7 @@
+
+ #include "cluster_agent_config.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/transactions/internal/doc_record_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/doc_record_fmt.hxx b/core/transactions/internal/doc_record_fmt.hxx
+--- a/core/transactions/internal/doc_record_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/doc_record_fmt.hxx (date 1776177014025)
+@@ -17,7 +17,7 @@
+
+ #include "doc_record.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::transactions::doc_record> {
+Index: core/transactions/internal/client_record.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/client_record.hxx b/core/transactions/internal/client_record.hxx
+--- a/core/transactions/internal/client_record.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/client_record.hxx (date 1776177014051)
+@@ -15,7 +15,7 @@
+ */
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+ #include <vector>
+Index: core/app_telemetry_meter.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/app_telemetry_meter.cxx b/core/app_telemetry_meter.cxx
+--- a/core/app_telemetry_meter.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/app_telemetry_meter.cxx (date 1776177014160)
+@@ -22,7 +22,7 @@
+ #include "utils/json.hxx"
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/to_string.hpp>
+ #include <tao/json/value.hpp>
+
+Index: core/transactions/internal/logging.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/logging.hxx b/core/transactions/internal/logging.hxx
+--- a/core/transactions/internal/logging.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/logging.hxx (date 1776177013907)
+@@ -17,7 +17,7 @@
+
+ #include <core/logger/logger.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+
+ namespace couchbase::core::transactions
+ {
+Index: core/diagnostics_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/diagnostics_fmt.hxx b/core/diagnostics_fmt.hxx
+--- a/core/diagnostics_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/diagnostics_fmt.hxx (date 1776177014048)
+@@ -19,7 +19,7 @@
+
+ #include "diagnostics.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::diag::cluster_state> {
+Index: core/error_context/key_value_json.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/error_context/key_value_json.hxx b/core/error_context/key_value_json.hxx
+--- a/core/error_context/key_value_json.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/error_context/key_value_json.hxx (date 1776177014172)
+@@ -22,7 +22,7 @@
+
+ #include "key_value_error_context.hxx"
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json/forward.hpp>
+
+ namespace tao::json
+Index: core/error_context/query_public_json.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/error_context/query_public_json.hxx b/core/error_context/query_public_json.hxx
+--- a/core/error_context/query_public_json.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/error_context/query_public_json.hxx (date 1776177013841)
+@@ -21,7 +21,7 @@
+
+ #include <couchbase/fmt/retry_reason.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json/forward.hpp>
+
+ namespace tao::json
+Index: core/mcbp/packet.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/mcbp/packet.cxx b/core/mcbp/packet.cxx
+--- a/core/mcbp/packet.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/mcbp/packet.cxx (date 1776177014163)
+@@ -23,7 +23,7 @@
+ #include "core/fmt/key_value_status_code.hxx"
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <iterator>
+
+Index: core/origin.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/origin.cxx b/core/origin.cxx
+--- a/core/origin.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/origin.cxx (date 1776177013982)
+@@ -21,8 +21,8 @@
+ #include "core/utils/connection_string.hxx"
+ #include "topology/configuration.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <tao/json.hpp>
+
+Index: core/meta/version.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/meta/version.cxx b/core/meta/version.cxx
+--- a/core/meta/version.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/meta/version.cxx (date 1776177014046)
+@@ -32,7 +32,7 @@
+ #include <hdr/hdr_histogram_version.h>
+ #include <llhttp.h>
+ #include <snappy-stubs-public.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <spdlog/version.h>
+ #ifdef COUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY
+ #include <opentelemetry/version.h>
+Index: core/core_sdk_shim.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/core_sdk_shim.cxx b/core/core_sdk_shim.cxx
+--- a/core/core_sdk_shim.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/core_sdk_shim.cxx (date 1776177014036)
+@@ -15,7 +15,7 @@
+
+ #include "core_sdk_shim.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/error_context/subdocument_json.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/error_context/subdocument_json.hxx b/core/error_context/subdocument_json.hxx
+--- a/core/error_context/subdocument_json.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/error_context/subdocument_json.hxx (date 1776177014030)
+@@ -21,7 +21,7 @@
+
+ #include <couchbase/fmt/retry_reason.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json/forward.hpp>
+
+ #include "key_value_json.hxx"
+Index: core/config_profiles.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/config_profiles.cxx b/core/config_profiles.cxx
+--- a/core/config_profiles.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/config_profiles.cxx (date 1776177014013)
+@@ -20,7 +20,7 @@
+ #include "cluster_options.hxx"
+ #include "core/config_profile.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <mutex>
+Index: core/app_telemetry_reporter.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/app_telemetry_reporter.cxx b/core/app_telemetry_reporter.cxx
+--- a/core/app_telemetry_reporter.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/app_telemetry_reporter.cxx (date 1776177014003)
+@@ -33,8 +33,8 @@
+ #include <asio/steady_timer.hpp>
+ #include <llhttp.h>
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+ #include <tao/json/to_string.hpp>
+ #include <tao/json/value.hpp>
+
+Index: core/agent_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/agent_config.cxx b/core/agent_config.cxx
+--- a/core/agent_config.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/agent_config.cxx (date 1776177013988)
+@@ -15,7 +15,7 @@
+
+ #include "agent_config.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/sasl/error_fmt.h
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/sasl/error_fmt.h b/core/sasl/error_fmt.h
+--- a/core/sasl/error_fmt.h (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/sasl/error_fmt.h (date 1776177014029)
+@@ -19,7 +19,7 @@
+
+ #include "error.h"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::sasl::error> {
+Index: core/error_context/analytics_json.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/error_context/analytics_json.hxx b/core/error_context/analytics_json.hxx
+--- a/core/error_context/analytics_json.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/error_context/analytics_json.hxx (date 1776177013858)
+@@ -22,7 +22,7 @@
+
+ #include <couchbase/error_codes.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/forward.hpp>
+ #include <tao/json/value.hpp>
+
+Index: core/utils/join_strings.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/utils/join_strings.hxx b/core/utils/join_strings.hxx
+--- a/core/utils/join_strings.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/utils/join_strings.hxx (date 1776177014008)
+@@ -17,7 +17,7 @@
+
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <sstream>
+
+Index: core/operations/management/analytics_link_disconnect.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_disconnect.cxx b/core/operations/management/analytics_link_disconnect.cxx
+--- a/core/operations/management/analytics_link_disconnect.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_disconnect.cxx (date 1776177013952)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/utils/url_codec.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/utils/url_codec.cxx b/core/utils/url_codec.cxx
+--- a/core/utils/url_codec.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/utils/url_codec.cxx (date 1776177013904)
+@@ -17,7 +17,7 @@
+
+ #include "url_codec.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <cctype>
+ #include <climits>
+Index: core/operations/management/group_get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/group_get.cxx b/core/operations/management/group_get.cxx
+--- a/core/operations/management/group_get.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/group_get.cxx (date 1776177013930)
+@@ -21,7 +21,7 @@
+ #include "core/utils/json.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/scope_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/scope_drop.cxx b/core/operations/management/scope_drop.cxx
+--- a/core/operations/management/scope_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/scope_drop.cxx (date 1776177014027)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: test/test_unit_metrics.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_unit_metrics.cxx b/test/test_unit_metrics.cxx
+--- a/test/test_unit_metrics.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_unit_metrics.cxx (date 1776177014130)
+@@ -21,7 +21,7 @@
+ #include "core/tracing/constants.hxx"
+
+ #include <couchbase/error_codes.hxx>
+-#include <spdlog/fmt/bundled/printf.h>
++#include <fmt/printf.h>
+
+ TEST_CASE("unit: metric attributes encoding", "[unit]")
+ {
+Index: core/design_document_namespace_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/design_document_namespace_fmt.hxx b/core/design_document_namespace_fmt.hxx
+--- a/core/design_document_namespace_fmt.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/design_document_namespace_fmt.hxx (date 1776177013902)
+@@ -19,7 +19,7 @@
+
+ #include "design_document_namespace.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::design_document_namespace> {
+Index: core/operations/management/collection_update.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/collection_update.cxx b/core/operations/management/collection_update.cxx
+--- a/core/operations/management/collection_update.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/collection_update.cxx (date 1776177014115)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/operations/management/search_index_analyze_document.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_analyze_document.cxx b/core/operations/management/search_index_analyze_document.cxx
+--- a/core/operations/management/search_index_analyze_document.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_analyze_document.cxx (date 1776177013932)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/view_index_upsert.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/view_index_upsert.cxx b/core/operations/management/view_index_upsert.cxx
+--- a/core/operations/management/view_index_upsert.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/view_index_upsert.cxx (date 1776177013909)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: test/test_integration_tracer.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_integration_tracer.cxx b/test/test_integration_tracer.cxx
+--- a/test/test_integration_tracer.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_integration_tracer.cxx (date 1776177013879)
+@@ -25,7 +25,7 @@
+
+ #include <catch2/catch_message.hpp>
+ #include <catch2/generators/catch_generators.hpp>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/ranges.h>
+
+ class test_span : public couchbase::tracing::request_span
+ {
+Index: test/test_integration_examples.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_integration_examples.cxx b/test/test_integration_examples.cxx
+--- a/test/test_integration_examples.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_integration_examples.cxx (date 1776177013961)
+@@ -34,8 +34,8 @@
+ #include <couchbase/query_string_query.hxx>
+ #include <couchbase/term_facet.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/chrono.h>
++#include <fmt/ranges.h>
+ #include <tao/json.hpp>
+ #include <tao/json/contrib/traits.hpp>
+
+Index: core/io/http_parser.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/http_parser.cxx b/core/io/http_parser.cxx
+--- a/core/io/http_parser.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/http_parser.cxx (date 1776177013973)
+@@ -18,7 +18,7 @@
+ #include "http_parser.hxx"
+
+ #include <llhttp.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+
+Index: core/impl/crypto.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/crypto.cxx b/core/impl/crypto.cxx
+--- a/core/impl/crypto.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/crypto.cxx (date 1776177014018)
+@@ -24,7 +24,7 @@
+ #include "core/utils/binary.hxx"
+
+ #include "include_ssl/rand.h"
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+
+ namespace couchbase::crypto::internal
+ {
+Index: core/operations/management/bucket_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/bucket_drop.cxx b/core/operations/management/bucket_drop.cxx
+--- a/core/operations/management/bucket_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/bucket_drop.cxx (date 1776177014080)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::operations::management
+ {
+Index: core/operations/management/search_index_control_query.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_control_query.cxx b/core/operations/management/search_index_control_query.cxx
+--- a/core/operations/management/search_index_control_query.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_control_query.cxx (date 1776177013839)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/utils/keyspace.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/utils/keyspace.hxx b/core/utils/keyspace.hxx
+--- a/core/utils/keyspace.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/utils/keyspace.hxx (date 1776177013950)
+@@ -17,7 +17,7 @@
+
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/io/config_tracker.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/config_tracker.cxx b/core/io/config_tracker.cxx
+--- a/core/io/config_tracker.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/config_tracker.cxx (date 1776177013975)
+@@ -29,7 +29,7 @@
+ #include "mcbp_session.hxx"
+
+ #include <asio/steady_timer.hpp>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ namespace couchbase::core::io
+ {
+Index: core/io/mcbp_command.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/mcbp_command.hxx b/core/io/mcbp_command.hxx
+--- a/core/io/mcbp_command.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/mcbp_command.hxx (date 1776177013883)
+@@ -38,7 +38,7 @@
+ #include <couchbase/error_codes.hxx>
+
+ #include <asio/steady_timer.hpp>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ #include <functional>
+ #include <utility>
+Index: core/operations/management/collection_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/collection_drop.cxx b/core/operations/management/collection_drop.cxx
+--- a/core/operations/management/collection_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/collection_drop.cxx (date 1776177014146)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/io/http_session.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/http_session.hxx b/core/io/http_session.hxx
+--- a/core/io/http_session.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/http_session.hxx (date 1776177014107)
+@@ -36,7 +36,7 @@
+ #include "core/tls_context_provider.hxx"
+
+ #include <asio.hpp>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ #include <memory>
+ #include <optional>
+Index: core/operations/management/eventing_get_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_get_function.cxx b/core/operations/management/eventing_get_function.cxx
+--- a/core/operations/management/eventing_get_function.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_get_function.cxx (date 1776177013833)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/config.cxx b/tools/config.cxx
+--- a/tools/config.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/config.cxx (date 1776177014040)
+@@ -26,7 +26,7 @@
+
+ #include <couchbase/cluster.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json.hpp>
+ #include <tao/json/from_string.hpp>
+
+Index: core/operations/management/analytics_link_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_drop.cxx b/core/operations/management/analytics_link_drop.cxx
+--- a/core/operations/management/analytics_link_drop.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_drop.cxx (date 1776177014134)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/remove.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/remove.cxx b/tools/remove.cxx
+--- a/tools/remove.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/remove.cxx (date 1776177013881)
+@@ -24,7 +24,7 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json.hpp>
+
+ #include <couchbase/fmt/cas.hxx>
+Index: core/logger/logger.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/logger/logger.hxx b/core/logger/logger.hxx
+--- a/core/logger/logger.hxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/logger/logger.hxx (date 1776177013845)
+@@ -29,7 +29,7 @@
+
+ #include "level.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <spdlog/fwd.h>
+
+ #include <memory>
+Index: tools/sysinfo.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/sysinfo.cxx b/tools/sysinfo.cxx
+--- a/tools/sysinfo.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/sysinfo.cxx (date 1776177014060)
+@@ -19,8 +19,8 @@
+
+ #include "system_metrics_reporter.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+ #include <tao/json.hpp>
+
+ #include <array>
+Index: core/io/dns_client.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/dns_client.cxx b/core/io/dns_client.cxx
+--- a/core/io/dns_client.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/dns_client.cxx (date 1776177013862)
+@@ -28,7 +28,7 @@
+ #include <asio/read.hpp>
+ #include <asio/write.hpp>
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ #include <chrono>
+ #include <memory>
+Index: tools/key_generator.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/key_generator.cxx b/tools/key_generator.cxx
+--- a/tools/key_generator.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/key_generator.cxx (date 1776177013991)
+@@ -20,7 +20,7 @@
+ #include "core/topology/configuration.hxx"
+
+ #include <optional>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <gsl/assert>
+ #include <gsl/span>
+Index: tools/upsert.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/upsert.cxx b/tools/upsert.cxx
+--- a/tools/upsert.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/upsert.cxx (date 1776177013938)
+@@ -27,7 +27,7 @@
+ #include <couchbase/replicate_to.hxx>
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json.hpp>
+
+ #include <couchbase/fmt/cas.hxx>
+Index: core/operations/management/eventing_deploy_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_deploy_function.cxx b/core/operations/management/eventing_deploy_function.cxx
+--- a/core/operations/management/eventing_deploy_function.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_deploy_function.cxx (date 1776177014054)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/search_index_get_all.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_get_all.cxx b/core/operations/management/search_index_get_all.cxx
+--- a/core/operations/management/search_index_get_all.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_get_all.cxx (date 1776177014117)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/eventing_undeploy_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_undeploy_function.cxx b/core/operations/management/eventing_undeploy_function.cxx
+--- a/core/operations/management/eventing_undeploy_function.cxx (revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_undeploy_function.cxx (date 1776177013979)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
diff --git a/thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch b/thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch
deleted file mode 100644
index 8ac0a762b..000000000
--- a/thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 50dd920299f8f905f47475bf77c299d9a84512b8 Mon Sep 17 00:00:00 2001
-From: Jason Merrill <ja...@redhat.com>
-Date: Thu, 18 Aug 2022 23:53:16 -0400
-Subject: [PATCH] libstdc++: avoid bogus -Wrestrict [PR105651]
-To: gcc-patches@gcc.gnu.org
-
- PR tree-optimization/105651
-
-libstdc++-v3/ChangeLog:
-
- * include/bits/basic_string.tcc (_M_replace): Add an assert
- to avoid -Wrestrict false positive.
----
- libstdc++-v3/include/bits/basic_string.tcc | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc
-index 4563c61429a..0d5c4d6191e 100644
---- a/libstdc++-v3/include/bits/basic_string.tcc
-+++ b/libstdc++-v3/include/bits/basic_string.tcc
-@@ -529,6 +529,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
- {
- const size_type __nleft = (__p + __len1) - __s;
- this->_S_move(__p, __s, __nleft);
-+ // Tell the middle-end that the copy can't overlap
-+ // (PR105651).
-+ if (__len2 < __nleft) __builtin_unreachable ();
- this->_S_copy(__p + __nleft, __p + __len2,
- __len2 - __nleft);
- }
---
-2.31.1