Ejemplo n.º 1
0
static bool jobject_to_string_append (jvalue_ref jref, JStreamRef generating)
{
	SANITY_CHECK_POINTER(jref);

	if (UNLIKELY(!generating->o_begin (generating))) {
		PJ_LOG_ERR("Schema validation error, objects are not allowed.");
		return false;
	}
	if (!jis_object (jref)) {
		const char *asStr = jvalue_tostring_internal_layer2 (jref, NULL, false);
		generating->string (generating, J_CSTR_TO_BUF("Internal error - not an object"));
		generating->string (generating, j_cstr_to_buffer(asStr));
		// create invalid JSON on purpose
		return false;
	}

	jobject_iter it;
	jobject_iter_init(&it, jref);
	jobject_key_value key_value;
	while (jobject_iter_next(&it, &key_value))
	{
		assert(jis_string(key_value.key));
		if(UNLIKELY(!key_value_to_string_append(key_value, generating)))
		{
			return false;
		}
	}

	if (UNLIKELY(!generating->o_end (generating))) {
		PJ_LOG_ERR("Schema validation error, object did not validate against schema");
		return false;
	}

	return true;
}
Ejemplo n.º 2
0
JValue::ObjectIterator::ObjectIterator(jvalue_ref parent)
	: _parent(0)
	, _at_end(false)
{
	_key_value.key = 0;
	_key_value.value = 0;

	if (UNLIKELY(!jobject_iter_init(&_it, parent)))
		throw InvalidType("Can't iterate over non-object");

	_parent = jvalue_copy(parent);
	_at_end = !jobject_iter_next(&_it, &_key_value);
}
Ejemplo n.º 3
0
/**
 * specification says it's undefined, but implementation-wise,
 * the C api will return the current iterator if you try to go past the end.
 *
 */
JValue::ObjectIterator& JValue::ObjectIterator::operator++()
{
	_at_end = !jobject_iter_next(&_it, &_key_value);
	return *this;
}