LCOV - code coverage report
Current view: top level - util - product_sold_serialize.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 11 11
Test Date: 2026-09-11 17:45:24 Functions: 100.0 % 2 2

            Line data    Source code
       1              : /*
       2              :   This file is part of GNU Taler
       3              :   Copyright (C) 2024, 2025 Taler Systems SA
       4              : 
       5              :   TALER is free software; you can redistribute it and/or modify it under the
       6              :   terms of the GNU General Public License as published by the Free Software
       7              :   Foundation; either version 3, or (at your option) any later version.
       8              : 
       9              :   TALER is distributed in the hope that it will be useful, but WITHOUT ANY
      10              :   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
      11              :   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
      12              : 
      13              :   You should have received a copy of the GNU General Public License along with
      14              :   TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
      15              : */
      16              : /**
      17              :  * @file src/util/product_sold_serialize.c
      18              :  * @brief shared logic for product sold serialization
      19              :  * @author Iván Ávalos
      20              :  * @author Christian Grothoff
      21              :  */
      22              : #include "platform.h"
      23              : #include <gnunet/gnunet_json_lib.h>
      24              : #include <gnunet/gnunet_common.h>
      25              : #include <taler/taler_json_lib.h>
      26              : #include <jansson.h>
      27              : #include "taler/taler_util.h"
      28              : #include "taler/taler_merchant_util.h"
      29              : 
      30              : 
      31              : /**
      32              :  * Convert quantity @a q into a string for JSON serialization
      33              :  *
      34              :  * @param q quantity to convert
      35              :  * @return formatted string
      36              :  */
      37              : static const char *
      38           32 : quantity_to_string (const struct TALER_MERCHANT_ProductQuantity *q)
      39              : {
      40              :   static TALER_THREAD_LOCAL char res[64];
      41              : 
      42           32 :   TALER_MERCHANT_vk_format_fractional_string (TALER_MERCHANT_VK_QUANTITY,
      43           32 :                                               q->integer,
      44           32 :                                               q->fractional,
      45              :                                               sizeof (res),
      46              :                                               res);
      47           32 :   return res;
      48              : }
      49              : 
      50              : 
      51              : json_t *
      52           32 : TALER_MERCHANT_product_sold_serialize (
      53              :   const struct TALER_MERCHANT_ProductSold *p)
      54              : {
      55              :   json_t *prices;
      56              : 
      57           32 :   prices = json_array ();
      58           32 :   GNUNET_assert (NULL != prices);
      59           72 :   for (unsigned int i = 0; i<p->prices_length; i++)
      60           40 :     GNUNET_assert (0 ==
      61              :                    json_array_append_new (prices,
      62              :                                           TALER_JSON_from_amount (
      63              :                                             &p->prices[i])));
      64           32 :   return GNUNET_JSON_PACK (
      65              :     GNUNET_JSON_pack_allow_null (
      66              :       GNUNET_JSON_pack_string ("product_id",
      67              :                                p->product_id)),
      68              :     GNUNET_JSON_pack_allow_null (
      69              :       GNUNET_JSON_pack_string ("product_name",
      70              :                                p->product_name)),
      71              :     GNUNET_JSON_pack_allow_null (
      72              :       GNUNET_JSON_pack_string ("description",
      73              :                                p->description)),
      74              :     GNUNET_JSON_pack_allow_null (
      75              :       GNUNET_JSON_pack_object_incref ("description_i18n",
      76              :                                       (json_t *) p->description_i18n)),
      77              :     GNUNET_JSON_pack_conditional (
      78              :       (0 != p->unit_quantity.integer) ||
      79              :       (0 != p->unit_quantity.fractional),
      80              :       GNUNET_JSON_pack_string ("unit_quantity",
      81              :                                quantity_to_string (&p->unit_quantity))),
      82              :     /* Legacy */
      83              :     GNUNET_JSON_pack_conditional (
      84              :       0 == p->unit_quantity.fractional,
      85              :       GNUNET_JSON_pack_uint64 ("quantity",
      86              :                                p->unit_quantity.integer)),
      87              :     GNUNET_JSON_pack_bool ("prices_are_net",
      88              :                            p->prices_are_net),
      89              :     GNUNET_JSON_pack_allow_null (
      90              :       GNUNET_JSON_pack_string ("unit",
      91              :                                p->unit)),
      92              :     /* Deprecated, use prices! */
      93              :     GNUNET_JSON_pack_allow_null (
      94              :       TALER_JSON_pack_amount ("price",
      95              :                               0 < p->prices_length
      96              :                               ? &p->prices[0]
      97              :                               : NULL)),
      98              :     GNUNET_JSON_pack_array_steal ("prices",
      99              :                                   prices),
     100              :     GNUNET_JSON_pack_allow_null (
     101              :       GNUNET_JSON_pack_string ("image",
     102              :                                p->image)),
     103              :     GNUNET_JSON_pack_allow_null (
     104              :       GNUNET_JSON_pack_array_incref ("taxes",
     105              :                                      (json_t *) p->taxes)),
     106              :     GNUNET_JSON_pack_conditional (
     107              :       ! (GNUNET_TIME_absolute_is_zero (p->delivery_date.abs_time) ||
     108              :          GNUNET_TIME_absolute_is_never (p->delivery_date.abs_time)),
     109              :       GNUNET_JSON_pack_timestamp ("delivery_date",
     110              :                                   p->delivery_date)),
     111              :     GNUNET_JSON_pack_uint64 ("product_money_pot",
     112              :                              p->product_money_pot));
     113              : }
        

Generated by: LCOV version 2.0-1