1// +build codegen
2
3package api
4
5import "text/template"
6
7var eventStreamShapeWriterTmpl = template.Must(template.New("eventStreamShapeWriterTmpl").
8	Funcs(template.FuncMap{}).
9	Parse(`
10{{- $es := $.EventStream }}
11
12// {{ $es.StreamWriterAPIName }} provides the interface for writing events to the stream.
13// The default implementation for this interface will be {{ $.ShapeName }}.
14//
15// The writer's Close method must allow multiple concurrent calls.
16//
17// These events are:
18// {{ range $_, $event := $es.Events }}
19//     * {{ $event.Shape.ShapeName }}
20{{- end }}
21type {{ $es.StreamWriterAPIName }} interface {
22	// Sends writes events to the stream blocking until the event has been
23	// written. An error is returned if the write fails.
24	Send(aws.Context, {{ $es.EventGroupName }}) error
25
26	// Close will stop the writer writing to the event stream.
27	Close() error
28
29	// Returns any error that has occurred while writing to the event stream.
30	Err() error
31}
32
33type {{ $es.StreamWriterImplName }} struct {
34	*eventstreamapi.StreamWriter
35}
36
37func (w *{{ $es.StreamWriterImplName }}) Send(ctx aws.Context, event {{ $es.EventGroupName }}) error {
38	return w.StreamWriter.Send(ctx, event)
39}
40
41func {{ $es.StreamEventTypeGetterName }}(event eventstreamapi.Marshaler) (string, error) {
42	switch event.(type) {
43		{{- range $_, $event := $es.Events }}
44			case *{{ $event.Shape.ShapeName }}:
45				return {{ printf "%q" $event.Name }}, nil
46		{{- end }}
47		{{- range $_, $event := $es.Exceptions }}
48			case *{{ $event.Shape.ShapeName }}:
49				return {{ printf "%q" $event.Name }}, nil
50		{{- end }}
51	default:
52		return "", awserr.New(
53			request.ErrCodeSerialization,
54			fmt.Sprintf("unknown event type, %T, for {{ $es.Name }}", event),
55			nil,
56		)
57	}
58}
59`))
60