Make json_write_wrbuf available
[yaz-moved-to-github.git] / include / yaz / json.h
index b56ee4c..5c53d70 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data.
+ * Copyright (C) 1995-2011 Index Data.
  * All rights reserved.
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -93,12 +93,93 @@ struct json_node *json_parser_parse(json_parser_t p, const char *json_str);
 YAZ_EXPORT
 const char *json_parser_get_errmsg(json_parser_t p);
 
+/** \brief returns parser position
+    \param p JSON parser handle
+    \returns number of bytes read from parser
+
+    This function should be called if json_parser_parse returns NULL .
+*/
+YAZ_EXPORT
+size_t json_parser_get_position(json_parser_t p);
+
+/** \brief parses JSON string
+    \param json_str JSON string
+    \param errmsg pointer to error message string
+    \returns JSON tree or NULL if parse error occurred.
+
+    The resulting tree should be removed with a call to json_remove_node.
+    The errmsg may be NULL in which case the error message is not returned.
+*/
+YAZ_EXPORT
+struct json_node *json_parse(const char *json_str, const char **errmsg);
+
+/** \brief parses JSON string
+    \param json_str JSON string
+    \param errmsg pointer to error message string
+    \param pos position of parser stop (probably error)
+    \returns JSON tree or NULL if parse error occurred.
+
+    The resulting tree should be removed with a call to json_remove_node.
+    The errmsg may be NULL in which case the error message is not returned.
+*/
+YAZ_EXPORT
+struct json_node *json_parse2(const char *json_str, const char **errmsg,
+                              size_t *pos);
+
 /** \brief destroys JSON tree node and its children
     \param n JSON node
 */
 YAZ_EXPORT
 void json_remove_node(struct json_node *n);
 
+/** \brief gets object pair value for some name
+    \param n JSON node (presumably object node)
+    \param name name to match
+    \returns node or NULL if not found
+*/
+YAZ_EXPORT
+struct json_node *json_get_object(struct json_node *n, const char *name);
+
+/** \brief gets object value and detaches from existing tree
+    \param n JSON node (presumably object node)
+    \param name name to match
+    \returns node or NULL if not found
+*/
+YAZ_EXPORT
+struct json_node *json_detach_object(struct json_node *n, const char *name);
+
+/** \brief gets array element
+    \param n JSON node (presumably array node)
+    \param idx (0=first, 1=second, ..)
+    \returns node or NULL if not found
+*/
+YAZ_EXPORT
+struct json_node *json_get_elem(struct json_node *n, int idx);
+
+/** \brief returns number of children (array or object)
+    \param n JSON node (presumably array node or object node)
+    \returns number of children
+*/
+YAZ_EXPORT
+int json_count_children(struct json_node *n);
+
+/** \brief appends array to another
+    \param dst original array and resulting array
+    \param src array to be appended to dst
+    \retval -1 not arrays
+    \retval 0 array appended OK
+*/
+YAZ_EXPORT
+int json_append_array(struct json_node *dst, struct json_node *src);
+
+/** \brief configure subst rule
+    \param p JSON parser
+    \param idx (%id)
+    \param n node to be substituted for idx (%idx)
+*/
+YAZ_EXPORT
+void json_parser_subst(json_parser_t p, int idx, struct json_node *n);
+
 /** \brief converts JSON tree to JSON string
     \param node JSON tree
     \param result resulting JSON string buffer
@@ -106,6 +187,13 @@ void json_remove_node(struct json_node *n);
 YAZ_EXPORT
 void json_write_wrbuf(struct json_node *node, WRBUF result);
 
+/** \brief writes JSON text to WRBUF with escaping
+    \param b result
+    \param str input string to be encoded
+*/
+YAZ_EXPORT
+void wrbuf_json_puts(WRBUF b, const char *str);
+
 YAZ_END_CDECL
 
 #endif