Debugger - Stage 2 (artf511247)
[deliverable/titan.core.git] / core / JSON.hh
1 /******************************************************************************
2 * Copyright (c) 2000-2016 Ericsson Telecom AB
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * Balasko, Jeno
10 * Baranyi, Botond
11 *
12 ******************************************************************************/
13 #ifndef JSON_HH_
14 #define JSON_HH_
15
16 #include "Types.h"
17
18 /** Descriptor for JSON encoding/decoding during runtime */
19 struct TTCN_JSONdescriptor_t
20 {
21 /** Encoding only.
22 * true : use the null literal to encode omitted fields in records or sets
23 * example: { "field1" : value1, "field2" : null, "field3" : value3 }
24 * false : skip both the field name and the value if a field is omitted
25 * example: { "field1" : value1, "field3" : value3 }
26 * The decoder will always accept both variants. */
27 boolean omit_as_null;
28
29 /** An alias for the name of the field (in a record, set or union).
30 * Encoding: this alias will appear instead of the name of the field
31 * Decoding: the decoder will look for this alias instead of the field's real name */
32 const char* alias;
33
34 /** If set, the union will be encoded as a JSON value instead of a JSON object
35 * with one name-value pair.
36 * Since the field name is no longer present, the decoder will determine the
37 * selected field based on the type of the value. The first field (in the order
38 * of declaration) that can successfully decode the value will be the selected one. */
39 boolean as_value;
40
41 /** Decoding only.
42 * Fields that don't appear in the JSON code will decode this value instead. */
43 const char* default_value;
44
45 /** If set, encodes unbound fields of records and sets as null and inserts a
46 * meta info field into the JSON object specifying that the field is unbound.
47 * The decoder sets the field to unbound if the meta info field is present and
48 * the field's value in the JSON code is either null or a valid value for that
49 * field.
50 * Example: { "field1" : null, "metainfo field1" : "unbound" }
51 *
52 * Also usable on record of/set of/array types to indicate that an element is
53 * unbound. Unbound elements are encoded as a JSON object containing one
54 * metainfo member. The decoder sets the element to unbound if the object
55 * with the meta information is found.
56 * Example: [ value1, value2, { "metainfo []" : "unbound" }, value3 ] */
57 boolean metainfo_unbound;
58 };
59
60 /** This macro makes sure that coding errors will only be displayed if the silent
61 * flag is not set. */
62 #define JSON_ERROR if(!p_silent) TTCN_EncDec_ErrorContext::error
63
64 // JSON descriptors for base types
65 extern const TTCN_JSONdescriptor_t INTEGER_json_;
66 extern const TTCN_JSONdescriptor_t FLOAT_json_;
67 extern const TTCN_JSONdescriptor_t BOOLEAN_json_;
68 extern const TTCN_JSONdescriptor_t BITSTRING_json_;
69 extern const TTCN_JSONdescriptor_t HEXSTRING_json_;
70 extern const TTCN_JSONdescriptor_t OCTETSTRING_json_;
71 extern const TTCN_JSONdescriptor_t CHARSTRING_json_;
72 extern const TTCN_JSONdescriptor_t UNIVERSAL_CHARSTRING_json_;
73 extern const TTCN_JSONdescriptor_t VERDICTTYPE_json_;
74 extern const TTCN_JSONdescriptor_t GeneralString_json_;
75 extern const TTCN_JSONdescriptor_t NumericString_json_;
76 extern const TTCN_JSONdescriptor_t UTF8String_json_;
77 extern const TTCN_JSONdescriptor_t PrintableString_json_;
78 extern const TTCN_JSONdescriptor_t UniversalString_json_;
79 extern const TTCN_JSONdescriptor_t BMPString_json_;
80 extern const TTCN_JSONdescriptor_t GraphicString_json_;
81 extern const TTCN_JSONdescriptor_t IA5String_json_;
82 extern const TTCN_JSONdescriptor_t TeletexString_json_;
83 extern const TTCN_JSONdescriptor_t VideotexString_json_;
84 extern const TTCN_JSONdescriptor_t VisibleString_json_;
85 extern const TTCN_JSONdescriptor_t ASN_NULL_json_;
86 extern const TTCN_JSONdescriptor_t OBJID_json_;
87 extern const TTCN_JSONdescriptor_t ASN_ROID_json_;
88 extern const TTCN_JSONdescriptor_t ASN_ANY_json_;
89 extern const TTCN_JSONdescriptor_t ENUMERATED_json_;
90
91 /** JSON decoder error codes */
92 enum json_decode_error {
93 /** An unexpected JSON token was extracted. The token might still be valid and
94 * useful for the caller structured type. */
95 JSON_ERROR_INVALID_TOKEN = -1,
96 /** The JSON tokeniser couldn't extract a valid token (JSON_TOKEN_ERROR) or the
97 * format of the data extracted is invalid. In either case, this is a fatal
98 * error and the decoding cannot continue.
99 * @note This error code is always preceeded by a decoding error, if the
100 * caller receives this code, it means that decoding error behavior is (at least
101 * partially) set to warnings. */
102 JSON_ERROR_FATAL = -2
103 };
104
105 /** JSON meta info states during decoding */
106 enum json_metainfo_t {
107 /** The field does not have meta info enabled */
108 JSON_METAINFO_NOT_APPLICABLE,
109 /** Initial state if meta info is enabled for the field */
110 JSON_METAINFO_NONE,
111 /** The field's value is set to null, but no meta info was received for the field yet */
112 JSON_METAINFO_NEEDED,
113 /** Meta info received: the field is unbound */
114 JSON_METAINFO_UNBOUND
115 };
116
117 // JSON decoding error messages
118 #define JSON_DEC_BAD_TOKEN_ERROR "Failed to extract valid token, invalid JSON format%s"
119 #define JSON_DEC_FORMAT_ERROR "Invalid JSON %s format, expecting %s value"
120 #define JSON_DEC_NAME_TOKEN_ERROR "Invalid JSON token, expecting JSON field name"
121 #define JSON_DEC_OBJECT_END_TOKEN_ERROR "Invalid JSON token, expecting JSON name-value pair or object end mark%s"
122 #define JSON_DEC_REC_OF_END_TOKEN_ERROR "Invalid JSON token, expecting JSON value or array end mark%s"
123 #define JSON_DEC_ARRAY_ELEM_TOKEN_ERROR "Invalid JSON token, expecting %d more JSON value%s"
124 #define JSON_DEC_ARRAY_END_TOKEN_ERROR "Invalid JSON token, expecting JSON array end mark%s"
125 #define JSON_DEC_FIELD_TOKEN_ERROR "Invalid JSON token found while decoding field '%s'"
126 #define JSON_DEC_INVALID_NAME_ERROR "Invalid field name '%s'"
127 #define JSON_DEC_MISSING_FIELD_ERROR "No JSON data found for field '%s'"
128 #define JSON_DEC_STATIC_OBJECT_END_TOKEN_ERROR "Invalid JSON token, expecting JSON object end mark%s"
129 #define JSON_DEC_AS_VALUE_ERROR "Extracted JSON %s could not be decoded by any field of the union"
130 #define JSON_DEC_METAINFO_NAME_ERROR "Meta info provided for non-existent field '%s'"
131 #define JSON_DEC_METAINFO_VALUE_ERROR "Invalid meta info for field '%s'"
132 #define JSON_DEC_METAINFO_NOT_APPLICABLE "Meta info not applicable to field '%s'"
133
134 #endif /* JSON_HH_ */
135
This page took 0.03448 seconds and 5 git commands to generate.