src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

step_deserialize.go (8850B)


      1 // Code generated by smithy-go/middleware/generate.go DO NOT EDIT.
      2 package middleware
      3 
      4 import (
      5 	"context"
      6 	"fmt"
      7 )
      8 
      9 // DeserializeInput provides the input parameters for the DeserializeInput to
     10 // consume. DeserializeMiddleware should not modify the Request, and instead
     11 // forward it along to the next DeserializeHandler.
     12 type DeserializeInput struct {
     13 	Request interface{}
     14 }
     15 
     16 // DeserializeOutput provides the result returned by the next DeserializeHandler.
     17 type DeserializeOutput struct {
     18 	RawResponse interface{}
     19 	Result      interface{}
     20 }
     21 
     22 // DeserializeHandler provides the interface for the next handler the
     23 // DeserializeMiddleware will call in the middleware chain.
     24 type DeserializeHandler interface {
     25 	HandleDeserialize(ctx context.Context, in DeserializeInput) (
     26 		out DeserializeOutput, metadata Metadata, err error,
     27 	)
     28 }
     29 
     30 // DeserializeMiddleware provides the interface for middleware specific to the
     31 // deserialize step. Delegates to the next DeserializeHandler for further
     32 // processing.
     33 type DeserializeMiddleware interface {
     34 	// ID returns a unique ID for the middleware in the DeserializeStep. The step does not
     35 	// allow duplicate IDs.
     36 	ID() string
     37 
     38 	// HandleDeserialize invokes the middleware behavior which must delegate to the next handler
     39 	// for the middleware chain to continue. The method must return a result or
     40 	// error to its caller.
     41 	HandleDeserialize(ctx context.Context, in DeserializeInput, next DeserializeHandler) (
     42 		out DeserializeOutput, metadata Metadata, err error,
     43 	)
     44 }
     45 
     46 // DeserializeMiddlewareFunc returns a DeserializeMiddleware with the unique ID provided,
     47 // and the func to be invoked.
     48 func DeserializeMiddlewareFunc(id string, fn func(context.Context, DeserializeInput, DeserializeHandler) (DeserializeOutput, Metadata, error)) DeserializeMiddleware {
     49 	return deserializeMiddlewareFunc{
     50 		id: id,
     51 		fn: fn,
     52 	}
     53 }
     54 
     55 type deserializeMiddlewareFunc struct {
     56 	// Unique ID for the middleware.
     57 	id string
     58 
     59 	// Middleware function to be called.
     60 	fn func(context.Context, DeserializeInput, DeserializeHandler) (
     61 		DeserializeOutput, Metadata, error,
     62 	)
     63 }
     64 
     65 // ID returns the unique ID for the middleware.
     66 func (s deserializeMiddlewareFunc) ID() string { return s.id }
     67 
     68 // HandleDeserialize invokes the middleware Fn.
     69 func (s deserializeMiddlewareFunc) HandleDeserialize(ctx context.Context, in DeserializeInput, next DeserializeHandler) (
     70 	out DeserializeOutput, metadata Metadata, err error,
     71 ) {
     72 	return s.fn(ctx, in, next)
     73 }
     74 
     75 var _ DeserializeMiddleware = (deserializeMiddlewareFunc{})
     76 
     77 // DeserializeStep provides the ordered grouping of DeserializeMiddleware to be
     78 // invoked on a handler.
     79 type DeserializeStep struct {
     80 	head *decoratedDeserializeHandler
     81 	tail *decoratedDeserializeHandler
     82 }
     83 
     84 // NewDeserializeStep returns an DeserializeStep ready to have middleware for
     85 // deserialize added to it.
     86 func NewDeserializeStep() *DeserializeStep {
     87 	return &DeserializeStep{}
     88 }
     89 
     90 var _ Middleware = (*DeserializeStep)(nil)
     91 
     92 // ID returns the unique ID of the step as a middleware.
     93 func (s *DeserializeStep) ID() string {
     94 	return "Deserialize stack step"
     95 }
     96 
     97 // HandleMiddleware invokes the middleware by decorating the next handler
     98 // provided. Returns the result of the middleware and handler being invoked.
     99 //
    100 // Implements Middleware interface.
    101 func (s *DeserializeStep) HandleMiddleware(ctx context.Context, in interface{}, next Handler) (
    102 	out interface{}, metadata Metadata, err error,
    103 ) {
    104 	sIn := DeserializeInput{
    105 		Request: in,
    106 	}
    107 
    108 	wh := &deserializeWrapHandler{next}
    109 	if s.head == nil {
    110 		res, metadata, err := wh.HandleDeserialize(ctx, sIn)
    111 		return res.Result, metadata, err
    112 	}
    113 
    114 	s.tail.Next = wh
    115 	res, metadata, err := s.head.HandleDeserialize(ctx, sIn)
    116 	return res.Result, metadata, err
    117 }
    118 
    119 // Get retrieves the middleware identified by id. If the middleware is not present, returns false.
    120 func (s *DeserializeStep) Get(id string) (DeserializeMiddleware, bool) {
    121 	found, _ := s.get(id)
    122 	if found == nil {
    123 		return nil, false
    124 	}
    125 
    126 	return found.With, true
    127 }
    128 
    129 // Add injects the middleware to the relative position of the middleware group.
    130 //
    131 // Add never returns an error. It used to for duplicate phases but this
    132 // behavior has since been removed as part of a performance optimization. The
    133 // return value from Add can be ignored.
    134 func (s *DeserializeStep) Add(m DeserializeMiddleware, pos RelativePosition) error {
    135 	if s.head == nil {
    136 		s.head = &decoratedDeserializeHandler{nil, m}
    137 		s.tail = s.head
    138 		return nil
    139 	}
    140 
    141 	if pos == Before {
    142 		s.head = &decoratedDeserializeHandler{s.head, m}
    143 	} else {
    144 		tail := &decoratedDeserializeHandler{nil, m}
    145 		s.tail.Next = tail
    146 		s.tail = tail
    147 	}
    148 
    149 	return nil
    150 }
    151 
    152 // Insert injects the middleware relative to an existing middleware ID.
    153 // Returns error if the original middleware does not exist, or the middleware
    154 // being added already exists.
    155 func (s *DeserializeStep) Insert(m DeserializeMiddleware, relativeTo string, pos RelativePosition) error {
    156 	found, prev := s.get(relativeTo)
    157 	if found == nil {
    158 		return fmt.Errorf("not found: %s", m.ID())
    159 	}
    160 
    161 	if pos == Before {
    162 		if prev == nil { // at the front
    163 			s.head = &decoratedDeserializeHandler{s.head, m}
    164 		} else { // somewhere in the middle
    165 			prev.Next = &decoratedDeserializeHandler{found, m}
    166 		}
    167 	} else {
    168 		if found.Next == nil { // at the end
    169 			tail := &decoratedDeserializeHandler{nil, m}
    170 			s.tail.Next = tail
    171 			s.tail = tail
    172 		} else { // somewhere in the middle
    173 			found.Next = &decoratedDeserializeHandler{found.Next, m}
    174 		}
    175 	}
    176 
    177 	return nil
    178 }
    179 
    180 // Swap removes the middleware by id, replacing it with the new middleware.
    181 // Returns the middleware removed, or error if the middleware to be removed
    182 // doesn't exist.
    183 func (s *DeserializeStep) Swap(id string, m DeserializeMiddleware) (DeserializeMiddleware, error) {
    184 	found, _ := s.get(id)
    185 	if found == nil {
    186 		return nil, fmt.Errorf("not found: %s", m.ID())
    187 	}
    188 
    189 	swapped := found.With
    190 	found.With = m
    191 	return swapped, nil
    192 }
    193 
    194 // Remove removes the middleware by id. Returns error if the middleware
    195 // doesn't exist.
    196 func (s *DeserializeStep) Remove(id string) (DeserializeMiddleware, error) {
    197 	found, prev := s.get(id)
    198 	if found == nil {
    199 		return nil, fmt.Errorf("not found: %s", id)
    200 	}
    201 
    202 	if s.head == s.tail { // it's the only one
    203 		s.head = nil
    204 		s.tail = nil
    205 	} else if found == s.head { // at the front
    206 		s.head = s.head.Next.(*decoratedDeserializeHandler)
    207 	} else if found == s.tail { // at the end
    208 		prev.Next = nil
    209 		s.tail = prev
    210 	} else {
    211 		prev.Next = found.Next // somewhere in the middle
    212 	}
    213 
    214 	return found.With, nil
    215 }
    216 
    217 // List returns a list of the middleware in the step.
    218 func (s *DeserializeStep) List() []string {
    219 	var ids []string
    220 	for h := s.head; h != nil; {
    221 		ids = append(ids, h.With.ID())
    222 		if h.Next == nil {
    223 			break
    224 		}
    225 
    226 		// once executed, tail.Next of the list will be set to an
    227 		// *deserializeWrapHandler, make sure to check for that
    228 		if hnext, ok := h.Next.(*decoratedDeserializeHandler); ok {
    229 			h = hnext
    230 		} else {
    231 			break
    232 		}
    233 	}
    234 	return ids
    235 }
    236 
    237 // Clear removes all middleware in the step.
    238 func (s *DeserializeStep) Clear() {
    239 	s.head = nil
    240 	s.tail = nil
    241 }
    242 
    243 func (s *DeserializeStep) get(id string) (found, prev *decoratedDeserializeHandler) {
    244 	for h := s.head; h != nil; {
    245 		if h.With.ID() == id {
    246 			found = h
    247 			return
    248 		}
    249 		prev = h
    250 		if h.Next == nil {
    251 			return
    252 		}
    253 
    254 		// once executed, tail.Next of the list will be set to an
    255 		// *deserializeWrapHandler
    256 		h, _ = h.Next.(*decoratedDeserializeHandler)
    257 	}
    258 	return
    259 }
    260 
    261 type deserializeWrapHandler struct {
    262 	Next Handler
    263 }
    264 
    265 var _ DeserializeHandler = (*deserializeWrapHandler)(nil)
    266 
    267 // HandleDeserialize implements DeserializeHandler, converts types and delegates to underlying
    268 // generic handler.
    269 func (w deserializeWrapHandler) HandleDeserialize(ctx context.Context, in DeserializeInput) (
    270 	out DeserializeOutput, metadata Metadata, err error,
    271 ) {
    272 	res, metadata, err := w.Next.Handle(ctx, in.Request)
    273 	return DeserializeOutput{
    274 		RawResponse: res,
    275 		Result:      nil,
    276 	}, metadata, err
    277 }
    278 
    279 type decoratedDeserializeHandler struct {
    280 	Next DeserializeHandler
    281 	With DeserializeMiddleware
    282 }
    283 
    284 var _ DeserializeHandler = (*decoratedDeserializeHandler)(nil)
    285 
    286 func (h decoratedDeserializeHandler) HandleDeserialize(ctx context.Context, in DeserializeInput) (
    287 	out DeserializeOutput, metadata Metadata, err error,
    288 ) {
    289 	return h.With.HandleDeserialize(ctx, in, h.Next)
    290 }
    291 
    292 // DeserializeHandlerFunc provides a wrapper around a function to be used as deserializeMiddleware.
    293 type DeserializeHandlerFunc func(context.Context, DeserializeInput) (DeserializeOutput, Metadata, error)
    294 
    295 // HandleDeserialize calls the wrapped function with the provided arguments.
    296 func (f DeserializeHandlerFunc) HandleDeserialize(ctx context.Context, in DeserializeInput) (DeserializeOutput, Metadata, error) {
    297 	return f(ctx, in)
    298 }
    299 
    300 var _ DeserializeHandler = DeserializeHandlerFunc(nil)