github.com/circl-dev/go-swagger@v0.31.0/examples/stream-server/restapi/operations/countdown_api.go (about) 1 // Code generated by go-swagger; DO NOT EDIT. 2 3 package operations 4 5 // This file was generated by the swagger tool. 6 // Editing this file might prove futile when you re-run the swagger generate command 7 8 import ( 9 "fmt" 10 "net/http" 11 "strings" 12 13 "github.com/go-openapi/errors" 14 "github.com/go-openapi/strfmt" 15 "github.com/go-openapi/swag" 16 "github.com/circl-dev/runtime" 17 "github.com/circl-dev/runtime/middleware" 18 "github.com/circl-dev/runtime/security" 19 "github.com/circl-dev/spec" 20 "github.com/circl-dev/loads" 21 ) 22 23 // NewCountdownAPI creates a new Countdown instance 24 func NewCountdownAPI(spec *loads.Document) *CountdownAPI { 25 return &CountdownAPI{ 26 handlers: make(map[string]map[string]http.Handler), 27 formats: strfmt.Default, 28 defaultConsumes: "application/json", 29 defaultProduces: "application/json", 30 customConsumers: make(map[string]runtime.Consumer), 31 customProducers: make(map[string]runtime.Producer), 32 PreServerShutdown: func() {}, 33 ServerShutdown: func() {}, 34 spec: spec, 35 useSwaggerUI: false, 36 ServeError: errors.ServeError, 37 BasicAuthenticator: security.BasicAuth, 38 APIKeyAuthenticator: security.APIKeyAuth, 39 BearerAuthenticator: security.BearerAuth, 40 41 JSONConsumer: runtime.JSONConsumer(), 42 43 JSONProducer: runtime.JSONProducer(), 44 45 ElapseHandler: ElapseHandlerFunc(func(params ElapseParams) middleware.Responder { 46 return middleware.NotImplemented("operation Elapse has not yet been implemented") 47 }), 48 } 49 } 50 51 /*CountdownAPI Example server for emitting newline delimited JSON */ 52 type CountdownAPI struct { 53 spec *loads.Document 54 context *middleware.Context 55 handlers map[string]map[string]http.Handler 56 formats strfmt.Registry 57 customConsumers map[string]runtime.Consumer 58 customProducers map[string]runtime.Producer 59 defaultConsumes string 60 defaultProduces string 61 Middleware func(middleware.Builder) http.Handler 62 useSwaggerUI bool 63 64 // BasicAuthenticator generates a runtime.Authenticator from the supplied basic auth function. 65 // It has a default implementation in the security package, however you can replace it for your particular usage. 66 BasicAuthenticator func(security.UserPassAuthentication) runtime.Authenticator 67 68 // APIKeyAuthenticator generates a runtime.Authenticator from the supplied token auth function. 69 // It has a default implementation in the security package, however you can replace it for your particular usage. 70 APIKeyAuthenticator func(string, string, security.TokenAuthentication) runtime.Authenticator 71 72 // BearerAuthenticator generates a runtime.Authenticator from the supplied bearer token auth function. 73 // It has a default implementation in the security package, however you can replace it for your particular usage. 74 BearerAuthenticator func(string, security.ScopedTokenAuthentication) runtime.Authenticator 75 76 // JSONConsumer registers a consumer for the following mime types: 77 // - application/json 78 JSONConsumer runtime.Consumer 79 80 // JSONProducer registers a producer for the following mime types: 81 // - application/json 82 JSONProducer runtime.Producer 83 84 // ElapseHandler sets the operation handler for the elapse operation 85 ElapseHandler ElapseHandler 86 87 // ServeError is called when an error is received, there is a default handler 88 // but you can set your own with this 89 ServeError func(http.ResponseWriter, *http.Request, error) 90 91 // PreServerShutdown is called before the HTTP(S) server is shutdown 92 // This allows for custom functions to get executed before the HTTP(S) server stops accepting traffic 93 PreServerShutdown func() 94 95 // ServerShutdown is called when the HTTP(S) server is shut down and done 96 // handling all active connections and does not accept connections any more 97 ServerShutdown func() 98 99 // Custom command line argument groups with their descriptions 100 CommandLineOptionsGroups []swag.CommandLineOptionsGroup 101 102 // User defined logger function. 103 Logger func(string, ...interface{}) 104 } 105 106 // UseRedoc for documentation at /docs 107 func (o *CountdownAPI) UseRedoc() { 108 o.useSwaggerUI = false 109 } 110 111 // UseSwaggerUI for documentation at /docs 112 func (o *CountdownAPI) UseSwaggerUI() { 113 o.useSwaggerUI = true 114 } 115 116 // SetDefaultProduces sets the default produces media type 117 func (o *CountdownAPI) SetDefaultProduces(mediaType string) { 118 o.defaultProduces = mediaType 119 } 120 121 // SetDefaultConsumes returns the default consumes media type 122 func (o *CountdownAPI) SetDefaultConsumes(mediaType string) { 123 o.defaultConsumes = mediaType 124 } 125 126 // SetSpec sets a spec that will be served for the clients. 127 func (o *CountdownAPI) SetSpec(spec *loads.Document) { 128 o.spec = spec 129 } 130 131 // DefaultProduces returns the default produces media type 132 func (o *CountdownAPI) DefaultProduces() string { 133 return o.defaultProduces 134 } 135 136 // DefaultConsumes returns the default consumes media type 137 func (o *CountdownAPI) DefaultConsumes() string { 138 return o.defaultConsumes 139 } 140 141 // Formats returns the registered string formats 142 func (o *CountdownAPI) Formats() strfmt.Registry { 143 return o.formats 144 } 145 146 // RegisterFormat registers a custom format validator 147 func (o *CountdownAPI) RegisterFormat(name string, format strfmt.Format, validator strfmt.Validator) { 148 o.formats.Add(name, format, validator) 149 } 150 151 // Validate validates the registrations in the CountdownAPI 152 func (o *CountdownAPI) Validate() error { 153 var unregistered []string 154 155 if o.JSONConsumer == nil { 156 unregistered = append(unregistered, "JSONConsumer") 157 } 158 159 if o.JSONProducer == nil { 160 unregistered = append(unregistered, "JSONProducer") 161 } 162 163 if o.ElapseHandler == nil { 164 unregistered = append(unregistered, "ElapseHandler") 165 } 166 167 if len(unregistered) > 0 { 168 return fmt.Errorf("missing registration: %s", strings.Join(unregistered, ", ")) 169 } 170 171 return nil 172 } 173 174 // ServeErrorFor gets a error handler for a given operation id 175 func (o *CountdownAPI) ServeErrorFor(operationID string) func(http.ResponseWriter, *http.Request, error) { 176 return o.ServeError 177 } 178 179 // AuthenticatorsFor gets the authenticators for the specified security schemes 180 func (o *CountdownAPI) AuthenticatorsFor(schemes map[string]spec.SecurityScheme) map[string]runtime.Authenticator { 181 return nil 182 } 183 184 // Authorizer returns the registered authorizer 185 func (o *CountdownAPI) Authorizer() runtime.Authorizer { 186 return nil 187 } 188 189 // ConsumersFor gets the consumers for the specified media types. 190 // MIME type parameters are ignored here. 191 func (o *CountdownAPI) ConsumersFor(mediaTypes []string) map[string]runtime.Consumer { 192 result := make(map[string]runtime.Consumer, len(mediaTypes)) 193 for _, mt := range mediaTypes { 194 switch mt { 195 case "application/json": 196 result["application/json"] = o.JSONConsumer 197 } 198 199 if c, ok := o.customConsumers[mt]; ok { 200 result[mt] = c 201 } 202 } 203 return result 204 } 205 206 // ProducersFor gets the producers for the specified media types. 207 // MIME type parameters are ignored here. 208 func (o *CountdownAPI) ProducersFor(mediaTypes []string) map[string]runtime.Producer { 209 result := make(map[string]runtime.Producer, len(mediaTypes)) 210 for _, mt := range mediaTypes { 211 switch mt { 212 case "application/json": 213 result["application/json"] = o.JSONProducer 214 } 215 216 if p, ok := o.customProducers[mt]; ok { 217 result[mt] = p 218 } 219 } 220 return result 221 } 222 223 // HandlerFor gets a http.Handler for the provided operation method and path 224 func (o *CountdownAPI) HandlerFor(method, path string) (http.Handler, bool) { 225 if o.handlers == nil { 226 return nil, false 227 } 228 um := strings.ToUpper(method) 229 if _, ok := o.handlers[um]; !ok { 230 return nil, false 231 } 232 if path == "/" { 233 path = "" 234 } 235 h, ok := o.handlers[um][path] 236 return h, ok 237 } 238 239 // Context returns the middleware context for the countdown API 240 func (o *CountdownAPI) Context() *middleware.Context { 241 if o.context == nil { 242 o.context = middleware.NewRoutableContext(o.spec, o, nil) 243 } 244 245 return o.context 246 } 247 248 func (o *CountdownAPI) initHandlerCache() { 249 o.Context() // don't care about the result, just that the initialization happened 250 if o.handlers == nil { 251 o.handlers = make(map[string]map[string]http.Handler) 252 } 253 254 if o.handlers["GET"] == nil { 255 o.handlers["GET"] = make(map[string]http.Handler) 256 } 257 o.handlers["GET"]["/elapse/{length}"] = NewElapse(o.context, o.ElapseHandler) 258 } 259 260 // Serve creates a http handler to serve the API over HTTP 261 // can be used directly in http.ListenAndServe(":8000", api.Serve(nil)) 262 func (o *CountdownAPI) Serve(builder middleware.Builder) http.Handler { 263 o.Init() 264 265 if o.Middleware != nil { 266 return o.Middleware(builder) 267 } 268 if o.useSwaggerUI { 269 return o.context.APIHandlerSwaggerUI(builder) 270 } 271 return o.context.APIHandler(builder) 272 } 273 274 // Init allows you to just initialize the handler cache, you can then recompose the middleware as you see fit 275 func (o *CountdownAPI) Init() { 276 if len(o.handlers) == 0 { 277 o.initHandlerCache() 278 } 279 } 280 281 // RegisterConsumer allows you to add (or override) a consumer for a media type. 282 func (o *CountdownAPI) RegisterConsumer(mediaType string, consumer runtime.Consumer) { 283 o.customConsumers[mediaType] = consumer 284 } 285 286 // RegisterProducer allows you to add (or override) a producer for a media type. 287 func (o *CountdownAPI) RegisterProducer(mediaType string, producer runtime.Producer) { 288 o.customProducers[mediaType] = producer 289 } 290 291 // AddMiddlewareFor adds a http middleware to existing handler 292 func (o *CountdownAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) { 293 um := strings.ToUpper(method) 294 if path == "/" { 295 path = "" 296 } 297 o.Init() 298 if h, ok := o.handlers[um][path]; ok { 299 o.handlers[method][path] = builder(h) 300 } 301 }