From c6d080ad829b37cdcb6d6795cf7b61db2edfd552 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Tue, 9 Dec 2025 23:11:06 +0800 Subject: [PATCH] fix: fix clap parser resolver build issue --- src/yycc/carton/clap/parser.cpp | 7 ++++--- src/yycc/carton/clap/parser.hpp | 2 +- src/yycc/carton/clap/resolver.cpp | 7 ++++--- src/yycc/carton/clap/resolver.hpp | 2 +- src/yycc/env.cpp | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/yycc/carton/clap/parser.cpp b/src/yycc/carton/clap/parser.cpp index b7ae9ee..1e9c757 100644 --- a/src/yycc/carton/clap/parser.cpp +++ b/src/yycc/carton/clap/parser.cpp @@ -63,7 +63,7 @@ namespace yycc::carton::clap::parser { /// @brief Core capture function. template - static TYPES::ClapResult>> capture(const APPLICATION::Application& app, V args) { + static TYPES::ClapResult>> capture(const APPLICATION::Application& app, V&& args) { // Create context. ParserContext ctx(app); @@ -172,13 +172,14 @@ namespace yycc::carton::clap::parser { #pragma region Parser Class TYPES::ClapResult Parser::from_user(const APPLICATION::Application& app, const std::vector& args) { - auto rv = capture(app, args); + auto rv = capture(app, std::views::all(args)); if (rv.has_value()) return Parser(std::move(rv.value())); else return std::unexpected(rv.error()); } TYPES::ClapResult Parser::from_system(const APPLICATION::Application& app) { - auto rv = capture(app, ENV::get_args() | std::views::transform([](auto s) { + auto args = ENV::get_args(); + auto rv = capture(app, args | std::views::transform([](const auto& s) { return std::u8string_view(s); })); if (rv.has_value()) return Parser(std::move(rv.value())); diff --git a/src/yycc/carton/clap/parser.hpp b/src/yycc/carton/clap/parser.hpp index d702882..36c052c 100644 --- a/src/yycc/carton/clap/parser.hpp +++ b/src/yycc/carton/clap/parser.hpp @@ -53,7 +53,7 @@ namespace yycc::carton::clap::parser { if (value.has_value()) return value.value(); else return std::unexpected(NS_YYCC_CLAP_TYPES::ClapError::BadCast); } else { - return std::unexpected(raw_value.error()) + return std::unexpected(raw_value.error()); } } }; diff --git a/src/yycc/carton/clap/resolver.cpp b/src/yycc/carton/clap/resolver.cpp index f40781e..910f21a 100644 --- a/src/yycc/carton/clap/resolver.cpp +++ b/src/yycc/carton/clap/resolver.cpp @@ -13,7 +13,7 @@ namespace yycc::carton::clap::resolver { /// @brief Core capture function template - static TYPES::ClapResult>> capture(const APPLICATION::Application& app, V vars) { + static TYPES::ClapResult>> capture(const APPLICATION::Application& app, V&& vars) { std::map> values; const auto& variables = app.get_variables(); @@ -48,13 +48,14 @@ namespace yycc::carton::clap::resolver { TYPES::ClapResult Resolver::from_user(const APPLICATION::Application& app, const std::vector>& vars) { - auto rv = capture(app, vars); + auto rv = capture(app, std::views::all(vars)); if (rv.has_value()) return Resolver(std::move(rv.value())); else return std::unexpected(rv.error()); } TYPES::ClapResult Resolver::from_system(const APPLICATION::Application& app) { - auto rv = capture(app, ENV::get_vars() | std::views::transform([](auto p) { + auto vars = ENV::get_vars(); + auto rv = capture(app, vars | std::views::transform([](const auto& p) { return std::make_pair(p.first, p.second); })); if (rv.has_value()) return Resolver(std::move(rv.value())); diff --git a/src/yycc/carton/clap/resolver.hpp b/src/yycc/carton/clap/resolver.hpp index 86ec807..5159d75 100644 --- a/src/yycc/carton/clap/resolver.hpp +++ b/src/yycc/carton/clap/resolver.hpp @@ -53,7 +53,7 @@ namespace yycc::carton::clap::resolver { if (value.has_value()) return value.value(); else return std::unexpected(NS_YYCC_CLAP_TYPES::ClapError::BadCast); } else { - return std::unexpected(raw_value.error()) + return std::unexpected(raw_value.error()); } } }; diff --git a/src/yycc/env.cpp b/src/yycc/env.cpp index 54af0a0..3b603ea 100644 --- a/src/yycc/env.cpp +++ b/src/yycc/env.cpp @@ -230,7 +230,7 @@ namespace yycc::env { #pragma region Environment Argument - ArgResult> get_args() { + std::vector get_args() { // TODO: finish this function according to Rust implementation. // Considering whether use iterator as return value. throw std::logic_error("not implemented");