_try(resource) {
        /**
         * CASE: another url generator has taken this resource already.
         *
         * We have to remember that, because each url generator can generate a different url
         * for a resource. So we can't directly check `this.urls.getUrl(url)`.
         */
        if (resource.isReserved()) {
            return false;
        }

        // CASE 1: route has no custom filter, it will own the resource for sure
        let shouldReserve = !this.filter;

        // CASE 2: find out if my filter matches the resource
        if (!shouldReserve) {
            try {
                shouldReserve = this.nql.queryJSON(resource.data);
            } catch (err) {
                debug(`Failed to queryJSON with filter "${this.filter}"`, err);

                return false;
            }
        }

        if (shouldReserve) {
            const url = this._generateUrl(resource);
            this.urls.add({
                url: url,
                generatorId: this.uid,
                resource: resource
            });

            resource.reserve();
            this._resourceListeners(resource);
            return true;
        } else {
            return false;
        }
    }
@description Try to own a resource and generate it's url if so.
@param {import('./Resource')} resource - instance of the Resource class
@returns {boolean}
@private