@@ -28,11 +28,29 @@ func generateComponentsSetCommand(ctx *cli.Context) error {
2828 return fmt .Errorf ("failed to parse module: %w" , err )
2929 }
3030
31+ keys := map [string ]struct {}{}
32+ for key := range ps .Constructors {
33+ keys [key ] = struct {}{}
34+ }
35+ for key := range ps .Updaters {
36+ keys [key ] = struct {}{}
37+ }
38+
3139 writer := bytes.Buffer {}
32- for name , list := range ps . Components {
40+ for name := range keys {
3341 log .Printf ("Generating %s\n " , name )
3442 writer .Reset ()
35- if err := buildComponentSet (& writer , name , list ); err != nil {
43+ cons := ps .Constructors [name ]
44+ if cons == nil {
45+ cons = []parser.Component {}
46+ }
47+
48+ upds := ps .Updaters [name ]
49+ if upds == nil {
50+ upds = []parser.Component {}
51+ }
52+
53+ if err := buildComponentSet (& writer , name , cons , upds ); err != nil {
3654 return fmt .Errorf ("failed to build component set: %w" , err )
3755 }
3856
@@ -52,11 +70,27 @@ func generateComponentsSetCommand(ctx *cli.Context) error {
5270 return nil
5371}
5472
55- func buildComponentSet (writer * bytes.Buffer , setName string , list []parser.Component ) error {
73+ func buildComponentSet (writer * bytes.Buffer , setName string , cons []parser. Component , upds []parser.Component ) error {
5674 pkgName := map [string ]string {}
5775 pkgPathMap := map [string ]string {}
5876
59- for i , comp := range list {
77+ for i , comp := range cons {
78+ if _ , ok := pkgName [comp .PackageName ]; ! ok {
79+ pkgName [comp .PackageName ] = comp .PackagePath
80+ pkgPathMap [comp .PackagePath ] = comp .PackageName
81+ continue
82+ }
83+
84+ if pkgName [comp .PackageName ] == comp .PackagePath {
85+ continue
86+ }
87+
88+ comp .PackageName = fmt .Sprintf ("%s%d" , comp .PackageName , i )
89+ pkgName [comp .PackageName ] = comp .PackagePath
90+ pkgPathMap [comp .PackagePath ] = comp .PackageName
91+ }
92+
93+ for i , comp := range upds {
6094 if _ , ok := pkgName [comp .PackageName ]; ! ok {
6195 pkgName [comp .PackageName ] = comp .PackagePath
6296 pkgPathMap [comp .PackagePath ] = comp .PackageName
@@ -90,7 +124,8 @@ func buildComponentSet(writer *bytes.Buffer, setName string, list []parser.Compo
90124 writer .WriteString ("type " )
91125 writer .WriteString (structName )
92126 writer .WriteString (" struct {\n " )
93- writer .WriteString ("\t list []any" )
127+ writer .WriteString ("\t cons []any\n " )
128+ writer .WriteString ("\t upds []any\n " )
94129 writer .WriteString ("\n }\n \n " )
95130
96131 writer .WriteString ("func New" )
@@ -101,8 +136,17 @@ func buildComponentSet(writer *bytes.Buffer, setName string, list []parser.Compo
101136 writer .WriteString ("\t return &" )
102137 writer .WriteString (structName )
103138 writer .WriteString ("{\n " )
104- writer .WriteString ("\t \t list: []any{\n " )
105- for _ , comp := range list {
139+ writer .WriteString ("\t \t cons: []any{\n " )
140+ for _ , comp := range cons {
141+ writer .WriteString ("\t \t \t " )
142+ writer .WriteString (comp .PackageName )
143+ writer .WriteString ("." )
144+ writer .WriteString (comp .FunctionName )
145+ writer .WriteString (",\n " )
146+ }
147+ writer .WriteString ("\t \t },\n " )
148+ writer .WriteString ("\t \t upds: []any{\n " )
149+ for _ , comp := range upds {
106150 writer .WriteString ("\t \t \t " )
107151 writer .WriteString (comp .PackageName )
108152 writer .WriteString ("." )
@@ -115,9 +159,17 @@ func buildComponentSet(writer *bytes.Buffer, setName string, list []parser.Compo
115159
116160 writer .WriteString ("func (s *" )
117161 writer .WriteString (structName )
118- writer .WriteString (") List() []any {\n " )
119- writer .WriteString ("\t clone := make([]any, len(s.list))\n " )
120- writer .WriteString ("\t copy(clone, s.list)\n " )
162+ writer .WriteString (") Constructors() []any {\n " )
163+ writer .WriteString ("\t clone := make([]any, len(s.cons))\n " )
164+ writer .WriteString ("\t copy(clone, s.cons)\n " )
165+ writer .WriteString ("\t return clone\n " )
166+ writer .WriteString ("}\n " )
167+
168+ writer .WriteString ("func (s *" )
169+ writer .WriteString (structName )
170+ writer .WriteString (") Updaters() []any {\n " )
171+ writer .WriteString ("\t clone := make([]any, len(s.upds))\n " )
172+ writer .WriteString ("\t copy(clone, s.upds)\n " )
121173 writer .WriteString ("\t return clone\n " )
122174 writer .WriteString ("}\n " )
123175
0 commit comments