diff --git a/modules/14_cpp26/src/monadic_expected.cpp b/modules/14_cpp26/src/monadic_expected.cpp index 5e56eae..4616464 100644 --- a/modules/14_cpp26/src/monadic_expected.cpp +++ b/modules/14_cpp26/src/monadic_expected.cpp @@ -3,18 +3,23 @@ namespace cpp26 { auto parse_id(const std::string& text) -> std::expected { - (void)text; - return std::unexpected(ErrorCode::Invalid); + int id = 0; + if (auto [ptr, ec] = std::from_chars(text.data(), text.data() + text.size(), id); + ec != std::errc{} || ptr != text.data() + text.size()) { + return std::unexpected(ErrorCode::Invalid); + } + return id; } -auto load_user(int id) -> std::expected { - (void)id; - return std::unexpected(ErrorCode::NotFound); +auto load_user(const int id) -> std::expected { + if (id == 999) { + return std::unexpected(ErrorCode::NotFound); + } + return "User-" + std::to_string(id); } auto load_user_name(const std::string& text) -> std::expected { - (void)text; - return std::unexpected(ErrorCode::Invalid); + return parse_id(text).and_then(load_user); } } // namespace cpp26