| // Copyright 2026 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #ifndef THIRD_PARTY_CREDENTIO_UTILS_CRJSON_UTILS_H_ |
| #define THIRD_PARTY_CREDENTIO_UTILS_CRJSON_UTILS_H_ |
| |
| #include <cstdint> |
| |
| #include "absl/functional/function_ref.h" |
| #include "absl/strings/string_view.h" |
| #include "cbor/cbor.h" |
| #include "nlohmann/json_fwd.hpp" |
| |
| namespace credentio { |
| |
| // Record a string value from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordString(const cbor::MapView& map, absl::string_view key, |
| bool required, nlohmann::json& json); |
| |
| // Record a byte string value from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordByteString(const cbor::MapView& map, uint32_t key, bool required, |
| nlohmann::json& json); |
| |
| // Record a byte string value from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordByteString(const cbor::MapView& map, absl::string_view key, |
| bool required, nlohmann::json& json); |
| |
| // Record a byte string value from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordUint64(const cbor::MapView& map, absl::string_view key, |
| bool required, nlohmann::json& json); |
| |
| // Record an int64 value from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordInt64(const cbor::MapView& map, absl::string_view key, bool required, |
| nlohmann::json& json); |
| |
| // Record a bool value from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordBool(const cbor::MapView& map, absl::string_view key, bool required, |
| nlohmann::json& json); |
| |
| // A function that processes an array element. |
| // |
| // The function is called for each element in the array and the index of the |
| // element in the array. The function should return a JSON object that |
| // represents the element. |
| using ArrayProcessor = absl::FunctionRef<nlohmann::json( |
| uint32_t index, const cbor::ItemView& item)>; |
| |
| // A function that processes a map. |
| // |
| // The function is called for each map in the array of maps and should return a |
| // JSON object that represents the map. |
| using MapProcessor = |
| absl::FunctionRef<nlohmann::json(const cbor::MapView& map)>; |
| |
| // Record an array from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordArray(const cbor::MapView& map, absl::string_view key, bool required, |
| ArrayProcessor processor, nlohmann::json& json); |
| |
| // Record an array of maps from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordArrayOfMaps(const cbor::MapView& map, absl::string_view key, |
| bool required, MapProcessor processor, |
| nlohmann::json& json); |
| |
| // Record a map from the map to the JSON. |
| // |
| // If `required` is true, the key must be present in the map, otherwise the |
| // function will add the key to the `_missing` array in the JSON. |
| // |
| // Returns true if the key was present in the map, false otherwise. |
| bool RecordMap(const cbor::MapView& map, absl::string_view key, bool required, |
| MapProcessor processor, nlohmann::json& json); |
| |
| } // namespace credentio |
| |
| #endif // THIRD_PARTY_CREDENTIO_UTILS_CRJSON_UTILS_H_ |