From 91bb5623de1586912d323bf4dfd19c02d2a376d6 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 26 Jul 2021 17:25:53 +0200 Subject: JSON: implement taler-specific json pack functions --- src/json/Makefile.am | 1 + src/json/json_pack.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 src/json/json_pack.c (limited to 'src/json') diff --git a/src/json/Makefile.am b/src/json/Makefile.am index 71175b2b3..cad3b2486 100644 --- a/src/json/Makefile.am +++ b/src/json/Makefile.am @@ -13,6 +13,7 @@ libtalerjson_la_SOURCES = \ i18n.c \ json.c \ json_helper.c \ + json_pack.c \ json_wire.c libtalerjson_la_LDFLAGS = \ -version-info 1:0:1 \ diff --git a/src/json/json_pack.c b/src/json/json_pack.c new file mode 100644 index 000000000..836f03911 --- /dev/null +++ b/src/json/json_pack.c @@ -0,0 +1,113 @@ +/* + This file is part of TALER + Copyright (C) 2021 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see +*/ +/** + * @file json/json_pack.c + * @brief helper functions for JSON object packing + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include "taler_util.h" +#include "taler_json_lib.h" + + +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_abs (const char *name, + struct GNUNET_TIME_Absolute at) +{ + GNUNET_assert (GNUNET_OK == + GNUNET_TIME_round_abs (&at)); + return GNUNET_JSON_pack_time_abs (name, + at); +} + + +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_abs_nbo (const char *name, + struct GNUNET_TIME_AbsoluteNBO at) +{ + return TALER_JSON_pack_time_abs (name, + GNUNET_TIME_absolute_ntoh (at)); +} + + +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_rel (const char *name, + struct GNUNET_TIME_Relative rt) +{ + GNUNET_assert (GNUNET_OK == + GNUNET_TIME_round_rel (&rt)); + return GNUNET_JSON_pack_time_rel (name, + rt); +} + + +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_rel_nbo (const char *name, + struct GNUNET_TIME_RelativeNBO rt) +{ + return TALER_JSON_pack_time_rel (name, + GNUNET_TIME_relative_ntoh (rt)); +} + + +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_denomination_public_key (const char *name, + const struct + TALER_DenominationPublicKey *pk) +{ + return GNUNET_JSON_pack_rsa_public_key (name, + pk->rsa_public_key); +} + + +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_denomination_signature (const char *name, + const struct + TALER_DenominationSignature *sig) +{ + return GNUNET_JSON_pack_rsa_signature (name, + sig->rsa_signature); +} + + +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_amount (const char *name, + const struct TALER_Amount *amount) +{ + json_t *json; + + json = TALER_JSON_from_amount (amount); + GNUNET_assert (NULL != json); + return GNUNET_JSON_pack_object_steal (name, + json); +} + + +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_amount_nbo (const char *name, + const struct TALER_AmountNBO *amount) +{ + json_t *json; + + json = TALER_JSON_from_amount_nbo (amount); + GNUNET_assert (NULL != json); + return GNUNET_JSON_pack_object_steal (name, + json); +} + + +/* End of json/json_pack.c */ -- cgit v1.2.3