Ejemplo n.º 1
0
int main() {
     json_value_t *value;
     stream = new_json_input_stream_from_string(source, stdlib_memory);
     value = json_parse(stream, on_error, stdlib_memory);

     return 0;
}
Ejemplo n.º 2
0
yacad_message_t *yacad_message_unserialize(logger_t log, const char *serial, cad_hash_t *env) {
     yacad_message_t *result = NULL;
     json_input_stream_t *in = new_json_input_stream_from_string(serial, stdlib_memory);
     json_value_t *jserial = json_parse(in, NULL, stdlib_memory);
     yacad_json_finder_t *finder = yacad_json_finder_new(log, json_type_string, "%s");
     json_string_t *jtype;
     char *type;
     int n;

     finder->visit(finder, jserial, "type");
     jtype = finder->get_string(finder);

     n = jtype->utf8(jtype, "", 0) + 1;
     type = alloca(n);
     jtype->utf8(jtype, type, n);

     if (!strcmp(type, "query_get_task")) {
          result = (yacad_message_t *)yacad_message_query_get_task_unserialize(log, jserial, env);
     } else if (!strcmp(type, "reply_get_task")) {
          result = (yacad_message_t *)yacad_message_reply_get_task_unserialize(log, jserial, env);
     } else if (!strcmp(type, "query_set_result")) {
          result = (yacad_message_t *)yacad_message_query_set_result_unserialize(log, jserial, env);
     } else if (!strcmp(type, "reply_set_result")) {
          result = (yacad_message_t *)yacad_message_reply_set_result_unserialize(log, jserial, env);
     } else {
          log(warn, "Invalid message: %s", serial);
     }

     finder->free(finder);
     jserial->free(jserial);
     in->free(in);

     return result;
}
Ejemplo n.º 3
0
int main() {
     json_value_t *value;
     json_object_t *root;
     json_number_t *zero_dot_four, *negative_zero_dot_four;
     stream = new_json_input_stream_from_string(source, stdlib_memory);
     value = json_parse(stream, on_error, stdlib_memory);

     root = (json_object_t*)value;
     zero_dot_four = (json_number_t*)(root->get(root, "zero_dot_four"));
     negative_zero_dot_four = (json_number_t*)(root->get(root, "negative_zero_dot_four"));

     assert(!zero_dot_four->is_int(zero_dot_four));
     assert(abs(zero_dot_four->to_double(zero_dot_four) - (double)0.4) < 1e-9); // 0.4 cannot be reliably coded on a binary system, expect a small deviance

     assert(!negative_zero_dot_four->is_int(negative_zero_dot_four));
     assert(negative_zero_dot_four->to_double(negative_zero_dot_four) < 0);
     assert(abs(negative_zero_dot_four->to_double(negative_zero_dot_four) - (double)-0.4) < 1e-9); // -0.4 cannot be reliably coded on a binary system, expect a small deviance

     return 0;
}