mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Generate public deep-copy functions
This commit is contained in:
parent
5914deeac8
commit
205e6899be
@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package generators
|
package generators
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
@ -202,6 +203,16 @@ func (g *genDeepCopy) Imports(c *generator.Context) (imports []string) {
|
|||||||
return importLines
|
return importLines
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func argsFromType(t *types.Type) interface{} {
|
||||||
|
return map[string]interface{}{
|
||||||
|
"type": t,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *genDeepCopy) funcNameTmpl(t *types.Type) string {
|
||||||
|
return "DeepCopy_$.type|public$"
|
||||||
|
}
|
||||||
|
|
||||||
func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error {
|
func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
||||||
sw.Do("func init() {\n", nil)
|
sw.Do("func init() {\n", nil)
|
||||||
@ -211,7 +222,7 @@ func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error {
|
|||||||
sw.Do("if err := api.Scheme.AddGeneratedDeepCopyFuncs(\n", nil)
|
sw.Do("if err := api.Scheme.AddGeneratedDeepCopyFuncs(\n", nil)
|
||||||
}
|
}
|
||||||
for _, t := range g.typesForInit {
|
for _, t := range g.typesForInit {
|
||||||
sw.Do("deepCopy_$.|public$,\n", t)
|
sw.Do(fmt.Sprintf("%s,\n", g.funcNameTmpl(t)), argsFromType(t))
|
||||||
}
|
}
|
||||||
sw.Do("); err != nil {\n", nil)
|
sw.Do("); err != nil {\n", nil)
|
||||||
sw.Do("// if one of the deep copy functions is malformed, detect it immediately.\n", nil)
|
sw.Do("// if one of the deep copy functions is malformed, detect it immediately.\n", nil)
|
||||||
@ -224,7 +235,8 @@ func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error {
|
|||||||
// GenerateType makes the body of a file implementing a set for type t.
|
// GenerateType makes the body of a file implementing a set for type t.
|
||||||
func (g *genDeepCopy) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *genDeepCopy) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
||||||
sw.Do("func deepCopy_$.|public$(in $.|raw$, out *$.|raw$, c *conversion.Cloner) error {\n", t)
|
funcName := g.funcNameTmpl(t)
|
||||||
|
sw.Do(fmt.Sprintf("func %s(in $.type|raw$, out *$.type|raw$, c *conversion.Cloner) error {\n", funcName), argsFromType(t))
|
||||||
g.generateFor(t, sw)
|
g.generateFor(t, sw)
|
||||||
sw.Do("return nil\n", nil)
|
sw.Do("return nil\n", nil)
|
||||||
sw.Do("}\n\n", nil)
|
sw.Do("}\n\n", nil)
|
||||||
@ -270,7 +282,8 @@ func (g *genDeepCopy) doMap(t *types.Type, sw *generator.SnippetWriter) {
|
|||||||
} else {
|
} else {
|
||||||
if g.copyableWithinPackage(t.Elem) {
|
if g.copyableWithinPackage(t.Elem) {
|
||||||
sw.Do("newVal := new($.|raw$)\n", t.Elem)
|
sw.Do("newVal := new($.|raw$)\n", t.Elem)
|
||||||
sw.Do("if err := deepCopy_$.|public$(val, newVal, c); err != nil {\n", t.Elem)
|
funcName := g.funcNameTmpl(t.Elem)
|
||||||
|
sw.Do(fmt.Sprintf("if err := %s(val, newVal, c); err != nil {\n", funcName), argsFromType(t.Elem))
|
||||||
sw.Do("return err\n", nil)
|
sw.Do("return err\n", nil)
|
||||||
sw.Do("}\n", nil)
|
sw.Do("}\n", nil)
|
||||||
sw.Do("(*out)[key] = *newVal\n", nil)
|
sw.Do("(*out)[key] = *newVal\n", nil)
|
||||||
@ -298,7 +311,8 @@ func (g *genDeepCopy) doSlice(t *types.Type, sw *generator.SnippetWriter) {
|
|||||||
if t.Elem.IsAssignable() {
|
if t.Elem.IsAssignable() {
|
||||||
sw.Do("(*out)[i] = in[i]\n", nil)
|
sw.Do("(*out)[i] = in[i]\n", nil)
|
||||||
} else if g.copyableWithinPackage(t.Elem) {
|
} else if g.copyableWithinPackage(t.Elem) {
|
||||||
sw.Do("if err := deepCopy_$.|public$(in[i], &(*out)[i], c); err != nil {\n", t.Elem)
|
funcName := g.funcNameTmpl(t.Elem)
|
||||||
|
sw.Do(fmt.Sprintf("if err := %s(in[i], &(*out)[i], c); err != nil {\n", funcName), argsFromType(t.Elem))
|
||||||
sw.Do("return err\n", nil)
|
sw.Do("return err\n", nil)
|
||||||
sw.Do("}\n", nil)
|
sw.Do("}\n", nil)
|
||||||
} else {
|
} else {
|
||||||
@ -330,7 +344,8 @@ func (g *genDeepCopy) doStruct(t *types.Type, sw *generator.SnippetWriter) {
|
|||||||
sw.Do("}\n", nil)
|
sw.Do("}\n", nil)
|
||||||
case types.Struct:
|
case types.Struct:
|
||||||
if g.copyableWithinPackage(m.Type) {
|
if g.copyableWithinPackage(m.Type) {
|
||||||
sw.Do("if err := deepCopy_$.type|public$(in.$.name$, &out.$.name$, c); err != nil {\n", args)
|
funcName := g.funcNameTmpl(m.Type)
|
||||||
|
sw.Do(fmt.Sprintf("if err := %s(in.$.name$, &out.$.name$, c); err != nil {\n", funcName), args)
|
||||||
sw.Do("return err\n", nil)
|
sw.Do("return err\n", nil)
|
||||||
sw.Do("}\n", nil)
|
sw.Do("}\n", nil)
|
||||||
} else {
|
} else {
|
||||||
@ -364,7 +379,8 @@ func (g *genDeepCopy) doPointer(t *types.Type, sw *generator.SnippetWriter) {
|
|||||||
if t.Elem.Kind == types.Builtin {
|
if t.Elem.Kind == types.Builtin {
|
||||||
sw.Do("**out = *in", nil)
|
sw.Do("**out = *in", nil)
|
||||||
} else if g.copyableWithinPackage(t.Elem) {
|
} else if g.copyableWithinPackage(t.Elem) {
|
||||||
sw.Do("if err := deepCopy_$.|public$(*in, *out, c); err != nil {\n", t.Elem)
|
funcName := g.funcNameTmpl(t.Elem)
|
||||||
|
sw.Do(fmt.Sprintf("if err := %s(*in, *out, c); err != nil {\n", funcName), argsFromType(t.Elem))
|
||||||
sw.Do("return err\n", nil)
|
sw.Do("return err\n", nil)
|
||||||
sw.Do("}\n", nil)
|
sw.Do("}\n", nil)
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user