github.com/djarvur/go-swagger@v0.18.0/examples/stream-server/restapi/configure_countdown.go (about) 1 // This file is safe to edit. Once it exists it will not be overwritten 2 3 package restapi 4 5 import ( 6 "crypto/tls" 7 "io" 8 "net/http" 9 10 errors "github.com/go-openapi/errors" 11 runtime "github.com/go-openapi/runtime" 12 middleware "github.com/go-openapi/runtime/middleware" 13 "github.com/go-swagger/go-swagger/examples/stream-server/biz" 14 15 "github.com/go-swagger/go-swagger/examples/stream-server/restapi/operations" 16 ) 17 18 //go:generate swagger generate server --target .. --name Countdown --spec ../swagger.yml 19 20 func configureFlags(api *operations.CountdownAPI) { 21 // api.CommandLineOptionsGroups = []swag.CommandLineOptionsGroup{ ... } 22 } 23 24 func configureAPI(api *operations.CountdownAPI) http.Handler { 25 // configure the api here 26 api.ServeError = errors.ServeError 27 28 // Set your custom logger if needed. Default one is log.Printf 29 // Expected interface func(string, ...interface{}) 30 // 31 // Example: 32 // api.Logger = log.Printf 33 34 api.JSONConsumer = runtime.JSONConsumer() 35 36 api.JSONProducer = runtime.JSONProducer() 37 38 myCounter := &biz.MyCounter{} 39 api.ElapseHandler = operations.ElapseHandlerFunc(func(params operations.ElapseParams) middleware.Responder { 40 if params.Length == 11 { 41 return operations.NewElapseForbidden() 42 } 43 return middleware.ResponderFunc(func(rw http.ResponseWriter, p runtime.Producer) { 44 f, _ := rw.(http.Flusher) 45 rw.WriteHeader(200) 46 _ = myCounter.Down(params.Length, &flushWriter{f: f, w: rw}) 47 }) 48 49 }) 50 51 api.ServerShutdown = func() {} 52 53 return setupGlobalMiddleware(api.Serve(setupMiddlewares)) 54 } 55 56 // Via https://play.golang.org/p/PpbPyXbtEs 57 type flushWriter struct { 58 f http.Flusher 59 w io.Writer 60 } 61 62 // Via https://play.golang.org/p/PpbPyXbtEs 63 func (fw *flushWriter) Write(p []byte) (n int, err error) { 64 n, err = fw.w.Write(p) 65 if fw.f != nil { 66 fw.f.Flush() 67 } 68 return 69 } 70 71 // The TLS configuration before HTTPS server starts. 72 func configureTLS(tlsConfig *tls.Config) { 73 // Make all necessary changes to the TLS configuration here. 74 } 75 76 // As soon as server is initialized but not run yet, this function will be called. 77 // If you need to modify a config, store server instance to stop it individually later, this is the place. 78 // This function can be called multiple times, depending on the number of serving schemes. 79 // scheme value will be set accordingly: "http", "https" or "unix" 80 func configureServer(s *http.Server, scheme, addr string) { 81 } 82 83 // The middleware configuration is for the handler executors. These do not apply to the swagger.json document. 84 // The middleware executes after routing but before authentication, binding and validation 85 func setupMiddlewares(handler http.Handler) http.Handler { 86 return handler 87 } 88 89 // The middleware configuration happens before anything, this middleware also applies to serving the swagger.json document. 90 // So this is a good place to plug in a panic handling middleware, logging and metrics 91 func setupGlobalMiddleware(handler http.Handler) http.Handler { 92 return handler 93 }