public static Function<? super HttpService, HttpService> newDecorator(
            Router<RouteDecoratingService> router, List<RouteDecoratingService> routeDecoratingServices) {
        return delegate -> new InitialDispatcherService(delegate, router, routeDecoratingServices);
    }
Decorates an {@link HttpService} whose {@link Route} matches the {@link #route}.

{@link RouteDecoratingService} is used for binding your {@link HttpService} to multiple {@code decorator}s
with {@link Route}s. e.g.
<pre>{@code
> Server server =
>     Server.builder()
>           .service("/api/users", userService)
>           .decoratorUnder("/", loggingDecorator)
>           .decoratorUnder("/api", authDecorator)
>           .decoratorUnder("/api/users", traceDecorator)
>           .build();
}</pre>

{@link VirtualHostBuilder} wraps each specified {@code decorator} with {@link RouteDecoratingService} and
merges them into a {@link Router}. When a client requests to {@code /api/users/1},
{@link InitialDispatcherService} will work the following steps for building decorators
being matched to the given request:

<ul>
  <li>Finds all matched decorators from {@link InitialDispatcherService#router}
      using {@link RoutingContext}</li>
  <li>Put them into {@code pendingDecorators} with keeping the finding order</li>
  <li>Finally, put the original {@link HttpService} at the end of {@code pendingDecorators}</li>
</ul>

<p>The request will go through the below decorators to reach the {@code userService}.
<pre>{@code
 request -> initialDispatcherService
         -> traceDecorator           -> routeDecoratingService
         -> authDecorator            -> routeDecoratingService
         -> loggingDecorator         -> routeDecoratingService
         -> userService
}</pre>
core/src/main/java/com/linecorp/armeria/internal/server/RouteDecoratingService.java