From 60a11252cb9b1168b58b2cc279238c4acad0610d Mon Sep 17 00:00:00 2001 From: Wizzard Date: Wed, 10 Apr 2024 04:49:57 -0400 Subject: [PATCH] Get rid of boost usage --- build.sh | 2 +- main.cpp | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/build.sh b/build.sh index ad50fb9..a443d6b 100755 --- a/build.sh +++ b/build.sh @@ -1 +1 @@ -g++ -std=c++17 main.cpp -o solprice-cli -lcurl -lncurses -lboost_system +g++ -std=c++17 main.cpp -o solprice-cli -lcurl -lncurses diff --git a/main.cpp b/main.cpp index 429c929..0be1375 100644 --- a/main.cpp +++ b/main.cpp @@ -1,8 +1,6 @@ #include #include #include -#include -#include #include static size_t WriteCallback(void *contents, size_t size, size_t nmemb, std::string *userp) { @@ -25,12 +23,27 @@ double getConversionRate() { curl_easy_cleanup(curl); if(res == CURLE_OK) { - boost::json::error_code ec; - auto parsed = boost::json::parse(readBuffer, ec); - if(!ec) { - auto& obj = parsed.as_object(); - rate = obj["solana"].as_object()["usd"].as_double(); + std::size_t usdPos = readBuffer.find("\"usd\":"); + if (usdPos != std::string::npos) { + std::size_t start = readBuffer.find(':', usdPos) + 1; + std::size_t end = readBuffer.find_first_of("},", start); + if(start < end) { + std::string usdValue = readBuffer.substr(start, end - start); + usdValue.erase(0, usdValue.find_first_not_of(" \n\r\t")); + usdValue.erase(usdValue.find_last_not_of(" \n\r\t") + 1); + try { + rate = std::stod(usdValue); + } catch (const std::invalid_argument& ia) { + std::cerr << "Invalid argument: " << ia.what() << '\n'; + } catch (const std::out_of_range& oor) { + std::cerr << "Out of Range error: " << oor.what() << '\n'; + } + } + } else { + std::cerr << "USD rate not found in response." << std::endl; } + } else { + std::cerr << "CURL failed with error code: " << res << std::endl; } } return rate;