Browse Source
This provides a QObject interface for creating QObjects from a JSON expression. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>remotes/github/stable-0.12
3 changed files with 84 additions and 1 deletions
@ -0,0 +1,60 @@ |
|||
/*
|
|||
* QObject JSON integration |
|||
* |
|||
* Copyright IBM, Corp. 2009 |
|||
* |
|||
* Authors: |
|||
* Anthony Liguori <aliguori@us.ibm.com> |
|||
* |
|||
* This work is licensed under the terms of the GNU LGPL, version 2.1 or later. |
|||
* See the COPYING.LIB file in the top-level directory. |
|||
* |
|||
*/ |
|||
|
|||
#include "json-lexer.h" |
|||
#include "json-parser.h" |
|||
#include "json-streamer.h" |
|||
#include "qjson.h" |
|||
|
|||
typedef struct JSONParsingState |
|||
{ |
|||
JSONMessageParser parser; |
|||
va_list *ap; |
|||
QObject *result; |
|||
} JSONParsingState; |
|||
|
|||
static void parse_json(JSONMessageParser *parser, QList *tokens) |
|||
{ |
|||
JSONParsingState *s = container_of(parser, JSONParsingState, parser); |
|||
s->result = json_parser_parse(tokens, s->ap); |
|||
} |
|||
|
|||
QObject *qobject_from_json(const char *string) |
|||
{ |
|||
JSONParsingState state = {}; |
|||
|
|||
json_message_parser_init(&state.parser, parse_json); |
|||
json_message_parser_feed(&state.parser, string, strlen(string)); |
|||
json_message_parser_flush(&state.parser); |
|||
json_message_parser_destroy(&state.parser); |
|||
|
|||
return state.result; |
|||
} |
|||
|
|||
QObject *qobject_from_jsonf(const char *string, ...) |
|||
{ |
|||
JSONParsingState state = {}; |
|||
va_list ap; |
|||
|
|||
va_start(ap, string); |
|||
state.ap = ≈ |
|||
|
|||
json_message_parser_init(&state.parser, parse_json); |
|||
json_message_parser_feed(&state.parser, string, strlen(string)); |
|||
json_message_parser_flush(&state.parser); |
|||
json_message_parser_destroy(&state.parser); |
|||
|
|||
va_end(ap); |
|||
|
|||
return state.result; |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
/*
|
|||
* QObject JSON integration |
|||
* |
|||
* Copyright IBM, Corp. 2009 |
|||
* |
|||
* Authors: |
|||
* Anthony Liguori <aliguori@us.ibm.com> |
|||
* |
|||
* This work is licensed under the terms of the GNU LGPL, version 2.1 or later. |
|||
* See the COPYING.LIB file in the top-level directory. |
|||
* |
|||
*/ |
|||
|
|||
#ifndef QJSON_H |
|||
#define QJSON_H |
|||
|
|||
#include "qobject.h" |
|||
|
|||
QObject *qobject_from_json(const char *string); |
|||
QObject *qobject_from_jsonf(const char *string, ...) |
|||
__attribute__((__format__ (__printf__, 1, 2))); |
|||
|
|||
#endif /* QJSON_H */ |
|||
Loading…
Reference in new issue