private function generateRouteGeneratorMethod(ModuleDefinition $module, EndpointDefinition $endpoint, string $methodName) : string
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // static uri
        if ($endpoint->isStatic()) {
            return <<<PHP

    public function {$methodName}() : string 
    {
        return '{$this->normalizeUri($module->getMountPoint(), $endpoint->getPattern())}';
    }
    
PHP;
        }

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // with parameters
        // TODO: move the logic below into the EndpointDefinition or when creating the EndpointDefinition
        $params = Psi::it($endpoint->getParams())
            ->map(function (string $param) {
                return '$' . $param;
            })
            ->join(', ');

        $result = $endpoint->getPattern();

        foreach ($endpoint->getParams() as $param) {
            $result = str_replace('{' . $param . '}', '$' . $param, $result);
        }

        return <<<PHP

    public function {$methodName}($params) : string 
    {
        return "{$this->normalizeUri($module->getMountPoint(), $result)}";
    }

PHP;

    }
private function generateRouteGeneratorMethod(ModuleDefinition $module, EndpointDefinition $endpoint, string $methodName) : string
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // static uri
        if ($endpoint->isStatic()) {
            return <<<PHP

    public function {$methodName}() : string 
    {
        return '{$this->normalizeUri($module->getMountPoint(), $endpoint->getPattern())}';
    }
    
PHP;
        }

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // with parameters
        // TODO: move the logic below into the EndpointDefinition or when creating the EndpointDefinition
        $params = Psi::it($endpoint->getParams())
            ->map(function (string $param) {
                return '$' . $param;
            })
            ->join(', ');

        $result = $endpoint->getPattern();

        foreach ($endpoint->getParams() as $param) {
            $result = str_replace('{' . $param . '}', '$' . $param, $result);
        }

        return <<<PHP

    public function {$methodName}($params) : string 
    {
        return "{$this->normalizeUri($module->getMountPoint(), $result)}";
    }

PHP;

    }
@param ModuleDefinition   $module
@param EndpointDefinition $endpoint
@param string             $methodName

@return string