Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/jsonbase.cpp 4 : : \copyright 2022-2025 J. Bakosi, 5 : : All rights reserved. See the LICENSE file for details. 6 : : \brief Piac functionality to interact with JSON serialization library 7 : : */ 8 : : // ***************************************************************************** 9 : : 10 : : #include <fstream> 11 : : #include <sstream> 12 : : 13 : : #include "jsonbase.hpp" 14 : : 15 : : using piac::JSONBase; 16 : : 17 : : std::string 18 [ + - ]: 21 : JSONBase::serialize() const 19 : : // ***************************************************************************** 20 : : // Serialize JSON writer helper 21 : : //! \return Serialized JSON data 22 : : // ***************************************************************************** 23 : : { 24 : : rapidjson::StringBuffer ss; 25 : : rapidjson::Writer< rapidjson::StringBuffer > writer( ss ); 26 [ + - ][ + - ]: 21 : if (serialize(&writer)) return ss.GetString(); [ + - ][ + - ] 27 : : return {}; 28 : : } 29 : : 30 : : bool 31 : 11 : JSONBase::deserialize( const std::string& s ) 32 : : // ***************************************************************************** 33 : : // Deserialize helper from JSON in string 34 : : //! \param[in] s String containing JSON format to deserialize 35 : : //! \return True if successful 36 : : // ***************************************************************************** 37 : : { 38 : 11 : rapidjson::Document doc; 39 [ + - ][ + - ]: 11 : if (not initDocument( s, doc )) return false; 40 [ + - ]: 11 : deserialize( doc ); 41 : : return true; 42 : : } 43 : : 44 : : bool 45 : 6 : JSONBase::deserializeFromFile( const std::string& filePath ) 46 : : // ***************************************************************************** 47 : : // Deserialize from JSON in file helper 48 : : //! \param[in] filePath Filename containing JSON format to deserialize 49 : : //! \return True if successful 50 : : // ***************************************************************************** 51 : : { 52 : 12 : std::ifstream f( filePath ); 53 [ + - ]: 6 : std::stringstream buffer; 54 [ + - ]: 6 : buffer << f.rdbuf(); 55 [ + - ]: 6 : f.close(); 56 [ + - ][ + - ]: 18 : return deserialize( buffer.str() ); 57 : : } 58 : : 59 : : bool 60 : 0 : JSONBase::serializeToFile( const std::string& filePath ) const 61 : : // ***************************************************************************** 62 : : // Serialize JSON format to file helper 63 : : //! \param[in] filePath Filename to write JSON to 64 : : //! \return True if successful 65 : : // ***************************************************************************** 66 : : { 67 : 0 : std::ofstream f( filePath ); 68 [ - - ]: 0 : f << serialize(); 69 [ - - ]: 0 : f.flush(); 70 [ - - ]: 0 : f.close(); 71 : 0 : return true; 72 : : } 73 : : 74 : : bool 75 [ + - ]: 17 : JSONBase::initDocument( const std::string& s, rapidjson::Document& doc ) const 76 : : // ***************************************************************************** 77 : : // Validate and initialize JSON formatted document 78 : : //! \param[in] s String containing JSON formatted data 79 : : //! \param[in,out] doc JSON document to store data in 80 : : //! \return True if JSON is valid 81 : : // ***************************************************************************** 82 : : { 83 [ + - ]: 17 : if (s.empty()) return false; 84 : : std::string validJson( s ); 85 [ + - ]: 17 : return not doc.Parse( validJson.c_str() ).HasParseError() ? true : false; 86 : : }