public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] RedfishPkg/JsonLib: Add more JsonLib functions
@ 2021-07-28  4:56 Abner Chang
  2021-08-08 12:58 ` Nickle Wang
  0 siblings, 1 reply; 2+ messages in thread
From: Abner Chang @ 2021-07-28  4:56 UTC (permalink / raw)
  To: devel; +Cc: Nickle Wang

Signed-off-by: Abner Chang <abner.chang@hpe.com>
Cc: Nickle Wang <nickle.wang@hpe.com>
---
 RedfishPkg/Include/Library/JsonLib.h | 127 ++++++++++++++++++++--
 RedfishPkg/Library/JsonLib/JsonLib.c | 156 ++++++++++++++++++++++++---
 2 files changed, 261 insertions(+), 22 deletions(-)

diff --git a/RedfishPkg/Include/Library/JsonLib.h b/RedfishPkg/Include/Library/JsonLib.h
index 8a30c5250b..83959dd52a 100644
--- a/RedfishPkg/Include/Library/JsonLib.h
+++ b/RedfishPkg/Include/Library/JsonLib.h
@@ -2,7 +2,7 @@
   APIs for JSON operations.
 
   Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
- (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
 
     SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -53,6 +53,13 @@ typedef    INT64   EDKII_JSON_INT_T; // #JSON_INTEGER_IS_LONG_LONG is set to 1
     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
 ///
@@ -177,12 +184,12 @@ JsonValueInitUnicodeString (
 
   @param[in]   Value       The integer to initialize to JSON value
 
-  @retval      The created JSON value which contains a JSON number or NULL.
+  @retval      The created JSON value which contains a JSON integer or NULL.
 
 **/
 EDKII_JSON_VALUE
 EFIAPI
-JsonValueInitNumber (
+JsonValueInitInteger (
   IN    INT64    Value
   );
 
@@ -218,6 +225,36 @@ 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.
@@ -313,6 +350,21 @@ 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.
 
@@ -343,6 +395,36 @@ 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.
 
@@ -424,19 +506,19 @@ JsonValueGetUnicodeString (
   );
 
 /**
-  The function is used to retrieve the associated integer in a number type JSON value.
+  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 number, otherwise it will
+  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 number in JSON value.
+  @retval      Return the associated Integer in JSON value.
 
 **/
 INT64
 EFIAPI
-JsonValueGetNumber (
+JsonValueGetInteger (
   IN    EDKII_JSON_VALUE    Json
   );
 
@@ -675,6 +757,8 @@ JsonDumpString (
   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.
 
@@ -682,7 +766,9 @@ JsonDumpString (
 EDKII_JSON_VALUE
 EFIAPI
 JsonLoadString (
-  IN   CONST CHAR8*    String
+  IN    CONST CHAR8*     String,
+  IN    UINT64           Flags,
+  IN    EDKII_JSON_ERROR *Error
   );
 
 /**
@@ -781,11 +867,36 @@ JsonObjectIteratorValue (
   @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
 
diff --git a/RedfishPkg/Library/JsonLib/JsonLib.c b/RedfishPkg/Library/JsonLib/JsonLib.c
index c305a3767f..24e78c9d44 100644
--- a/RedfishPkg/Library/JsonLib/JsonLib.c
+++ b/RedfishPkg/Library/JsonLib/JsonLib.c
@@ -5,7 +5,7 @@
   https://jansson.readthedocs.io/en/2.13/apiref.html
 
   Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
- (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
 
     SPDX-License-Identifier: BSD-2-Clause-Patent
 **/
@@ -154,12 +154,12 @@ JsonValueInitUnicodeString (
 
   @param[in]   Value       The integer to initialize to JSON value
 
-  @retval      The created JSON value which contains a JSON number or NULL.
+  @retval      The created JSON value which contains a JSON integer or NULL.
 
 **/
 EDKII_JSON_VALUE
 EFIAPI
-JsonValueInitNumber (
+JsonValueInitInteger (
   IN    INT64    Value
   )
 {
@@ -186,6 +186,42 @@ JsonValueInitBoolean (
   return (EDKII_JSON_VALUE)json_boolean (Value);
 }
 
+/**
+  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
+  )
+{
+  return (EDKII_JSON_VALUE)json_true();
+}
+
+/**
+  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
+  )
+{
+  return (EDKII_JSON_VALUE)json_false();
+}
+
 /**
   The function is used to initialize a JSON value which contains a new JSON NULL,
   or NULL on error.
@@ -314,6 +350,24 @@ JsonValueIsString (
   return json_is_string ((json_t *) 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
+  )
+{
+  return json_is_integer ((json_t *) Json);
+}
+
 /**
   The function is used to return if the provided JSON value contains a JSON number.
 
@@ -329,7 +383,7 @@ JsonValueIsNumber (
   IN    EDKII_JSON_VALUE    Json
   )
 {
-  return json_is_integer ((json_t *) Json);
+  return json_is_number ((json_t *) Json);
 }
 
 /**
@@ -350,6 +404,47 @@ JsonValueIsBoolean (
   return json_is_boolean ((json_t *) 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
+  )
+{
+  if (json_is_true ((json_t *)Json)) {
+    return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+  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
+  )
+{
+  if (json_is_false ((json_t *)Json)) {
+    return TRUE;
+  }
+  return FALSE;
+}
 /**
   The function is used to return if the provided JSON value contains a JSON NULL.
 
@@ -485,24 +580,24 @@ JsonValueGetUnicodeString (
 }
 
 /**
-  The function is used to retrieve the associated integer in a number type JSON value.
+  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 number, otherwise it will
+  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 number in JSON value.
+  @retval      Return the associated integer in JSON value.
 
 **/
 INT64
 EFIAPI
-JsonValueGetNumber (
+JsonValueGetInteger (
   IN    EDKII_JSON_VALUE    Json
   )
 {
-  ASSERT (Json != NULL && JsonValueIsNumber (Json));
-  if (Json == NULL || !JsonValueIsNumber (Json)) {
+  ASSERT (Json != NULL && JsonValueIsInteger (Json));
+  if (Json == NULL || !JsonValueIsInteger (Json)) {
     return 0;
   }
 
@@ -830,6 +925,8 @@ JsonDumpString (
   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.
 
@@ -837,12 +934,12 @@ JsonDumpString (
 EDKII_JSON_VALUE
 EFIAPI
 JsonLoadString (
-  IN    CONST CHAR8*    String
+  IN    CONST CHAR8*     String,
+  IN    UINT64           Flags,
+  IN    EDKII_JSON_ERROR *Error
   )
 {
-  json_error_t    JsonError;
-
-  return (EDKII_JSON_VALUE) json_loads ((const char *)String, 0, &JsonError);
+  return (EDKII_JSON_VALUE) json_loads ((const char *)String, Flags, (json_error_t *)Error);
 }
 
 /**
@@ -959,6 +1056,7 @@ JsonObjectIteratorValue (
   @retval      Iterator pointer
 **/
 VOID *
+EFIAPI
 JsonObjectIteratorNext (
   IN EDKII_JSON_VALUE JsonValue,
   IN VOID             *Iterator
@@ -967,6 +1065,36 @@ JsonObjectIteratorNext (
   return json_object_iter_next(JsonValue, Iterator);
 }
 
+/**
+  Returns the key of iterator pointing
+
+  @param[in]   Iterator   Iterator pointer
+  @retval      Key
+**/
+CHAR8 *
+EFIAPI
+JsonObjectIteratorKey (
+  IN VOID *Iterator
+)
+{
+  return json_object_iter_key(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
+)
+{
+  return json_object_key_to_iter(Key);
+}
+
 /**
   Returns the json type of this json value.
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] RedfishPkg/JsonLib: Add more JsonLib functions
  2021-07-28  4:56 [PATCH] RedfishPkg/JsonLib: Add more JsonLib functions Abner Chang
@ 2021-08-08 12:58 ` Nickle Wang
  0 siblings, 0 replies; 2+ messages in thread
