public <T extends AmazonWebServiceClient> Aws doWith(final Function<T, Object> callback) {
    """
	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.
    """
    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 .