<?php

namespace Safe;

use Safe\Exceptions\LibxmlException;

/**
 * Retrieve last error from libxml.
 *
 * @return \LibXMLError Returns a LibXMLError object if there is any error in the
 * buffer, FALSE otherwise.
 * @throws LibxmlException
 *
 */
function libxml_get_last_error(): \LibXMLError
{
    error_clear_last();
    $result = \libxml_get_last_error();
    if ($result === false) {
        throw LibxmlException::createFromPhpError();
    }
    return $result;
}


/**
 * Changes the default external entity loader.
 *
 * @param callable $resolver_function A callable that takes three arguments. Two strings, a public id
 * and system id, and a context (an array with four keys) as the third argument.
 * This callback should return a resource, a string from which a resource can be
 * opened, or NULL.
 * @throws LibxmlException
 *
 */
function libxml_set_external_entity_loader(callable $resolver_function): void
{
    error_clear_last();
    $result = \libxml_set_external_entity_loader($resolver_function);
    if ($result === false) {
        throw LibxmlException::createFromPhpError();
    }
}