|
21 | 21 |
|
22 | 22 |
|
23 | 23 | #include "./scope_config.h" |
24 | | - |
| 24 | +#include "./exception/illegal_argument_exception.h" |
25 | 25 | namespace casbin { |
26 | 26 |
|
27 | 27 | Scope InitializeScope() { |
@@ -194,6 +194,38 @@ void PushObjectPropToObject(Scope scope, std::string obj, std::string identifier |
194 | 194 | duk_eval_string_noresult(scope, (obj+"len += 1;").c_str()); |
195 | 195 | } |
196 | 196 |
|
| 197 | +void PushObjectPropFromJson(Scope scope, nlohmann::json& j, std::string objName) { |
| 198 | + if (j.is_null()) { |
| 199 | + return; |
| 200 | + } |
| 201 | + |
| 202 | + for (auto& curJson: j.items()) { |
| 203 | + auto key = curJson.key(); |
| 204 | + auto value = curJson.value(); |
| 205 | + if (value.is_object()) { |
| 206 | + |
| 207 | + auto nextJsonName = key + "__"; |
| 208 | + PushObject(scope, nextJsonName); |
| 209 | + |
| 210 | + PushObjectPropFromJson(scope, value, nextJsonName); |
| 211 | + |
| 212 | + duk_get_global_string(scope, objName.c_str()); |
| 213 | + duk_get_global_string(scope, nextJsonName.c_str()); |
| 214 | + duk_put_prop_string(scope, -2, key.c_str()); |
| 215 | + } else if (value.is_number_float()) { |
| 216 | + PushDoublePropToObject(scope, objName, value, key); |
| 217 | + } else if (value.is_number_integer()) { |
| 218 | + PushIntPropToObject(scope, objName, value, key); |
| 219 | + } else if (value.is_string()) { |
| 220 | + PushStringPropToObject(scope, objName, value, key); |
| 221 | + } else if (value.is_boolean()) { |
| 222 | + PushBooleanPropToObject(scope, objName, value, key); |
| 223 | + } else { |
| 224 | + throw IllegalArgumentException("Unsupported json value type"); |
| 225 | + } |
| 226 | + } |
| 227 | +} |
| 228 | + |
197 | 229 | Type CheckType(Scope scope){ |
198 | 230 | if(duk_is_boolean(scope, -1)) |
199 | 231 | return Type::Bool; |
|
0 commit comments