/* Copyright (c) 2002-2018 Pigeonhole authors, see the included COPYING file
 */

/* Match-type ':is':
 */

#include "lib.h"

#include "sieve-match-types.h"
#include "sieve-comparators.h"
#include "sieve-match.h"

#include <string.h>
#include <stdio.h>

/*
 * Forward declarations
 */

static int mcht_is_match_key
	(struct sieve_match_context *mctx, const char *val, size_t val_size,
		const char *key, size_t key_size);

/*
 * Match-type object
 */

const struct sieve_match_type_def is_match_type = {
	SIEVE_OBJECT("is",
		&match_type_operand, SIEVE_MATCH_TYPE_IS),
	.match_key = mcht_is_match_key
};

/*
 * Match-type implementation
 */

static int mcht_is_match_key
(struct sieve_match_context *mctx ATTR_UNUSED,
	const char *val, size_t val_size,
	const char *key, size_t key_size)
{
	if ( val_size == 0 )
		return ( key_size == 0 ? 1 : 0 );

	if ( mctx->comparator->def != NULL && mctx->comparator->def->compare != NULL )
		return (mctx->comparator->def->compare(mctx->comparator,
			val, val_size, key, key_size) == 0 ? 1 : 0 );

	return 0;
}

