1 /*- 2 * Copyright (c) 2010,2011 Alistair Crooks <agc@NetBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 #ifndef MJ_H_ 26 #define MJ_H_ 20110607 27 28 enum { 29 MJ_NULL = 1, 30 MJ_FALSE = 2, 31 MJ_TRUE = 3, 32 MJ_NUMBER = 4, 33 MJ_STRING = 5, 34 MJ_ARRAY = 6, 35 MJ_OBJECT = 7, 36 37 MJ_LAST = MJ_OBJECT, 38 39 MJ_HUMAN = 0, /* human readable, not encoded */ 40 MJ_JSON_ENCODE = 1 /* encoded JSON */ 41 }; 42 43 /* a minimalist JSON node */ 44 typedef struct mj_t { 45 unsigned type; /* type of JSON node */ 46 unsigned c; /* # of chars */ 47 unsigned size; /* size of array */ 48 union { 49 struct mj_t *v; /* sub-objects */ 50 char *s; /* string value */ 51 } value; 52 } mj_t; 53 54 /* creation and deletion */ 55 int mj_create(mj_t */*atom*/, const char */*type*/, .../*value*/); 56 int mj_parse(mj_t */*atom*/, const char */*s*/, int */*from*/, 57 int */*to*/, int */*token*/); 58 int mj_append(mj_t */*atom*/, const char */*type*/, .../*value*/); 59 int mj_append_field(mj_t */*atom*/, const char */*name*/, const char */*type*/, 60 .../*value*/); 61 int mj_deepcopy(mj_t */*dst*/, mj_t */*src*/); 62 void mj_delete(mj_t */*atom*/); 63 64 /* JSON object access */ 65 int mj_arraycount(mj_t */*atom*/); 66 int mj_object_find(mj_t */*atom*/, const char */*name*/, 67 const unsigned /*from*/, const unsigned /*incr*/); 68 mj_t *mj_get_atom(mj_t */*atom*/, ...); 69 int mj_lint(mj_t */*atom*/); 70 71 /* textual output */ 72 int mj_snprint(char */*buf*/, size_t /*size*/, mj_t */*atom*/, int /*encoded*/); 73 int mj_asprint(char **/*bufp*/, mj_t */*atom*/, int /*encoded*/); 74 int mj_string_size(mj_t */*atom*/); 75 int mj_pretty(mj_t */*atom*/, void */*fp*/, unsigned /*depth*/, 76 const char */*trailer*/); 77 const char *mj_string_rep(mj_t */*atom*/); 78 79 #endif 80