cheikhshift/samb

View on GitHub
transpiler/template_strings.go

Summary

Maintainability
A
0 mins
Test Coverage
package transpiler

// cmdWrapper is used to generate go source
// within the generated program package.
var cmdWrapper string = `// GENERATED CODE, DO NOT EDIT!
package hooks

import (
        %s
)

func %s(){
    %s
}`

// globalWrapper is used to generate files
// for package global.
var globalWrapper string = `// Package globals has your applications
// global variables, exported as package identifiers
// GENERATED CODE, DO NOT EDIT!
package globals

%s`

// endpointWrapper is used
// to generate Go conditional statements
// to be met by request, to execute
// endpoint handler.
var endpointWrapper string = `%s{
        %s
    }`

// configWrapper is used to generate the file
// with a web server's port and host information
// as a variables.
var configWrapper string = `// GENERATED CODE, DO NOT EDIT!
package main

var port = "%s"
var host = "%s"
var webroot = "%s"`

// routeWrapper used to generate route handler function.
var routeWrapper string = `//package api contains your web app's handler definitions.
        // GENERATED CODE, DO NOT EDIT!!
        package api

        import (
        %s
    )

        // Handles routing of application.
        func Handler(w http.ResponseWriter, r *http.Request) {

            defer catchPanic(w,r)

            %s
}`

// recoveryWrapper is used to generate source file
// for package api's recover function.
var recoveryWrapper string = `package api

// Function used to get
// error message related 
// to panic.
func catchPanic(w http.ResponseWriter, r * http.Request){

    if n := recover(); n != nil {

        %s

    }
}`

// mainWrapper is used to generate the source for your
// web server. This launches the generated server source.
var mainWrapper string = `// GENERATED CODE, DO NOT EDIT!
package main

import "%s/pkg/api"
import "%s/pkg/hooks"
import "context"

func main(){

    hooks.Start()

    stop := make(chan os.Signal, 1)

    signal.Notify(stop, os.Interrupt)

    http.HandleFunc("/", api.Handler)

    h := &http.Server{Addr: host + ":" + port}

    go func() {
        <-stop
        cleanUp(h)
    }()

    err := h.ListenAndServe()
    if err != nil {
        log.Println(err)
    }

    
}

func cleanUp(h *http.Server){
    log.Println("\nShutting down the server...")

    ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
    h.Shutdown(ctx)

    hooks.Stop()
    log.Println("Server gracefully stopped")
    
}`