From 834d5d5964a59a839c8844fa60a79ca798d8adf6 Mon Sep 17 00:00:00 2001 From: David Chen <36295559+David0922@users.noreply.github.com> Date: Sun, 21 Dec 2025 05:07:04 +0800 Subject: [PATCH] C++ 23 -> C++ 20; std::expected -> Expected (#3) --- CMakeLists.txt | 11 +++++++---- src/main.cc | 18 +++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 287ebda..b064c43 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,19 @@ cmake_minimum_required(VERSION 3.16) +project(redis_playground LANGUAGES CXX) + set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") -project(redis_playground LANGUAGES CXX) - find_package(hiredis CONFIG REQUIRED) add_library(proj_warnings INTERFACE) target_compile_options(proj_warnings INTERFACE -Wall -Werror -Wextra -Wpedantic) +add_library(expected INTERFACE src/expected.h) +target_link_libraries(expected INTERFACE proj_warnings) + add_executable(main ./src/main.cc) -target_link_libraries(main PRIVATE proj_warnings hiredis::hiredis) +target_link_libraries(main PRIVATE proj_warnings expected hiredis::hiredis) diff --git a/src/main.cc b/src/main.cc index 4b24486..8a84956 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,6 +1,5 @@ #include -#include #include #include #include @@ -12,6 +11,8 @@ #include #include +#include "expected.h" + struct FieldVal { std::string field, val; }; @@ -73,7 +74,7 @@ class RedisClient { if (ctx_) redisFree(ctx_); } - std::expected xadd(const XaddReq& req) noexcept { + Expected xadd(const XaddReq& req) noexcept { // todo: safe guard against invalid requests std::stringstream ss; @@ -84,15 +85,15 @@ class RedisClient { auto reply = submit_cmd(ss.str()); if (!reply) { - return std::unexpected(ctx_->errstr); + return Unexpected(ctx_->errstr); } else if (reply->type == REDIS_REPLY_ERROR) { - return std::unexpected(reply->str ? reply->str : "unknown error"); + return Unexpected(reply->str ? reply->str : "unknown error"); } return {}; } - std::expected xread(const XreadReq& req) noexcept { + Expected xread(const XreadReq& req) noexcept { // todo: safe guard against invalid requests std::stringstream ss; @@ -105,14 +106,13 @@ class RedisClient { auto reply = submit_cmd(ss.str()); if (!reply) { - return std::unexpected(ctx_->errstr); + return Unexpected(ctx_->errstr); } else if (reply->type == REDIS_REPLY_ERROR) { - return std::unexpected(reply->str ? reply->str : "unknown reply error"); + return Unexpected(reply->str ? reply->str : "unknown reply error"); } else if (reply->type == REDIS_REPLY_NIL) { return {}; } else if (reply->type != REDIS_REPLY_ARRAY) { - return std::unexpected( - std::format("unexpected reply type {}", reply->type)); + return Unexpected(std::format("unexpected reply type {}", reply->type)); } XreadRes res;