1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package eventstreamapi
- import (
- "context"
- "fmt"
- "github.com/aws/smithy-go/middleware"
- smithyhttp "github.com/aws/smithy-go/transport/http"
- "io"
- )
- type eventStreamWriterKey struct{}
- // GetInputStreamWriter returns EventTypeHeader io.PipeWriter used for the operation's input event stream.
- func GetInputStreamWriter(ctx context.Context) io.WriteCloser {
- writeCloser, _ := middleware.GetStackValue(ctx, eventStreamWriterKey{}).(io.WriteCloser)
- return writeCloser
- }
- func setInputStreamWriter(ctx context.Context, writeCloser io.WriteCloser) context.Context {
- return middleware.WithStackValue(ctx, eventStreamWriterKey{}, writeCloser)
- }
- // InitializeStreamWriter is a Finalize middleware initializes an in-memory pipe for sending event stream messages
- // via the HTTP request body.
- type InitializeStreamWriter struct{}
- // AddInitializeStreamWriter adds the InitializeStreamWriter middleware to the provided stack.
- func AddInitializeStreamWriter(stack *middleware.Stack) error {
- return stack.Finalize.Add(&InitializeStreamWriter{}, middleware.After)
- }
- // ID returns the identifier for the middleware.
- func (i *InitializeStreamWriter) ID() string {
- return "InitializeStreamWriter"
- }
- // HandleFinalize is the middleware implementation.
- func (i *InitializeStreamWriter) HandleFinalize(
- ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler,
- ) (
- out middleware.FinalizeOutput, metadata middleware.Metadata, err error,
- ) {
- request, ok := in.Request.(*smithyhttp.Request)
- if !ok {
- return out, metadata, fmt.Errorf("unknown transport type: %T", in.Request)
- }
- inputReader, inputWriter := io.Pipe()
- defer func() {
- if err == nil {
- return
- }
- _ = inputReader.Close()
- _ = inputWriter.Close()
- }()
- request, err = request.SetStream(inputReader)
- if err != nil {
- return out, metadata, err
- }
- in.Request = request
- ctx = setInputStreamWriter(ctx, inputWriter)
- out, metadata, err = next.HandleFinalize(ctx, in)
- if err != nil {
- return out, metadata, err
- }
- return out, metadata, err
- }
|