/** @file | |
APIs for JSON operations. | |
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> | |
(C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> | |
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef JSON_LIB_H_ | |
#define JSON_LIB_H_ | |
typedef VOID *EDKII_JSON_VALUE; | |
typedef VOID *EDKII_JSON_ARRAY; | |
typedef VOID *EDKII_JSON_OBJECT; | |
/// | |
/// Map to json_int_t in jansson.h | |
/// | |
typedef INT64 EDKII_JSON_INT_T; // #JSON_INTEGER_IS_LONG_LONG is set to 1 | |
// in jansson_Config.h | |
/// | |
/// Map to the definitions in jansson.h | |
/// See below URI for the JSON encoding flags reference. | |
/// https://jansson.readthedocs.io/en/2.13/apiref.html#encoding | |
/// | |
#define EDKII_JSON_MAX_INDENT 0x1F | |
#define EDKII_JSON_INDENT(n) ((n) & EDKII_JSON_MAX_INDENT) | |
#define EDKII_JSON_COMPACT 0x20 | |
#define EDKII_JSON_ENSURE_ASCII 0x40 | |
#define EDKII_JSON_SORT_KEYS 0x80 | |
#define EDKII_JSON_PRESERVE_ORDER 0x100 | |
#define EDKII_JSON_ENCODE_ANY 0x200 | |
#define EDKII_JSON_ESCAPE_SLASH 0x400 | |
#define EDKII_JSON_REAL_PRECISION(n) (((n) & 0x1F) << 11) | |
#define EDKII_JSON_EMBED 0x10000 | |
/// | |
/// Map to the definitions in jansson.h | |
/// See below URI for the JSON decoding flags reference. | |
/// https://jansson.readthedocs.io/en/2.13/apiref.html?highlight=json_loadb#decoding | |
/// | |
#define EDKII_JSON_REJECT_DUPLICATES 0x1 | |
#define EDKII_JSON_DISABLE_EOF_CHECK 0x2 | |
#define EDKII_JSON_DECODE_ANY 0x4 | |
#define EDKII_JSON_DECODE_INT_AS_REAL 0x8 | |
#define EDKII_JSON_ALLOW_NUL 0x10 | |
#define EDKII_JSON_ARRAY_FOREACH(Array, Index, Value) \ | |
for(Index = 0; \ | |
Index < JsonArrayCount(Array) && (Value = JsonArrayGetValue(Array, Index)); \ | |
Index++) | |
#define EDKII_JSON_OBJECT_FOREACH_SAFE(Object, N, Key, Value) \ | |
for (Key = JsonObjectIteratorKey(JsonObjectIterator(Object)), \ | |
N = JsonObjectIteratorNext(Object, JsonObjectKeyToIterator(Key)); \ | |
Key && (Value = JsonObjectIteratorValue(JsonObjectKeyToIterator(Key))); \ | |
Key = JsonObjectIteratorKey(N), \ | |
N = JsonObjectIteratorNext(Object, JsonObjectKeyToIterator(Key))) | |
/// | |
/// Map to the json_error_t in jansson.h | |
/// | |
#define EDKII_JSON_ERROR_TEXT_LENGTH 160 | |
#define EDKII_JSON_ERROR_SOURCE_LENGTH 80 | |
typedef struct { | |
INTN Line; | |
INTN Column; | |
INTN Position; | |
CHAR8 Source[EDKII_JSON_ERROR_SOURCE_LENGTH]; | |
CHAR8 Text[EDKII_JSON_ERROR_TEXT_LENGTH]; | |
} EDKII_JSON_ERROR; | |
/// | |
/// Map to the json_type in jansson.h | |
/// | |
typedef enum { | |
EdkiiJsonTypeObject, | |
EdkiiJsonTypeArray, | |
EdkiiJsonTypeString, | |
EdkiiJsonTypeInteger, | |
EdkiiJsonTypeReal, | |
EdkiiJsonTypeTrue, | |
EdkiiJsonTypeFalse, | |
EdkiiJsonTypeNull | |
} EDKII_JSON_TYPE; | |
/** | |
The function is used to initialize a JSON value which contains a new JSON array, | |
or NULL on error. Initially, the array is empty. | |
The reference count of this value will be set to 1, and caller needs to cleanup the | |
value by calling JsonValueFree(). | |
More details for reference count strategy can refer to the API description for JsonValueFree(). | |
@retval The created JSON value which contains a JSON array or NULL if initial a JSON array | |
is failed. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitArray ( | |
VOID | |
); | |
/** | |
The function is used to initialize a JSON value which contains a new JSON object, | |
or NULL on error. Initially, the object is empty. | |
The reference count of this value will be set to 1, and caller needs to cleanup the | |
value by calling JsonValueFree(). | |
More details for reference count strategy can refer to the API description for JsonValueFree(). | |
@retval The created JSON value which contains a JSON object or NULL if initial a JSON object | |
is failed. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitObject ( | |
VOID | |
); | |
/** | |
The function is used to initialize a JSON value which contains a new JSON string, | |
or NULL on error. | |
The input string must be NULL terminated Ascii format, non-Ascii characters will | |
be processed as an error. Unicode characters can also be represented by Ascii string | |
as the format: \u + 4 hexadecimal digits, like \u3E5A, or \u003F. | |
The reference count of this value will be set to 1, and caller needs to cleanup the | |
value by calling JsonValueFree(). | |
More details for reference count strategy can refer to the API description for JsonValueFree(). | |
@param[in] String The Ascii string to initialize to JSON value | |
@retval The created JSON value which contains a JSON string or NULL. Select a | |
Getter API for a specific encoding format. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitAsciiString ( | |
IN CONST CHAR8 *String | |
); | |
/** | |
The function is used to initialize a JSON value which contains a new JSON string, | |
or NULL on error. | |
The input must be a NULL terminated UCS2 format Unicode string. | |
The reference count of this value will be set to 1, and caller needs to cleanup the | |
value by calling JsonValueFree(). | |
More details for reference count strategy can refer to the API description for JsonValueFree(). | |
@param[in] String The Unicode string to initialize to JSON value | |
@retval The created JSON value which contains a JSON string or NULL. Select a | |
Getter API for a specific encoding format. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitUnicodeString ( | |
IN CHAR16 *String | |
); | |
/** | |
The function is used to initialize a JSON value which contains a new JSON integer, | |
or NULL on error. | |
The reference count of this value will be set to 1, and caller needs to cleanup the | |
value by calling JsonValueFree(). | |
More details for reference count strategy can refer to the API description for JsonValueFree(). | |
@param[in] Value The integer to initialize to JSON value | |
@retval The created JSON value which contains a JSON integer or NULL. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitInteger ( | |
IN INT64 Value | |
); | |
/** | |
The function is used to initialize a JSON value which contains a new JSON boolean, | |
or NULL on error. | |
Boolean JSON value is kept as static value, and no need to do any cleanup work. | |
@param[in] Value The boolean value to initialize. | |
@retval The created JSON value which contains a JSON boolean or NULL. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitBoolean ( | |
IN BOOLEAN Value | |
); | |
/** | |
The function is used to initialize a JSON value which contains a new JSON NULL, | |
or NULL on error. | |
NULL JSON value is kept as static value, and no need to do any cleanup work. | |
@retval The created NULL JSON value. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitNull ( | |
VOID | |
); | |
/** | |
The function is used to initialize a JSON value which contains a TRUE JSON value, | |
or NULL on error. | |
NULL JSON value is kept as static value, and no need to do any cleanup work. | |
@retval The created JSON TRUE value. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitTrue ( | |
VOID | |
); | |
/** | |
The function is used to initialize a JSON value which contains a FALSE JSON value, | |
or NULL on error. | |
NULL JSON value is kept as static value, and no need to do any cleanup work. | |
@retval The created JSON FALSE value. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueInitFalse ( | |
VOID | |
); | |
/** | |
The function is used to decrease the reference count of a JSON value by one, and once | |
this reference count drops to zero, the value is destroyed and it can no longer be used. | |
If this destroyed value is object type or array type, reference counts for all containing | |
JSON values will be decreased by 1. Boolean JSON value and NULL JSON value won't be destroyed | |
since they are static values kept in memory. | |
Reference Count Strategy: BaseJsonLib uses this strategy to track whether a value is still | |
in use or not. When a value is created, it's reference count is set to 1. If a reference to a | |
value is kept for use, its reference count is incremented, and when the value is no longer | |
needed, the reference count is decremented. When the reference count drops to zero, there are | |
no references left, and the value can be destroyed. | |
The given JSON value maybe NULL and not causing any problem. Just output the debug message | |
to inform caller the NULL value is passed in. | |
@param[in] Json The JSON value to be freed. json_decref may return without any | |
changes if Json is NULL. | |
**/ | |
VOID | |
EFIAPI | |
JsonValueFree ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to create a fresh copy of a JSON value, and all child values are deep | |
copied in a recursive fashion. It should be called when this JSON value might be modified | |
in later use, but the original still wants to be used in somewhere else. | |
Reference counts of the returned root JSON value and all child values will be set to 1, and | |
caller needs to cleanup the root value by calling JsonValueFree(). | |
* Note: Since this function performs a copy from bottom to up, too many calls may cause some | |
performance issues, user should avoid unnecessary calls to this function unless it is really | |
needed. | |
@param[in] Json The JSON value to be cloned. | |
@retval Return the cloned JSON value, or NULL on error. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonValueClone ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON value contains a JSON array. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value contains a JSON array. | |
@retval FALSE The JSON value doesn't contain a JSON array. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsArray ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON value contains a JSON object. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value contains a JSON object. | |
@retval FALSE The JSON value doesn't contain a JSON object. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsObject ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON Value contains a string, Ascii or | |
Unicode format is not differentiated. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value contains a JSON string. | |
@retval FALSE The JSON value doesn't contain a JSON string. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsString ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON value contains a JSON integer. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value is contains JSON integer. | |
@retval FALSE The JSON value doesn't contain a JSON integer. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsInteger ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON value contains a JSON number. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value is contains JSON number. | |
@retval FALSE The JSON value doesn't contain a JSON number. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsNumber ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON value contains a JSON boolean. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value contains a JSON boolean. | |
@retval FALSE The JSON value doesn't contain a JSON boolean. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsBoolean ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON value contains a TRUE value. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value contains a TRUE value. | |
@retval FALSE The JSON value doesn't contain a TRUE value. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsTrue ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON value contains a FALSE value. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value contains a FALSE value. | |
@retval FALSE The JSON value doesn't contain a FALSE value. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsFalse ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to return if the provided JSON value contains a JSON NULL. | |
@param[in] Json The provided JSON value. | |
@retval TRUE The JSON value contains a JSON NULL. | |
@retval FALSE The JSON value doesn't contain a JSON NULL. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueIsNull ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to retrieve the associated array in an array type JSON value. | |
Any changes to the returned array will impact the original JSON value. | |
@param[in] Json The provided JSON value. | |
@retval Return the associated array in JSON value or NULL. | |
**/ | |
EDKII_JSON_ARRAY | |
EFIAPI | |
JsonValueGetArray ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to retrieve the associated object in an object type JSON value. | |
Any changes to the returned object will impact the original JSON value. | |
@param[in] Json The provided JSON value. | |
@retval Return the associated object in JSON value or NULL. | |
**/ | |
EDKII_JSON_OBJECT | |
EFIAPI | |
JsonValueGetObject ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to retrieve the associated Ascii string in a string type JSON value. | |
Any changes to the returned string will impact the original JSON value. | |
@param[in] Json The provided JSON value. | |
@retval Return the associated Ascii string in JSON value or NULL. | |
**/ | |
CONST CHAR8 * | |
EFIAPI | |
JsonValueGetAsciiString ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to retrieve the associated Unicode string in a string type JSON value. | |
Caller can do any changes to the returned string without any impact to the original JSON | |
value, and caller needs to free the returned string using FreePool(). | |
@param[in] Json The provided JSON value. | |
@retval Return the associated Unicode string in JSON value or NULL. | |
**/ | |
CHAR16 * | |
EFIAPI | |
JsonValueGetUnicodeString ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to retrieve the associated integer in a integer type JSON value. | |
The input JSON value should not be NULL or contain no JSON Integer, otherwise it will | |
ASSERT() and return 0. | |
@param[in] Json The provided JSON value. | |
@retval Return the associated Integer in JSON value. | |
**/ | |
INT64 | |
EFIAPI | |
JsonValueGetInteger ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to retrieve the associated boolean in a boolean type JSON value. | |
The input JSON value should not be NULL or contain no JSON boolean, otherwise it will | |
ASSERT() and return FALSE. | |
@param[in] Json The provided JSON value. | |
@retval Return the associated value of JSON boolean. | |
**/ | |
BOOLEAN | |
EFIAPI | |
JsonValueGetBoolean ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to retrieve the associated string in a string type JSON value. | |
Any changes to the returned string will impact the original JSON value. | |
@param[in] Json The provided JSON value. | |
@retval Return the associated Ascii string in JSON value or NULL on errors. | |
**/ | |
CONST CHAR8 * | |
EFIAPI | |
JsonValueGetString ( | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to get the number of elements in a JSON object, or 0 if it is NULL or | |
not a JSON object. | |
@param[in] JsonObject The provided JSON object. | |
@retval Return the number of elements in this JSON object or 0. | |
**/ | |
UINTN | |
EFIAPI | |
JsonObjectSize ( | |
IN EDKII_JSON_OBJECT JsonObject | |
); | |
/** | |
The function removes all elements from object. Returns 0 on success and -1 if object is not | |
a JSON object. The reference count of all removed values are decremented. | |
@param[in] JsonObject The provided JSON object. | |
@retval EFI_ABORTED Some error occur and operation aborted. | |
@retval EFI_SUCCESS JSON value has been appended to the end of the JSON array. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
JsonObjectClear ( | |
IN EDKII_JSON_OBJECT JsonObject | |
); | |
/** | |
The function is used to enumerate all keys in a JSON object. | |
Caller should be responsible to free the returned key array reference using | |
FreePool(). But contained keys are read only and must not be modified or freed. | |
@param[in] JsonObj The provided JSON object for enumeration. | |
@param[out] KeyCount The count of keys in this JSON object. | |
@retval Return an array of the enumerated keys in this JSON object or NULL if | |
JsonObj is not an JSON object, key count is zero or on other errors. | |
**/ | |
CHAR8 ** | |
JsonObjectGetKeys ( | |
IN EDKII_JSON_OBJECT JsonObj, | |
OUT UINTN *KeyCount | |
); | |
/** | |
The function is used to get a JSON value corresponding to the input key from a JSON object. | |
It only returns a reference to this value and any changes on this value will impact the | |
original JSON object. If that is not expected, please call JsonValueClone() to clone it to | |
use. | |
Input key must be a valid NULL terminated UTF8 encoded string. NULL will be returned when | |
Key-Value is not found in this JSON object. | |
@param[in] JsonObj The provided JSON object. | |
@param[in] Key The key of the JSON value to be retrieved. | |
@retval Return the corresponding JSON value to key, or NULL on error. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonObjectGetValue ( | |
IN CONST EDKII_JSON_OBJECT JsonObj, | |
IN CONST CHAR8 *Key | |
); | |
/** | |
The function is used to set a JSON value corresponding to the input key from a JSON object, | |
and the reference count of this value will be increased by 1. | |
Input key must be a valid NULL terminated UTF8 encoded string. If there already is a value for | |
this key, this key will be assigned to the new JSON value. The old JSON value will be removed | |
from this object and thus its' reference count will be decreased by 1. | |
More details for reference count strategy can refer to the API description for JsonValueFree(). | |
@param[in] JsonObj The provided JSON object. | |
@param[in] Key The key of the JSON value to be set. | |
@param[in] Json The JSON value to set to this JSON object mapped by key. | |
@retval EFI_ABORTED Some error occur and operation aborted. | |
@retval EFI_SUCCESS The JSON value has been set to this JSON object. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
JsonObjectSetValue ( | |
IN EDKII_JSON_OBJECT JsonObj, | |
IN CONST CHAR8 *Key, | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to get the number of elements in a JSON array. Returns or 0 if JsonArray | |
is NULL or not a JSON array. | |
@param[in] JsonArray The provided JSON array. | |
@retval Return the number of elements in this JSON array or 0. | |
**/ | |
UINTN | |
EFIAPI | |
JsonArrayCount ( | |
IN EDKII_JSON_ARRAY JsonArray | |
); | |
/** | |
The function is used to return the JSON value in the array at position index. The valid range | |
for this index is from 0 to the return value of JsonArrayCount() minus 1. | |
It only returns a reference to this value and any changes on this value will impact the | |
original JSON object. If that is not expected, please call JsonValueClone() to clone it to | |
use. | |
If this array is NULL or not a JSON array, or if index is out of range, NULL will be returned. | |
@param[in] JsonArray The provided JSON Array. | |
@retval Return the JSON value located in the Index position or | |
NULL if JsonArray is not an array or no items in the array. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonArrayGetValue ( | |
IN EDKII_JSON_ARRAY JsonArray, | |
IN UINTN Index | |
); | |
/** | |
The function is used to append a JSON value to the end of the JSON array, and grow the size of | |
array by 1. The reference count of this value will be increased by 1. | |
More details for reference count strategy can refer to the API description for JsonValueFree(). | |
@param[in] JsonArray The provided JSON object. | |
@param[in] Json The JSON value to append. | |
@retval EFI_ABORTED Some error occur and operation aborted. | |
@retval EFI_SUCCESS JSON value has been appended to the end of the JSON array. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
JsonArrayAppendValue ( | |
IN EDKII_JSON_ARRAY JsonArray, | |
IN EDKII_JSON_VALUE Json | |
); | |
/** | |
The function is used to remove a JSON value at position index, shifting the elements after index | |
one position towards the start of the array. The reference count of this value will be decreased | |
by 1. | |
More details for reference count strategy can refer to the API description for JsonValueFree(). | |
@param[in] JsonArray The provided JSON array. | |
@param[in] Index The Index position before removal. | |
@retval EFI_ABORTED Some error occur and operation aborted. | |
@retval EFI_SUCCESS The JSON array has been removed at position index. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
JsonArrayRemoveValue ( | |
IN EDKII_JSON_ARRAY JsonArray, | |
IN UINTN Index | |
); | |
/** | |
Dump JSON to a buffer. | |
@param[in] JsonValue The provided JSON value. | |
@param[in] Flags The Index position before removal. The value | |
could be the combination of below flags. | |
- EDKII_JSON_INDENT(n) | |
- EDKII_JSON_COMPACT | |
- EDKII_JSON_ENSURE_ASCII | |
- EDKII_JSON_SORT_KEYS | |
- EDKII_JSON_PRESERVE_ORDER | |
- EDKII_JSON_ENCODE_ANY | |
- EDKII_JSON_ESCAPE_SLASH | |
- EDKII_JSON_REAL_PRECISION(n) | |
- EDKII_JSON_EMBED | |
See below URI for the JSON encoding flags reference. | |
https://jansson.readthedocs.io/en/2.13/apiref.html#encoding | |
@retval CHAR8 * Dump fail if NULL returned, otherwise the buffer | |
contain JSON payload in ASCII string. The return | |
value must be freed by the caller FreePool(). | |
**/ | |
CHAR8 * | |
EFIAPI | |
JsonDumpString ( | |
IN EDKII_JSON_VALUE JsonValue, | |
IN UINTN Flags | |
); | |
/** | |
Convert a string to JSON object. | |
The function is used to convert a NULL terminated CHAR8 string to a JSON | |
value. Only object and array represented strings can be converted successfully, | |
since they are the only valid root values of a JSON text for UEFI usage. | |
Real number and number with exponent part are not supported by UEFI. | |
Caller needs to cleanup the root value by calling JsonValueFree(). | |
@param[in] String The NULL terminated CHAR8 string to convert. | |
@param[in] Flags Flags for loading JSON string. | |
@param[in] Error Returned error status. | |
@retval Array JSON value or object JSON value, or NULL when any error occurs. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonLoadString ( | |
IN CONST CHAR8 *String, | |
IN UINT64 Flags, | |
IN EDKII_JSON_ERROR *Error | |
); | |
/** | |
Load JSON from a buffer. | |
@param[in] Buffer Buffier to the JSON payload | |
@param[in] BufferLen Length of the buffer | |
@param[in] Flags Flag of loading JSON buffer, the value | |
could be the combination of below flags. | |
- EDKII_JSON_REJECT_DUPLICATES | |
- EDKII_JSON_DISABLE_EOF_CHECK | |
- EDKII_JSON_DECODE_ANY | |
- EDKII_JSON_DECODE_INT_AS_REAL | |
- EDKII_JSON_ALLOW_NUL | |
See below URI for the JSON encoding flags reference. | |
https://jansson.readthedocs.io/en/2.13/apiref.html?highlight=json_loadb#decoding | |
@param[in,out] Error Pointer EDKII_JSON_ERROR structure | |
@retval EDKII_JSON_VALUE NULL means fail to load JSON payload. | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonLoadBuffer ( | |
IN CONST CHAR8 *Buffer, | |
IN UINTN BufferLen, | |
IN UINTN Flags, | |
IN OUT EDKII_JSON_ERROR *Error | |
); | |
/** | |
The reference count is used to track whether a value is still in use or not. | |
When a value is created, it's reference count is set to 1. | |
when the value is no longer needed, the reference count is decremented. | |
When the reference count drops to zero, there are no references left and the | |
value can be destroyed. | |
This function decrement the reference count of EDKII_JSON_VALUE. As soon as | |
a call to json_decref() drops the reference count to zero, the value is | |
destroyed and it can no longer be used. | |
@param[in] JsonValue JSON value | |
**/ | |
VOID | |
EFIAPI | |
JsonDecreaseReference ( | |
IN EDKII_JSON_VALUE JsonValue | |
); | |
/** | |
The reference count is used to track whether a value is still in use or not. | |
When a value is created, it's reference count is set to 1. | |
If a reference to a value is kept (e.g. a value is stored somewhere for later use), | |
its reference count is incremented. | |
This function increment the reference count of json if it's not NULL. | |
Returns EDKII_JSON_VALUE. | |
@param[in] JsonValue JSON value | |
@retval EDKII_JSON_VALUE of itself | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonIncreaseReference ( | |
IN EDKII_JSON_VALUE JsonValue | |
); | |
/** | |
Returns an opaque iterator which can be used to iterate over all key-value pairs | |
in object, or NULL if object is empty | |
@param[in] JsonValue JSON value | |
**/ | |
VOID * | |
EFIAPI | |
JsonObjectIterator ( | |
IN EDKII_JSON_VALUE JsonValue | |
); | |
/** | |
Extract the associated value from iterator. | |
@param[in] Iterator Iterator pointer | |
**/ | |
EDKII_JSON_VALUE | |
EFIAPI | |
JsonObjectIteratorValue ( | |
IN VOID *Iterator | |
); | |
/** | |
Returns an iterator pointing to the next key-value pair in object after iter, | |
or NULL if the whole object has been iterated through. | |
@param[in] JsonValue JSON value | |
@param[in] Iterator Iterator pointer | |
@retval Iterator pointer | |
**/ | |
VOID * | |
EFIAPI | |
JsonObjectIteratorNext ( | |
IN EDKII_JSON_VALUE JsonValue, | |
IN VOID *Iterator | |
); | |
/** | |
Returns the key of iterator pointing | |
@param[in] Iterator Iterator pointer | |
@retval Key | |
**/ | |
CHAR8 * | |
EFIAPI | |
JsonObjectIteratorKey ( | |
IN VOID *Iterator | |
); | |
/** | |
Returns the pointer of iterator by key. | |
@param[in] Key The key of interator pointer. | |
@retval Pointer to interator | |
**/ | |
VOID * | |
EFIAPI | |
JsonObjectKeyToIterator ( | |
IN CHAR8 *Key | |
); | |
/** | |
Returns the json type of this json value | |
@param[in] JsonValue JSON value | |
@retval JSON type returned | |
**/ | |
EDKII_JSON_TYPE | |
EFIAPI | |
JsonGetType ( | |
IN EDKII_JSON_VALUE JsonValue | |
); | |
#endif |