github.com/thetreep/go-swagger@v0.0.0-20240223100711-35af64f14f01/generator/templates/cli/schema.gotmpl (about)

     1  {{/*util functions to generate register and retrieve functions for a model*/}}
     2  
     3  {{ define "modelschemacli" }}
     4      {{/*some guards to prevent rendering unsupported models types. TODO: remove this guard*/}}
     5      {{if or .IsPrimitive .IsComplexObject }}
     6          {{ template "modelschemacliinternal" . }}
     7      {{ else }}
     8          // Name: [{{.Name}}], Type:[{{ .GoType }}], register and retrieve functions are not rendered by go-swagger cli
     9      {{ end }}
    10  {{ end }}
    11  
    12  {{/*since register and retrieve are the same for properties and all of, share them here*/}}
    13  {{ define "propertyregistor" }}
    14          {{- if .IsPrimitive }}
    15              {{ template "primitiveregistrator" . }}
    16          {{- else if .IsArray }}
    17      // warning: {{.Name}} {{ .GoType }} array type is not supported by go-swagger cli yet
    18          {{- else if .IsMap }}
    19      // warning: {{.Name}} {{ .GoType }} map type is not supported by go-swagger cli yet
    20          {{- else if .IsComplexObject }} {{/* struct case */}}
    21      {{ template "flagnamevar" . }}
    22      if err := registerModel{{pascalize (dropPackage .GoType) }}Flags(depth + 1, {{ camelize .Name }}FlagName, cmd); err != nil{
    23          return err
    24      }
    25          {{- else }}
    26      // warning: {{.Name}} {{ .GoType }} unkown type is not supported by go-swagger cli yet
    27          {{- end }}
    28  {{ end }}
    29  
    30  {{ define "propertyretriever" }}
    31      {{- $flagNameVar := printf "%vFlagName" (camelize .Name) }}
    32      {{- $flagValueVar := printf "%vFlagValue" (camelize .Name) }}
    33      {{ $flagNameVar }} := fmt.Sprintf("%v.{{ .Name }}", cmdPrefix)
    34      if cmd.Flags().Changed({{ $flagNameVar }}) {
    35          {{- if .IsPrimitive }}
    36              {{ template "primitiveretriever" . }}
    37              retAdded = true
    38          {{- else if .IsArray }}
    39          // warning: {{ .Name }} array type {{ .GoType }} is not supported by go-swagger cli yet
    40          {{- else if .IsMap }}
    41          // warning: {{ .Name }} map type {{ .GoType }} is not supported by go-swagger cli yet
    42          {{- else if .IsComplexObject }}
    43          // info: complex object {{.Name}} {{.GoType}} is retrieved outside this Changed() block
    44          {{- else }}
    45          // warning: {{.Name}} {{ .GoType }} unkown type is not supported by go-swagger cli yet
    46          {{- end }}
    47  	}
    48      {{- if and  .IsComplexObject (not .IsArray) (not .IsMap) (not .IsStream) }}
    49      {{ $flagValueVar }} := m.{{pascalize .Name}}
    50      if swag.IsZero({{ $flagValueVar }}){
    51          {{ $flagValueVar }} = {{if .IsNullable }}&{{end}}{{if containsPkgStr .GoType}}{{ .GoType }}{{else}}{{ .Pkg }}.{{.GoType}}{{ end }}{}
    52      }
    53      {{/* always lift the payload to pointer and pass to model retrieve function. If .GoType has pkg str, use it, else use .Pkg+.GoType */}}
    54      err, {{camelize .Name }}Added := retrieveModel{{pascalize (dropPackage .GoType) }}Flags(depth + 1, {{if not .IsNullable }}&{{end}}{{ $flagValueVar }}, {{ $flagNameVar }}, cmd)
    55      if err != nil{
    56          return err, false
    57      }
    58      retAdded = retAdded || {{camelize .Name }}Added
    59      if {{camelize .Name }}Added {
    60          m.{{pascalize .Name}} = {{ $flagValueVar }}
    61      }
    62  	{{- end }}
    63  {{ end }}
    64  
    65  {{ define "modelschemacliinternal" }} {{/*used by model definition and in params model*/}}
    66  {{- $modelName := .Name }}
    67  {{/*model package is filled by generator*/}}
    68  {{ $modelPkg := toPackageName .Pkg}}
    69  {{ $modelType := .GoType }}
    70  
    71  // register flags to command
    72  func registerModel{{pascalize .Name}}Flags(depth int, cmdPrefix string, cmd *cobra.Command) error {
    73  	{{ range .AllOf }}
    74          {{- if not .IsAnonymous }}{{/* named type composition */}}
    75              {{ if or  .IsPrimitive .IsComplexObject }}
    76      // register embedded {{ .GoType }} flags
    77          {{/*defer all of registration to the model's regristor method. embed should not lift cmdPrefix */}}
    78      if err := registerModel{{ pascalize (dropPackage .GoType) }}Flags(depth, cmdPrefix, cmd); err != nil{
    79          return err
    80      }
    81              {{ else }}
    82                  // {{ .Name }} {{ .GoType }} register is skipped
    83              {{ end }}
    84          {{ else }}{{/*inline definition. assume only properties are used*/}}
    85      // register anonymous fields for {{.Name}}
    86              {{ $anonName := .Name }}
    87              {{ range .Properties }}
    88      if err := register{{ pascalize $modelName }}PropAnon{{pascalize $anonName }}{{ pascalize .Name }}(depth, cmdPrefix, cmd); err != nil{
    89          return err
    90      }
    91              {{ end }}
    92          {{ end }}
    93      {{ end }}
    94      {{ range .Properties }}
    95      if err := register{{ pascalize $modelName }}Prop{{ pascalize .Name }}(depth, cmdPrefix, cmd); err != nil{
    96          return err
    97      }
    98      {{ end }}
    99      return nil
   100  }
   101  
   102  {{ range .AllOf }}
   103      {{- if .IsAnonymous }}{{/* inline definition. schema case is defered. */}}
   104  // inline definition name {{ .Name }}, type {{.GoType}}
   105          {{ $anonName := .Name }}
   106          {{ range .Properties }}
   107  func register{{ pascalize $modelName }}PropAnon{{pascalize $anonName }}{{ pascalize .Name }}(depth int, cmdPrefix string, cmd *cobra.Command) error {
   108      if depth > maxDepth {
   109          return nil
   110      }
   111      {{ template "propertyregistor" . }}
   112      return nil
   113  }
   114          {{ end }}
   115      {{ end }}
   116  {{ end }}
   117  
   118  {{/*register functions for each fields in this model */}}
   119  {{ range .Properties }}
   120  func register{{ pascalize $modelName }}Prop{{ pascalize .Name }}(depth int, cmdPrefix string, cmd *cobra.Command) error{
   121      if depth > maxDepth {
   122          return nil
   123      }
   124      {{ template "propertyregistor" .}}
   125      return nil
   126  }
   127  {{ end }} {{/*Properties*/}}
   128  
   129  // retrieve flags from commands, and set value in model. Return true if any flag is passed by user to fill model field.
   130  func retrieveModel{{pascalize $modelName }}Flags(depth int, m *{{if containsPkgStr .GoType}}{{ .GoType }}{{else}}{{ .Pkg }}.{{.GoType}}{{ end }}, cmdPrefix string, cmd *cobra.Command) (error, bool) {
   131      retAdded := false
   132  	{{ range .AllOf }}
   133          {{- if not .IsAnonymous }}{{/* named type composition */}}
   134              {{ if or  .IsPrimitive .IsComplexObject }}
   135      // retrieve model {{.GoType}}
   136      err, {{camelize .Name }}Added := retrieveModel{{ pascalize (dropPackage .GoType) }}Flags(depth, &m.{{pascalize (dropPackage .GoType) }}, cmdPrefix, cmd)
   137      if err != nil{
   138          return err, false
   139      }
   140      retAdded = retAdded || {{camelize .Name }}Added
   141              {{ else }} {{/*inline anonymous case*/}}
   142  
   143              {{ end }}
   144          {{- else }}
   145      // retrieve allOf {{.Name}} fields
   146              {{ $anonName := .Name }}
   147              {{ range .Properties }}
   148      err, {{camelize .Name}}Added := retrieve{{ pascalize $modelName }}PropAnon{{pascalize $anonName }}{{ pascalize .Name }}Flags(depth, m, cmdPrefix, cmd)
   149      if err != nil{
   150          return err, false
   151      }
   152      retAdded = retAdded || {{ camelize .Name }}Added
   153              {{ end }}
   154          {{- end }}
   155      {{ end }}
   156      {{ range .Properties }}
   157          err, {{ camelize .Name }}Added := retrieve{{pascalize $modelName }}Prop{{pascalize .Name }}Flags(depth, m, cmdPrefix, cmd)
   158          if err != nil{
   159              return err, false
   160          }
   161          retAdded = retAdded || {{ camelize .Name }}Added
   162      {{ end }}
   163      return nil, retAdded
   164  }
   165  
   166  {{ range .AllOf }}
   167      {{- if .IsAnonymous }}{{/* inline definition. schema case is defered. */}}
   168  // define retrieve functions for fields for inline definition name {{ .Name }}
   169          {{ $anonName := .Name }}
   170          {{ range .Properties }} {{/*anonymous fields will be registered directly on parent model*/}}
   171  func retrieve{{ pascalize $modelName }}PropAnon{{pascalize $anonName }}{{ pascalize .Name }}Flags(depth int, m *{{if containsPkgStr $modelType}}{{ $modelType }}{{else}}{{ $modelPkg }}.{{$modelType}}{{ end }},cmdPrefix string, cmd *cobra.Command) (error,bool) {
   172      if depth > maxDepth {
   173          return nil, false
   174      }
   175      retAdded := false
   176      {{ template "propertyretriever" . }}
   177      return nil, retAdded
   178  }
   179          {{ end }}
   180      {{ end }}
   181  {{ end }}
   182  
   183  {{ range .Properties }}
   184  func retrieve{{pascalize $modelName }}Prop{{pascalize .Name }}Flags(depth int, m *{{if $modelPkg}}{{$modelPkg}}.{{ dropPackage $modelType }}{{else}}{{ $modelType }}{{end}}, cmdPrefix string, cmd *cobra.Command) (error, bool) {
   185      if depth > maxDepth {
   186          return nil, false
   187      }
   188      retAdded := false
   189      {{ template "propertyretriever" . }}
   190      return nil, retAdded
   191  }
   192  {{ end }} {{/*properties*/}}
   193  {{ end }} {{/*define*/}}