in codegen/smithy-ruby-codegen/src/main/java/software/amazon/smithy/ruby/codegen/ApplicationTransport.java [77:174]
public static ApplicationTransport createDefaultHttpApplicationTransport() {
ClientConfig endpoint = (new ClientConfig.Builder())
.name("endpoint")
.type("string")
.documentation("Endpoint of the service")
.build();
ClientFragment request = (new ClientFragment.Builder())
.addConfig(endpoint)
.render((self, ctx) -> "Seahorse::HTTP::Request.new(url: options.fetch(:endpoint, @endpoint))")
.build();
ClientFragment response = (new ClientFragment.Builder())
.render((self, ctx) -> "Seahorse::HTTP::Response.new(body: output_stream(options, &block))")
.build();
ClientConfig wireTrace = (new ClientConfig.Builder())
.name("http_wire_trace")
.type("bool")
.defaultValue("false")
.documentation("Enable debug wire trace on http requests.")
.build();
ClientConfig logger = (new ClientConfig.Builder())
.name("logger")
.type("Logger")
.defaultValue("stdout")
.initializationCustomization(
"@logger = options.fetch(:logger, Logger.new($stdout, level: @log_level))")
.documentation("Logger to use for output")
.build();
ClientConfig logLevel = (new ClientConfig.Builder())
.name("log_level")
.type("symbol")
.defaultValue(":info")
.documentation("Default log level to use")
.build();
ClientFragment client = (new ClientFragment.Builder())
.addConfig(wireTrace)
.addConfig(logger)
.addConfig(logLevel)
.render((self, ctx) -> "Seahorse::HTTP::Client.new(logger: @logger, http_wire_trace: "
+ "options.fetch(:http_wire_trace, @http_wire_trace))")
.build();
MiddlewareList defaultMiddleware = (transport, context) -> {
List<Middleware> middleware = new ArrayList();
middleware.add((new Middleware.Builder())
.klass("Seahorse::HTTP::Middleware::ContentLength")
.step(MiddlewareStackStep.BUILD)
.build()
);
middleware.add((new Middleware.Builder())
.klass("Seahorse::Middleware::Parse")
.step(MiddlewareStackStep.DESERIALIZE)
.operationParams((ctx, operation) -> {
SymbolProvider symbolProvider =
new RubySymbolProvider(ctx.getModel(), ctx.getRubySettings(), "Client", false);
Map<String, String> params = new HashMap<>();
params.put("data_parser",
"Parsers::" + symbolProvider.toSymbol(operation).getName());
String successCode = "200";
Optional<HttpTrait> httpTrait = operation.getTrait(HttpTrait.class);
if (httpTrait.isPresent()) {
successCode = "" + httpTrait.get().getCode();
}
String errors =
operation.getErrors().stream().map((error) -> "Errors::"
+ symbolProvider.toSymbol(ctx.getModel().expectShape(error)).getName()).collect(
Collectors.joining(", "));
params.put("error_parser",
"Seahorse::HTTP::ErrorParser.new("
+ "error_module: Errors, error_code_fn: "
+ "Errors.method(:error_code), "
+ "success_status: "
+ successCode + ", errors: [" + errors + "]"
+ ")"
);
return params;
})
.build()
);
return middleware;
};
return new ApplicationTransport(
"http",
request,
response,
client,
defaultMiddleware);
}