module vips.base;

package import vips.image;
package import vips.option;
package import vips.types;

class VipsException : Exception
{
public:
    this(string message,
        string file = __FILE__,
        size_t line = __LINE__,
        Throwable next = null)
    {
        import vips.bindings : vips_error_buffer, vips_error_clear;
        import std..string : fromStringz;
        super((message ~ ": Vips Error - " ~ vips_error_buffer.fromStringz).idup, 
            file, 
            line, 
            next);
        vips_error_clear();
    }
}

void initVips(string programName, bool leakChecking = false)
{
    import std..string : fromStringz, toStringz;
    import vips.bindings : vips_init, vips_leak_set;

    if(vips_init(programName.toStringz) == -1)
    {
        throw new VipsException("Unable to initialize Vips");
    }
    vips_leak_set(leakChecking);
}

void shutdownVips()
{
    import vips.bindings : vips_shutdown;
    vips_shutdown();
}