damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit 92e1e4b08f359ff7004dc253230ee2cfe926eda9
parent ffc50bb2c1dec6e84ba68dc516e0c3feb2fceefe
Author: William Casarin <jb55@jb55.com>
Date:   Tue, 30 Apr 2024 23:19:05 +0200

nostrdb: api: add ndb_note_json

add a way to write an ndb note as json to a buffer

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mnostrdb/src/nostrdb.c | 48++++++++++++++++++++++++++++++++++++++++++++++++
Mnostrdb/src/nostrdb.h | 3+++
2 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c @@ -4726,6 +4726,54 @@ static int ndb_event_commitment(struct ndb_note *ev, unsigned char *buf, int buf return cur.p - cur.start; } +static int cursor_push_hex(struct cursor *c, unsigned char *bytes, int len) +{ + int i; + unsigned char chr; + if (c->p + (len * 2) >= c->end) + return 0; + + for (i = 0; i < len; i++) { + chr = bytes[i]; + + *(c->p++) = hexchar(chr >> 4); + *(c->p++) = hexchar(chr & 0xF); + } + + return 1; +} + +static int cursor_push_int_str(struct cursor *c, int num) +{ + char timebuf[16] = {0}; + snprintf(timebuf, sizeof(timebuf), "%d", num); + return cursor_push_str(c, timebuf); +} + +int ndb_note_json(struct ndb_note *note, char *buf, int buflen) +{ + struct cursor cur, *c = &cur; + + make_cursor((unsigned char *)buf, (unsigned char*)buf + buflen, &cur); + + return cursor_push_str(c, "{\"id\":\"") && + cursor_push_hex(c, ndb_note_id(note), 32) && + cursor_push_str(c, "\",\"pubkey\":\"") && + cursor_push_hex(c, ndb_note_pubkey(note), 32) && + cursor_push_str(c, "\",\"created_at\":") && + cursor_push_int_str(c, ndb_note_created_at(note)) && + cursor_push_str(c, ",\"kind\":") && + cursor_push_int_str(c, ndb_note_kind(note)) && + cursor_push_str(c, ",\"tags\":") && + cursor_push_json_tags(c, note) && + cursor_push_str(c, ",\"content\":") && + cursor_push_jsonstr(c, ndb_note_content(note)) && + cursor_push_str(c, ",\"sig\":\"") && + cursor_push_hex(c, ndb_note_sig(note), 64) && + cursor_push_c_str(c, "\"}"); + +} + int ndb_calculate_id(struct ndb_note *note, unsigned char *buf, int buflen) { int len; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h @@ -532,6 +532,9 @@ void _ndb_note_set_kind(struct ndb_note *note, uint32_t kind); struct ndb_tags *ndb_note_tags(struct ndb_note *note); int ndb_str_len(struct ndb_str *str); +/// write the note as json to a buffer +int ndb_note_json(struct ndb_note *, char *buf, int buflen); + // TAGS void ndb_tags_iterate_start(struct ndb_note *note, struct ndb_iterator *iter); uint16_t ndb_tags_count(struct ndb_tags *);