Piac test code coverage report
Current view: top level - src - document.cpp (source / functions) Hit Total Coverage
Commit: Piac-DEBUG Lines: 40 45 88.9 %
Date: 2022-12-16 13:46:15 Functions: 3 4 75.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 49 98 50.0 %

           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                 :         25 : 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                 :         25 :   id( obj["id"].GetInt() );
      26 [ +  - ][ +  - ]:         25 :   title( obj["title"].GetString() );
         [ +  - ][ +  - ]
      27 [ +  - ][ +  - ]:         25 :   author( obj["author"].GetString() );
         [ +  - ][ +  - ]
      28 [ +  - ][ +  - ]:         25 :   description( obj["description"].GetString() );
         [ +  - ][ +  - ]
      29                 :         25 :   price( obj["price"].GetDouble() );
      30 [ +  - ][ +  - ]:         25 :   category( obj["category"].GetString() );
         [ +  - ][ +  - ]
      31 [ +  - ][ +  - ]:         25 :   condition( obj["condition"].GetString() );
         [ +  - ][ +  - ]
      32 [ +  - ][ +  - ]:         25 :   shipping( obj["shipping"].GetString() );
         [ +  - ][ +  - ]
      33 [ +  - ][ +  - ]:         25 :   format( obj["format"].GetString() );
         [ +  - ][ +  - ]
      34 [ +  - ][ +  - ]:         25 :   location( obj["location"].GetString() );
         [ +  - ][ +  - ]
      35 [ +  - ][ +  - ]:         25 :   keywords( obj["keywords"].GetString() );
         [ +  - ][ +  - ]
      36                 :         25 :   return true;
      37                 :            : }
      38                 :            : 
      39                 :            : bool
      40                 :         22 : 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                 :         22 :   writer->StartObject();
      49                 :         22 :   writer->String( "id" );        writer->Int( m_id );
      50                 :         22 :   writer->String("title");       writer->String( m_title.c_str() );
      51                 :         22 :   writer->String("author");      writer->String( m_author.c_str() );
      52                 :         22 :   writer->String("description"); writer->String( m_description.c_str() );
      53                 :         22 :   writer->String( "price" );     writer->Double( m_price );
      54                 :         22 :   writer->String("category");    writer->String( m_category.c_str() );
      55                 :         22 :   writer->String("condition");   writer->String( m_condition.c_str() );
      56                 :         22 :   writer->String("shipping");    writer->String( m_shipping.c_str() );
      57                 :         22 :   writer->String("format");      writer->String( m_format.c_str() );
      58                 :         22 :   writer->String("location");    writer->String( m_location.c_str() );
      59                 :         22 :   writer->String("keywords");    writer->String( m_keywords.c_str() );
      60                 :         22 :   writer->EndObject();
      61                 :         22 :   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         [ +  - ]:         12 :   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                 :         16 :       Document p;
      77         [ +  - ]:          8 :       p.deserialize( *itr );
      78         [ +  - ]:          8 :       m_documents.push_back( p );
      79                 :            :     }
      80                 :            :   } else {
      81                 :          4 :     Document p;
      82         [ +  - ]:          2 :     p.deserialize( jdoc );
      83         [ +  - ]:          2 :     m_documents.push_back( p );
      84                 :            :   }
      85                 :          6 :   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                 :          0 :   writer->EndArray();
     100                 :          0 :   return true;
     101                 :            : }

Generated by: LCOV version 1.14