modules/jooby-aws/src/main/java/org/jooby/aws/Aws.java
public <T extends AmazonWebServiceClient> Aws doWith(final Function<T, Object> callback) {
    requireNonNull(callback, "Callback is required.");
    return doWith((s, c) -> callback.apply((T) s));
  }
public <T extends AmazonWebServiceClient> Aws doWith(final Function<T, Object> callback) {
    requireNonNull(callback, "Callback is required.");
    return doWith((s, c) -> callback.apply((T) s));
  }
public < T extends AmazonWebServiceClient > Aws doWith ( final Function < T , Object > callback ) { requireNonNull ( callback , "Callback is required." ) ; return doWith ( ( s , c ) -> callback . apply ( ( T ) s ) ) ; }
Like {@link #with(Function)} but it depends on a previously created service.

<pre>
{
use(new Aws()
.with(creds {@literal ->} new AmazonS3Client(creds))
.with(creds {@literal ->} new AmazonSQSClient(creds))
.doWith((AmazonS3Client s3) {@literal ->} new TransferManager(s3))
);
</pre>

It will bind a <code>TransferManager</code> as a Guice service.

@param callback A creation callback.
@param <T> Aws service type.
@return This module.
Like { @link #with ( Function ) } but it depends on a previously created service .