gen_scalars.go raw

   1  //go:build codegen
   2  // +build codegen
   3  
   4  package ptr
   5  
   6  import "strings"
   7  
   8  func GetScalars() Scalars {
   9  	return Scalars{
  10  		{Type: "bool"},
  11  		{Type: "byte"},
  12  		{Type: "string"},
  13  		{Type: "int"},
  14  		{Type: "int8"},
  15  		{Type: "int16"},
  16  		{Type: "int32"},
  17  		{Type: "int64"},
  18  		{Type: "uint"},
  19  		{Type: "uint8"},
  20  		{Type: "uint16"},
  21  		{Type: "uint32"},
  22  		{Type: "uint64"},
  23  		{Type: "float32"},
  24  		{Type: "float64"},
  25  		{Type: "Time", Import: &Import{Path: "time"}},
  26  		{Type: "Duration", Import: &Import{Path: "time"}},
  27  	}
  28  }
  29  
  30  // Import provides the import path and optional alias
  31  type Import struct {
  32  	Path  string
  33  	Alias string
  34  }
  35  
  36  // Package returns the Go package name for the import. Returns alias if set.
  37  func (i Import) Package() string {
  38  	if v := i.Alias; len(v) != 0 {
  39  		return v
  40  	}
  41  
  42  	if v := i.Path; len(v) != 0 {
  43  		parts := strings.Split(v, "/")
  44  		pkg := parts[len(parts)-1]
  45  		return pkg
  46  	}
  47  
  48  	return ""
  49  }
  50  
  51  // Scalar provides the definition of a type to generate pointer utilities for.
  52  type Scalar struct {
  53  	Type   string
  54  	Import *Import
  55  }
  56  
  57  // Name returns the exported function name for the type.
  58  func (t Scalar) Name() string {
  59  	return strings.Title(t.Type)
  60  }
  61  
  62  // Symbol returns the scalar's Go symbol with path if needed.
  63  func (t Scalar) Symbol() string {
  64  	if t.Import != nil {
  65  		return t.Import.Package() + "." + t.Type
  66  	}
  67  	return t.Type
  68  }
  69  
  70  // Scalars is a list of scalars.
  71  type Scalars []Scalar
  72  
  73  // Imports returns all imports for the scalars.
  74  func (ts Scalars) Imports() []*Import {
  75  	imports := []*Import{}
  76  	for _, t := range ts {
  77  		if v := t.Import; v != nil {
  78  			imports = append(imports, v)
  79  		}
  80  	}
  81  
  82  	return imports
  83  }
  84