common: Add some more JSON primitives

We were missing the `short_channel_id_dir` helpers.
This commit is contained in:
Christian Decker 2024-07-25 13:11:57 +02:00 committed by Rusty Russell
parent 8e9f71ff85
commit eae378c9d2
5 changed files with 40 additions and 21 deletions

View file

@ -5,7 +5,6 @@
#include <bitcoin/privkey.h>
#include <bitcoin/psbt.h>
#include <bitcoin/pubkey.h>
#include <bitcoin/short_channel_id.h>
#include <bitcoin/tx.h>
#include <ccan/json_escape/json_escape.h>
#include <ccan/mem/mem.h>
@ -574,6 +573,25 @@ bool json_to_short_channel_id(const char *buffer, const jsmntok_t *tok,
tok->end - tok->start, scid));
}
bool json_to_short_channel_id_dir(const char *buffer, const jsmntok_t *tok,
struct short_channel_id_dir *scidd)
{
jsmntok_t scidtok, numtok;
u32 dir;
if (!split_tok(buffer, tok, '/', &scidtok, &numtok))
return false;
if (!json_to_short_channel_id(buffer, &scidtok, &scidd->scid))
return false;
if (!json_to_u32(buffer, &numtok, &dir) || (dir > 1))
return false;
scidd->dir = dir;
return true;
}
bool json_to_txid(const char *buffer, const jsmntok_t *tok,
struct bitcoin_txid *txid)
{

View file

@ -1,6 +1,7 @@
#ifndef LIGHTNING_COMMON_JSON_PARSE_H
#define LIGHTNING_COMMON_JSON_PARSE_H
#include "config.h"
#include <bitcoin/short_channel_id.h>
#include <ccan/crypto/sha256/sha256.h>
#include <common/coin_mvt.h>
#include <common/errcode.h>
@ -110,6 +111,10 @@ bool json_to_outpoint(const char *buffer, const jsmntok_t *tok,
bool json_to_channel_id(const char *buffer, const jsmntok_t *tok,
struct channel_id *cid);
/* Extract a channel id + dir from this */
bool json_to_short_channel_id_dir(const char *buffer, const jsmntok_t *tok,
struct short_channel_id_dir *scidd);
/* Extract a coin movement 'tag' from this */
bool json_to_coin_mvt_tag(const char *buffer, const jsmntok_t *tok,
enum mvt_tag *tag);

View file

@ -3,7 +3,6 @@
#include <bitcoin/preimage.h>
#include <bitcoin/privkey.h>
#include <bitcoin/psbt.h>
#include <bitcoin/short_channel_id.h>
#include <bitcoin/signature.h>
#include <bitcoin/tx.h>
#include <ccan/io/io.h>
@ -485,6 +484,16 @@ void json_add_short_channel_id(struct json_stream *response,
short_channel_id_outnum(scid));
}
void json_add_short_channel_id_dir(struct json_stream *response,
const char *fieldname,
struct short_channel_id_dir scidd)
{
json_add_str_fmt(response, fieldname, "%dx%dx%d/%d",
short_channel_id_blocknum(scidd.scid),
short_channel_id_txnum(scidd.scid),
short_channel_id_outnum(scidd.scid), scidd.dir);
}
static void json_add_address_fields(struct json_stream *response,
const struct wireaddr *addr,
const char *typefield)

View file

@ -5,6 +5,7 @@
#define LIGHTNING_COMMON_JSON_STREAM_H
#include "config.h"
#include <bitcoin/short_channel_id.h>
#define JSMN_STRICT 1
# include <external/jsmn/jsmn.h>
@ -313,6 +314,11 @@ void json_add_short_channel_id(struct json_stream *response,
const char *fieldname,
struct short_channel_id id);
/* '"fieldname" : "1234:5:6/1"' */
void json_add_short_channel_id_dir(struct json_stream *response,
const char *fieldname,
struct short_channel_id_dir idd);
/* JSON serialize a network address for a node */
void json_add_address(struct json_stream *response, const char *fieldname,
const struct wireaddr *addr);

View file

@ -350,25 +350,6 @@ static struct command_result *currency_done(struct command *cmd,
return maybe_add_path(cmd, offinfo);
}
static bool json_to_short_channel_id_dir(const char *buffer, const jsmntok_t *tok,
struct short_channel_id_dir *scidd)
{
jsmntok_t scidtok, numtok;
u32 dir;
if (!split_tok(buffer, tok, '/', &scidtok, &numtok))
return false;
if (!json_to_short_channel_id(buffer, &scidtok, &scidd->scid))
return false;
if (!json_to_u32(buffer, &numtok, &dir) || (dir > 1))
return false;
scidd->dir = dir;
return true;
}
static bool json_to_sciddir_or_pubkey(const char *buffer, const jsmntok_t *tok,
struct sciddir_or_pubkey *sciddir_or_pubkey)
{