@SuppressWarnings("unchecked")
    public <Context, Result, S extends Service<Context, Result>> @NonNull Collection<TypeToken<? extends S>> getImplementations(
            final @NonNull TypeToken<S> type
    ) {
        ServiceRepository<Context, Result> repository = this.getRepository(type);
        List<TypeToken<? extends S>> collection = new LinkedList<>();
        final LinkedList<? extends ServiceRepository<Context, Result>.ServiceWrapper<? extends Service<Context, Result>>>
                queue = repository.queue();
        queue.sort(null);
        Collections.reverse(queue);
        for (ServiceRepository<Context, Result>.ServiceWrapper<? extends Service<Context, Result>> wrapper : queue) {
            collection
                    .add((TypeToken<? extends S>) TypeToken.get(wrapper.implementation().getClass()));
        }
        return Collections.unmodifiableList(collection);
    }
Get a collection of all the {@link TypeToken} of all implementations for a given type.

@param type      The {@link TypeToken} of the service to get implementations for.
@param <Context> The context type.
@param <Result>  The result type.
@param <S>       The service type.
@return Returns an collection of the {@link TypeToken}s of the implementations for a given
        service. Iterator order matches the priority when pumping contexts through the pipeline
cloud-services/src/main/java/org/incendo/cloud/services/ServicePipeline.java