module pattern.complements;

import pattern.base;

template complement(alias pattern) if(__traits(compiles, asPattern!pattern))
{
    enum complement = function string(string input)
    {
        if(input.length)
        {
            string result = asPattern!pattern(input);
            return result ? null : [ input[0] ];
        }

        return null;
    };
}

version(unittest)
{
    import pattern.primitives;
}

unittest
{
    enum c = complement!(primitive!("a", "b", "c"));

    assert(c("cat") == null);
    assert(c("dog") == "d");
}