Moved JSON functions to built-in to_json, parse_json, validate_json

This commit is contained in:
Juan Linietsky 2017-01-08 22:40:00 -03:00
parent fdc3380cf6
commit 62273e51a2
10 changed files with 112 additions and 49 deletions

View file

@ -35,6 +35,7 @@
#include "os/os.h"
#include "variant_parser.h"
#include "io/marshalls.h"
#include "io/json.h"
const char *GDFunctions::get_func_name(Function p_func) {
@ -103,6 +104,9 @@ const char *GDFunctions::get_func_name(Function p_func) {
"load",
"inst2dict",
"dict2inst",
"validate_json",
"parse_json",
"to_json",
"hash",
"Color8",
"print_stack",
@ -846,6 +850,7 @@ void GDFunctions::call(Function p_func,const Variant **p_args,int p_arg_count,Va
if (p_args[0]->get_type()!=Variant::STRING) {
r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
r_error.argument=0;
r_error.expected=Variant::STRING;
r_ret=Variant();
} else {
r_ret=ResourceLoader::load(*p_args[0]);
@ -1024,6 +1029,57 @@ void GDFunctions::call(Function p_func,const Variant **p_args,int p_arg_count,Va
}
} break;
case VALIDATE_JSON: {
VALIDATE_ARG_COUNT(1);
if (p_args[0]->get_type()!=Variant::STRING) {
r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
r_error.argument=0;
r_error.expected=Variant::STRING;
r_ret=Variant();
return;
}
String errs;
int errl;
Error err = JSON::parse(*p_args[0],r_ret,errs,errl);
if (err!=OK) {
r_ret=itos(errl)+":"+errs;
} else {
r_ret="";
}
} break;
case PARSE_JSON: {
VALIDATE_ARG_COUNT(1);
if (p_args[0]->get_type()!=Variant::STRING) {
r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
r_error.argument=0;
r_error.expected=Variant::STRING;
r_ret=Variant();
return;
}
String errs;
int errl;
Error err = JSON::parse(*p_args[0],r_ret,errs,errl);
if (err!=OK) {
r_ret=Variant();
}
} break;
case TO_JSON: {
VALIDATE_ARG_COUNT(1);
r_ret = JSON::print(*p_args[0]);
} break;
case HASH: {
VALIDATE_ARG_COUNT(1);
@ -1510,6 +1566,24 @@ MethodInfo GDFunctions::get_info(Function p_func) {
mi.return_val.type=Variant::OBJECT;
return mi;
} break;
case VALIDATE_JSON: {
MethodInfo mi("validate_json:Variant",PropertyInfo(Variant::STRING,"json"));
mi.return_val.type=Variant::STRING;
return mi;
} break;
case PARSE_JSON: {
MethodInfo mi("parse_json:Variant",PropertyInfo(Variant::STRING,"json"));
mi.return_val.type=Variant::NIL;
return mi;
} break;
case TO_JSON: {
MethodInfo mi("to_json",PropertyInfo(Variant::NIL,"var:Variant"));
mi.return_val.type=Variant::STRING;
return mi;
} break;
case HASH: {
MethodInfo mi("hash",PropertyInfo(Variant::NIL,"var:Variant"));