diff options
author | Christian Grothoff <grothoff@gnunet.org> | 2021-07-26 17:25:53 +0200 |
---|---|---|
committer | Christian Grothoff <grothoff@gnunet.org> | 2021-07-26 17:26:09 +0200 |
commit | 91bb5623de1586912d323bf4dfd19c02d2a376d6 (patch) | |
tree | 0ed1cd99d433e776d063b82fde1e0306d70407f2 | |
parent | 8951c9debef86f2c462f99b8ec37681f51fa8dd1 (diff) | |
download | exchange-91bb5623de1586912d323bf4dfd19c02d2a376d6.tar.xz |
JSON: implement taler-specific json pack functions
-rw-r--r-- | src/include/taler_json_lib.h | 111 | ||||
-rw-r--r-- | src/json/Makefile.am | 1 | ||||
-rw-r--r-- | src/json/json_pack.c | 113 |
3 files changed, 225 insertions, 0 deletions
diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h index 1089f5bdf..4ed259b21 100644 --- a/src/include/taler_json_lib.h +++ b/src/include/taler_json_lib.h @@ -37,6 +37,117 @@ "JSON parsing failed at %s:%u: %s (%s)\n", \ __FILE__, __LINE__, error.text, error.source) + +/** + * Generate packer instruction for a JSON field of type + * absolute time. + * The absolute time value is expected to be already rounded. + * + * @param name name of the field to add to the object + * @param at absolute time to pack + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_abs (const char *name, + struct GNUNET_TIME_Absolute at); + + +/** + * Generate packer instruction for a JSON field of type + * absolute time in network byte order. + * The absolute time value is expected to be already rounded. + * + * @param name name of the field to add to the object + * @param at absolute time to pack + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_abs_nbo (const char *name, + struct GNUNET_TIME_AbsoluteNBO at); + + +/** + * Generate packer instruction for a JSON field of type + * relative time. + * The relative time value is expected to be already rounded. + * + * @param name name of the field to add to the object + * @param rt relative time to pack + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_rel (const char *name, + struct GNUNET_TIME_Relative rt); + + +/** + * Generate packer instruction for a JSON field of type + * relative time in network byte order. + * The relative time value is expected to be already rounded. + * + * @param name name of the field to add to the object + * @param rt relative time to pack + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_rel_nbo (const char *name, + struct GNUNET_TIME_RelativeNBO rt); + + +/** + * Generate packer instruction for a JSON field of type + * denomination public key. + * + * @param name name of the field to add to the object + * @param pk public key + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_denomination_public_key (const char *name, + const struct + TALER_DenominationPublicKey *pk); + + +/** + * Generate packer instruction for a JSON field of type + * denomination signature. + * + * @param name name of the field to add to the object + * @param sig signature + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_denomination_signature (const char *name, + const struct + TALER_DenominationSignature *sig); + + +/** + * Generate packer instruction for a JSON field of type + * amount. + * + * @param name name of the field to add to the object + * @param amount valid amount to pack + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_amount (const char *name, + const struct TALER_Amount *amount); + + +/** + * Generate packer instruction for a JSON field of type + * amount. + * + * @param name name of the field to add to the object + * @param amount valid amount to pack + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_amount_nbo (const char *name, + const struct TALER_AmountNBO *amount); + + /** * Convert a TALER amount to a JSON object. * 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 <http://www.gnu.org/licenses/> +*/ +/** + * @file json/json_pack.c + * @brief helper functions for JSON object packing + * @author Christian Grothoff + */ +#include "platform.h" +#include <gnunet/gnunet_util_lib.h> +#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 */ |