#include #include #include "private/cli/commandmap.hpp" #include "private/cli/common.hpp" #include using namespace shareddatalayer; using namespace shareddatalayer::cli; namespace { std::shared_ptr createSyncStorage(const SyncStorage::Namespace& ns, std::ostream& out) { try { auto sdl(shareddatalayer::SyncStorage::create()); sdl->waitReady(ns, std::chrono::minutes(1)); return sdl; } catch (const shareddatalayer::Exception& error) { out << "SyncStorage create failed: " << error.what() << std::endl; } return nullptr; } void set(shareddatalayer::SyncStorage& sdl, const SyncStorage::Namespace& ns, const SyncStorage::DataMap& dataMap, std::ostream& out) { try { sdl.set(ns, dataMap); out << "set {" << ns << "}," << dataMap << std::endl; } catch (const shareddatalayer::Exception& error) { out << "Error in set(" << ns << ", " << dataMap << ") failed: " << error.what() << std::endl; } } int setCommand(std::ostream& out, const boost::program_options::variables_map& map) { auto ns(map["ns"].as()); auto key(map["key"].as()); auto data(map["data"].as()); auto debug(map["debug"].as()); SyncStorage::Data dataVector(data.begin(), data.end()); auto sdl(createSyncStorage(ns, out)); if (nullptr == sdl) return EXIT_FAILURE; sdl->setOperationTimeout(std::chrono::seconds(5)); if (debug) { out << "DEBUG setCommand ns: " << ns << " key: " << key << " data: " << data << std::endl; } SyncStorage::DataMap datamap({{key, dataVector}}); set(std::ref(*sdl), ns, datamap, out); return EXIT_SUCCESS; } } const char *longHelpSetCmd = "Use set SDL API to write data to storage under the namespace.\n\n" "Example: sdltool set --ns 'sdltool' --key 'key1' --data '1'"; AUTO_REGISTER_COMMAND(std::bind(setCommand, std::placeholders::_1, std::placeholders::_3), "set", "set key value with SDL API", longHelpSetCmd, CommandMap::Category::UTIL, 30040, ("ns,n", boost::program_options::value()->default_value("sdltoolns"), "namespace to use") ("key,k", boost::program_options::value()->default_value("key1"), "key value") ("data,d", boost::program_options::value()->default_value("1"), "data") ("debug", boost::program_options::bool_switch()->default_value(false), "Enable debug logs") );