Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/document.cpp 4 : : \copyright 2022-2025 J. Bakosi, 5 : : All rights reserved. See the LICENSE file for details. 6 : : \brief Piac document functionality to interact with database library 7 : : */ 8 : : // ***************************************************************************** 9 : : 10 : : #include <vector> 11 : : 12 : : #include "document.hpp" 13 : : 14 : : using piac::Document; 15 : : using piac::Documents; 16 : : 17 : : bool 18 : 21 : Document::deserialize( const rapidjson::Value& obj ) 19 : : // **************************************************************************** 20 : : // Deserialize (piac) document state from JSON object 21 : : //! \param[in] obj Input JSON object 22 : : //! \return True if no error occurred 23 : : // **************************************************************************** 24 : : { 25 : : id( obj["id"].GetInt() ); 26 : 42 : title( obj["title"].GetString() ); 27 : 42 : author( obj["author"].GetString() ); 28 : 42 : description( obj["description"].GetString() ); 29 : 21 : price( obj["price"].GetDouble() ); 30 : 42 : category( obj["category"].GetString() ); 31 : 42 : condition( obj["condition"].GetString() ); 32 : 42 : shipping( obj["shipping"].GetString() ); 33 : 42 : format( obj["format"].GetString() ); 34 : 42 : location( obj["location"].GetString() ); 35 : 42 : keywords( obj["keywords"].GetString() ); 36 : 21 : return true; 37 : : } 38 : : 39 : : bool 40 : 21 : Document::serialize( rapidjson::Writer< rapidjson::StringBuffer >* writer ) 41 : : const 42 : : // **************************************************************************** 43 : : // Serialize (piac) document state to JSON format 44 : : //! \param[in] writer Pointer to rapidjson write object to write object to 45 : : //! \return True if no error occurred 46 : : // **************************************************************************** 47 : : { 48 : 21 : writer->StartObject(); 49 : 21 : writer->String( "id" ); writer->Int( m_id ); 50 : 21 : writer->String("title"); writer->String( m_title.c_str() ); 51 : 21 : writer->String("author"); writer->String( m_author.c_str() ); 52 : 21 : writer->String("description"); writer->String( m_description.c_str() ); 53 : 21 : writer->String( "price" ); writer->Double( m_price ); 54 : 21 : writer->String("category"); writer->String( m_category.c_str() ); 55 : 21 : writer->String("condition"); writer->String( m_condition.c_str() ); 56 : 21 : writer->String("shipping"); writer->String( m_shipping.c_str() ); 57 : 21 : writer->String("format"); writer->String( m_format.c_str() ); 58 : 21 : writer->String("location"); writer->String( m_location.c_str() ); 59 : 21 : writer->String("keywords"); writer->String( m_keywords.c_str() ); 60 : : writer->EndObject(); 61 : 21 : return true; 62 : : } 63 : : 64 : : bool 65 : 6 : Documents::deserialize( const std::string& s ) 66 : : // **************************************************************************** 67 : : // Deserialize multiple (piac) ddocuments from JSON format 68 : : //! \param[in] s String containing multiple JSON formatted documents 69 : : //! \return True if no error occurred 70 : : // **************************************************************************** 71 : : { 72 : 6 : rapidjson::Document jdoc; 73 [ + - ][ + - ]: 6 : if (not initDocument( s, jdoc )) return false; 74 [ + + ]: 6 : if (jdoc.IsArray()) { 75 [ + + ]: 12 : for (auto itr = jdoc.Begin(); itr != jdoc.End(); ++itr) { 76 : 8 : Document p; 77 [ + - ]: 8 : p.deserialize( *itr ); 78 [ + - ]: 8 : m_documents.push_back( p ); 79 : : } 80 : : } else { 81 : 2 : Document p; 82 [ + - ]: 2 : p.deserialize( jdoc ); 83 [ + - ]: 2 : m_documents.push_back( p ); 84 : : } 85 : : return true; 86 : : } 87 : : 88 : : bool 89 : 0 : Documents::serialize( rapidjson::Writer<rapidjson::StringBuffer>* writer ) 90 : : const 91 : : // **************************************************************************** 92 : : // Serialize multiple (piac) documents to JSON format 93 : : //! \param[in] writer Pointer to rapidjson write object to write object to 94 : : //! \return True if no error occurred 95 : : // **************************************************************************** 96 : : { 97 : 0 : writer->StartArray(); 98 [ - - ]: 0 : for (const auto& d : m_documents) d.serialize(writer); 99 : : writer->EndArray(); 100 : 0 : return true; 101 : : }