From: Nickle Wang @ 2021-08-08 12:58 UTC (permalink / raw)
  To: Chang, Abner (HPS SW/FW Technologist), devel@edk2.groups.io

Reviewed-by: Nickle Wang <nickle.wang@hpe.com>

I have question about copyright year format.


- (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
 
This should be "2020-2021", right?



Thanks,
Nickle

-----Original Message-----
From: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com> 
Sent: Wednesday, July 28, 2021 12:57 PM
To: devel@edk2.groups.io
Cc: Wang, Nickle (HPS SW) <nickle.wang@hpe.com>
Subject: [PATCH] RedfishPkg/JsonLib: Add more JsonLib functions

Signed-off-by: Abner Chang <abner.chang@hpe.com>
Cc: Nickle Wang <nickle.wang@hpe.com>
---
 RedfishPkg/Include/Library/JsonLib.h | 127 ++++++++++++++++++++--  RedfishPkg/Library/JsonLib/JsonLib.c | 156 ++++++++++++++++++++++++---
 2 files changed, 261 insertions(+), 22 deletions(-)

diff --git a/RedfishPkg/Include/Library/JsonLib.h b/RedfishPkg/Include/Library/JsonLib.h
index 8a30c5250b..83959dd52a 100644
--- a/RedfishPkg/Include/Library/JsonLib.h
+++ b/RedfishPkg/Include/Library/JsonLib.h
@@ -2,7 +2,7 @@
   APIs for JSON operations.
 
   Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
- (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
 
     SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -53,6 +53,13 @@ typedef    INT64   EDKII_JSON_INT_T; // #JSON_INTEGER_IS_LONG_LONG is set to 1
     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  /// @@ -177,12 +184,12 @@ JsonValueInitUnicodeString (
 
   @param[in]   Value       The integer to initialize to JSON value
 
-  @retval      The created JSON value which contains a JSON number or NULL.
+  @retval      The created JSON value which contains a JSON integer or NULL.
 
 **/
 EDKII_JSON_VALUE
 EFIAPI
-JsonValueInitNumber (
+JsonValueInitInteger (
   IN    INT64    Value
   );
 
@@ -218,6 +225,36 @@ 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.
@@ -313,6 +350,21 @@ 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.
 
@@ -343,6 +395,36 @@ 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.
 
@@ -424,19 +506,19 @@ JsonValueGetUnicodeString (
   );
 
 /**
-  The function is used to retrieve the associated integer in a number type JSON value.
+  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 number, otherwise it will
+  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 number in JSON value.
+  @retval      Return the associated Integer in JSON value.
 
 **/
 INT64
 EFIAPI
-JsonValueGetNumber (
+JsonValueGetInteger (
   IN    EDKII_JSON_VALUE    Json
   );
 
@@ -675,6 +757,8 @@ JsonDumpString (
   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.
 
@@ -682,7 +766,9 @@ JsonDumpString (
 EDKII_JSON_VALUE
 EFIAPI
 JsonLoadString (
-  IN   CONST CHAR8*    String
+  IN    CONST CHAR8*     String,
+  IN    UINT64           Flags,
+  IN    EDKII_JSON_ERROR *Error
   );
 
 /**
@@ -781,11 +867,36 @@ JsonObjectIteratorValue (
   @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
 
diff --git a/RedfishPkg/Library/JsonLib/JsonLib.c b/RedfishPkg/Library/JsonLib/JsonLib.c
index c305a3767f..24e78c9d44 100644
--- a/RedfishPkg/Library/JsonLib/JsonLib.c
+++ b/RedfishPkg/Library/JsonLib/JsonLib.c
@@ -5,7 +5,7 @@
   https://jansson.readthedocs.io/en/2.13/apiref.html
 
   Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
- (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
 
     SPDX-License-Identifier: BSD-2-Clause-Patent  **/ @@ -154,12 +154,12 @@ JsonValueInitUnicodeString (
 
   @param[in]   Value       The integer to initialize to JSON value
 
-  @retval      The created JSON value which contains a JSON number or NULL.
+  @retval      The created JSON value which contains a JSON integer or NULL.
 
 **/
 EDKII_JSON_VALUE
 EFIAPI
-JsonValueInitNumber (
+JsonValueInitInteger (
   IN    INT64    Value
   )
 {
@@ -186,6 +186,42 @@ JsonValueInitBoolean (
   return (EDKII_JSON_VALUE)json_boolean (Value);  }
 
+/**
+  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
+  )
+{
+  return (EDKII_JSON_VALUE)json_true(); }
+
+/**
+  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
+  )
+{
+  return (EDKII_JSON_VALUE)json_false(); }
+
 /**
   The function is used to initialize a JSON value which contains a new JSON NULL,
   or NULL on error.
@@ -314,6 +350,24 @@ JsonValueIsString (
   return json_is_string ((json_t *) 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
+  )
+{
+  return json_is_integer ((json_t *) Json); }
+
 /**
   The function is used to return if the provided JSON value contains a JSON number.
 
@@ -329,7 +383,7 @@ JsonValueIsNumber (
   IN    EDKII_JSON_VALUE    Json
   )
 {
-  return json_is_integer ((json_t *) Json);
+  return json_is_number ((json_t *) Json);
 }
 
 /**
@@ -350,6 +404,47 @@ JsonValueIsBoolean (
   return json_is_boolean ((json_t *) 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
+  )
+{
+  if (json_is_true ((json_t *)Json)) {
+    return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+  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
+  )
+{
+  if (json_is_false ((json_t *)Json)) {
+    return TRUE;
+  }
+  return FALSE;
+}
 /**
   The function is used to return if the provided JSON value contains a JSON NULL.
 
@@ -485,24 +580,24 @@ JsonValueGetUnicodeString (  }
 
 /**
-  The function is used to retrieve the associated integer in a number type JSON value.
+  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 number, otherwise it will
+  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 number in JSON value.
+  @retval      Return the associated integer in JSON value.
 
 **/
 INT64
 EFIAPI
-JsonValueGetNumber (
+JsonValueGetInteger (
   IN    EDKII_JSON_VALUE    Json
   )
 {
-  ASSERT (Json != NULL && JsonValueIsNumber (Json));
-  if (Json == NULL || !JsonValueIsNumber (Json)) {
+  ASSERT (Json != NULL && JsonValueIsInteger (Json));  if (Json == NULL 
+ || !JsonValueIsInteger (Json)) {
     return 0;
   }
 
@@ -830,6 +925,8 @@ JsonDumpString (
   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.
 
@@ -837,12 +934,12 @@ JsonDumpString (
 EDKII_JSON_VALUE
 EFIAPI
 JsonLoadString (
-  IN    CONST CHAR8*    String
+  IN    CONST CHAR8*     String,
+  IN    UINT64           Flags,
+  IN    EDKII_JSON_ERROR *Error
   )
 {
-  json_error_t    JsonError;
-
-  return (EDKII_JSON_VALUE) json_loads ((const char *)String, 0, &JsonError);
+  return (EDKII_JSON_VALUE) json_loads ((const char *)String, Flags, 
+ (json_error_t *)Error);
 }
 
 /**
@@ -959,6 +1056,7 @@ JsonObjectIteratorValue (
   @retval      Iterator pointer
 **/
 VOID *
+EFIAPI
 JsonObjectIteratorNext (
   IN EDKII_JSON_VALUE JsonValue,
   IN VOID             *Iterator
@@ -967,6 +1065,36 @@ JsonObjectIteratorNext (
   return json_object_iter_next(JsonValue, Iterator);  }
 
+/**
+  Returns the key of iterator pointing
+
+  @param[in]   Iterator   Iterator pointer
+  @retval      Key
+**/
+CHAR8 *
+EFIAPI
+JsonObjectIteratorKey (
+  IN VOID *Iterator
+)
+{
+  return json_object_iter_key(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
+)
+{
+  return json_object_key_to_iter(Key);
+}
+
 /**
   Returns the json type of this json value.
 
--
2.17.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-08-08 12:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-28  4:56 [PATCH] RedfishPkg/JsonLib: Add more JsonLib functions Abner Chang
2021-08-08 12:58 ` Nickle Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox