static void
get_json (GDataParsable *parsable, JsonBuilder *builder)
{
	GDataAccessRule *access_rule;
	const gchar *id, *etag, *role, *scope_type, *scope_value;

	access_rule = GDATA_ACCESS_RULE (parsable);

	id = gdata_entry_get_id (GDATA_ENTRY (parsable));
	if (id != NULL) {
		json_builder_set_member_name (builder, "id");
		json_builder_add_string_value (builder, id);
	}

	json_builder_set_member_name (builder, "kind");
	json_builder_add_string_value (builder, "calendar#aclRule");

	/* Add the ETag, if available. */
	etag = gdata_entry_get_etag (GDATA_ENTRY (parsable));
	if (etag != NULL) {
		json_builder_set_member_name (builder, "etag");
		json_builder_add_string_value (builder, etag);
	}

	role = gdata_access_rule_get_role (access_rule);
	if (role != NULL) {
		json_builder_set_member_name (builder, "role");
		json_builder_add_string_value (builder, role_v2_to_v3 (role));
	}

	gdata_access_rule_get_scope (access_rule, &scope_type, &scope_value);
	if (scope_type != NULL || scope_value != NULL) {
		json_builder_set_member_name (builder, "scope");
		json_builder_begin_object (builder);

		if (scope_type != NULL) {
			json_builder_set_member_name (builder, "type");
			json_builder_add_string_value (builder,
			                               scope_type_v2_to_v3 (scope_type));
		}

		if (scope_value != NULL) {
			json_builder_set_member_name (builder, "value");
			json_builder_add_string_value (builder, scope_value);
		}

		json_builder_end_object (builder);
	}
}
static void
get_json (GDataParsable *parsable, JsonBuilder *builder)
{
	const gchar *key;
	const gchar *role;
	const gchar *scope_type;
	const gchar *scope_value;

	GDATA_PARSABLE_CLASS (gdata_documents_access_rule_parent_class)->get_json (parsable, builder);

	key = gdata_access_rule_get_key (GDATA_ACCESS_RULE (parsable));
	if (key != NULL && key[0] != '\0') {
		json_builder_set_member_name (builder, "authKey");
		json_builder_add_string_value (builder, key);
	}

	role = gdata_access_rule_get_role (GDATA_ACCESS_RULE (parsable));
	if (role != NULL && role[0] != '\0') {
		json_builder_set_member_name (builder, "role");
		json_builder_add_string_value (builder, role);
	}

	gdata_access_rule_get_scope (GDATA_ACCESS_RULE (parsable), &scope_type, &scope_value);

	if (scope_type != NULL && scope_type[0] != '\0') {
		if (g_strcmp0 (scope_type, GDATA_ACCESS_SCOPE_DEFAULT) == 0)
			scope_type = "anyone";

		json_builder_set_member_name (builder, "type");
		json_builder_add_string_value (builder, scope_type);
	}

	if (scope_value != NULL && scope_value[0] != '\0') {
		json_builder_set_member_name (builder, "value");
		json_builder_add_string_value (builder, scope_value);
	}
}