/**
  * Get the route information for a given route.
  *
  * @param  Route $route
  * @return array
  */
 protected function getRouteInformation(Route $route)
 {
     $result = [];
     $result['uri'] = $route->getMethods()[0] . ' ' . $route->getPattern();
     $result['name'] = $route->getName() ?: '';
     $result['group'] = '';
     foreach ($route->getGroups() as $group) {
         $result['group'] .= $group->getPattern();
     }
     $callable = $route->getCallable();
     $result['middleware'] = [];
     foreach ($route->getMiddleware() as $middleware) {
         $result['middleware'][] = Closure::bind(function () {
             return get_class($this->callable);
         }, $middleware, DeferredCallable::class)->__invoke();
     }
     if (is_array($callable)) {
         $result['callable'] = get_class($callable[0]) . ':' . $callable[1];
         $reflector = new ReflectionMethod($callable[0], $callable[1]);
     } elseif ($callable instanceof Closure) {
         $result['callable'] = $this->formatVar($callable);
         $reflector = new ReflectionFunction($callable);
     } elseif (is_object($callable)) {
         $result['callable'] = get_class($callable);
         $reflector = new ReflectionMethod($callable, '__invoke');
     } else {
         $result['callable'] = $callable;
         $callable = explode(':', $callable);
         if (isset($callable[1])) {
             $reflector = new ReflectionMethod($callable[0], $callable[1]);
         } else {
             $reflector = new ReflectionMethod($callable, '__invoke');
         }
     }
     $result['file'] = $reflector->getFileName() . ':' . $reflector->getStartLine() . '-' . $reflector->getEndLine();
     return $result;
 }