code.dwrz.net

Go monorepo.
Log | Files | Refs

logging_generate.go (2484B)


      1 //go:build clientlogmode
      2 // +build clientlogmode
      3 
      4 package main
      5 
      6 import (
      7 	"fmt"
      8 	"log"
      9 	"os"
     10 	"strings"
     11 	"text/template"
     12 )
     13 
     14 var config = struct {
     15 	ModeBits []string
     16 }{
     17 	// Items should be appended only to keep bit-flag positions stable
     18 	ModeBits: []string{
     19 		"Signing",
     20 		"Retries",
     21 		"Request",
     22 		"RequestWithBody",
     23 		"Response",
     24 		"ResponseWithBody",
     25 		"DeprecatedUsage",
     26 		"RequestEventMessage",
     27 		"ResponseEventMessage",
     28 	},
     29 }
     30 
     31 func bitName(name string) string {
     32 	return strings.ToUpper(name[:1]) + name[1:]
     33 }
     34 
     35 var tmpl = template.Must(template.New("ClientLogMode").Funcs(map[string]interface{}{
     36 	"symbolName": func(name string) string {
     37 		return "Log" + bitName(name)
     38 	},
     39 	"bitName": bitName,
     40 }).Parse(`// Code generated by aws/logging_generate.go DO NOT EDIT.
     41 
     42 package aws
     43 
     44 // ClientLogMode represents the logging mode of SDK clients. The client logging mode is a bit-field where
     45 // each bit is a flag that describes the logging behavior for one or more client components.
     46 // The entire 64-bit group is reserved for later expansion by the SDK.
     47 //
     48 // Example: Setting ClientLogMode to enable logging of retries and requests
     49 //  clientLogMode := aws.LogRetries | aws.LogRequest
     50 //
     51 // Example: Adding an additional log mode to an existing ClientLogMode value
     52 //  clientLogMode |= aws.LogResponse
     53 type ClientLogMode uint64
     54 
     55 // Supported ClientLogMode bits that can be configured to toggle logging of specific SDK events.
     56 const (
     57 {{- range $index, $field := .ModeBits }}
     58 	{{ (symbolName $field) }}{{- if (eq 0 $index) }} ClientLogMode = 1 << (64 - 1 - iota){{- end }}
     59 {{- end }}
     60 )
     61 {{ range $_, $field := .ModeBits }}
     62 // Is{{- bitName $field }} returns whether the {{ bitName $field }} logging mode bit is set
     63 func (m ClientLogMode) Is{{- bitName $field }}() bool {
     64 	return m&{{- (symbolName $field) }} != 0
     65 }
     66 {{ end }}
     67 {{- range $_, $field := .ModeBits }}
     68 // Clear{{- bitName $field }} clears the {{ bitName $field }} logging mode bit
     69 func (m *ClientLogMode) Clear{{- bitName $field }}() {
     70 	*m &^= {{ (symbolName $field) }}
     71 }
     72 {{ end -}}
     73 `))
     74 
     75 func main() {
     76 	uniqueBitFields := make(map[string]struct{})
     77 
     78 	for _, bitName := range config.ModeBits {
     79 		if _, ok := uniqueBitFields[strings.ToLower(bitName)]; ok {
     80 			panic(fmt.Sprintf("duplicate bit field: %s", bitName))
     81 		}
     82 		uniqueBitFields[bitName] = struct{}{}
     83 	}
     84 
     85 	file, err := os.Create("logging.go")
     86 	if err != nil {
     87 		log.Fatal(err)
     88 	}
     89 	defer file.Close()
     90 
     91 	err = tmpl.Execute(file, config)
     92 	if err != nil {
     93 		log.Fatal(err)
     94 	}
     95 }