@@ -46,17 +46,17 @@ type Index struct {
46
46
47
47
// indexPackage represents a single entry from package_index.json file.
48
48
type indexPackage struct {
49
- Name string `json:"name,required"`
50
- Maintainer string `json:"maintainer,required"`
51
- WebsiteURL string `json:"websiteUrl"`
52
- Email string `json:"email"`
53
- Platforms []* indexCoreRelease `json:"platforms,required"`
54
- Tools []* indexToolRelease `json:"tools,required"`
55
- Help indexHelpRelease `json:"help,omitempty"`
49
+ Name string `json:"name,required"`
50
+ Maintainer string `json:"maintainer,required"`
51
+ WebsiteURL string `json:"websiteUrl"`
52
+ Email string `json:"email"`
53
+ Platforms []* indexPlatformRelease `json:"platforms,required"`
54
+ Tools []* indexToolRelease `json:"tools,required"`
55
+ Help indexHelp `json:"help,omitempty"`
56
56
}
57
57
58
- // indexCoreRelease represents a single Core Platform from package_index.json file.
59
- type indexCoreRelease struct {
58
+ // indexPlatformRelease represents a single Core Platform from package_index.json file.
59
+ type indexPlatformRelease struct {
60
60
Name string `json:"name,required"`
61
61
Architecture string `json:"architecture"`
62
62
Version string `json:"version,required"`
@@ -65,8 +65,8 @@ type indexCoreRelease struct {
65
65
ArchiveFileName string `json:"archiveFileName,required"`
66
66
Checksum string `json:"checksum,required"`
67
67
Size int64 `json:"size,required,string"`
68
- Boards [] indexBoardRelease `json:"boards"`
69
- Help indexHelpRelease `json:"help,omitempty"`
68
+ BoardsNames [] indexBoardName `json:"boards"`
69
+ Help indexHelp `json:"help,omitempty"`
70
70
ToolDependencies []indexToolDependency `json:"toolsDependencies, required"`
71
71
}
72
72
@@ -79,60 +79,72 @@ type indexToolDependency struct {
79
79
80
80
// indexToolRelease represents a single Tool from package_index.json file.
81
81
type indexToolRelease struct {
82
- Name string `json:"name,required"`
83
- Version string `json:"version,required"`
84
- Systems []indexFlavourRelease `json:"systems,required"`
82
+ Name string `json:"name,required"`
83
+ Version string `json:"version,required"`
84
+ Systems []indexToolReleaseFlavour `json:"systems,required"`
85
85
}
86
86
87
- //indexFlavourRelease represents a single flavour in the package_index.json file.
88
- type indexFlavourRelease struct {
87
+ // indexToolReleaseFlavour represents a single tool flavour in the package_index.json file.
88
+ type indexToolReleaseFlavour struct {
89
89
OS string `json:"host,required"`
90
90
URL string `json:"url,required"`
91
91
ArchiveFileName string `json:"archiveFileName,required"`
92
92
Size int64 `json:"size,required,string"`
93
93
Checksum string `json:"checksum,required"`
94
94
}
95
95
96
- // indexBoardRelease represents a single Board as written in package_index.json file.
97
- type indexBoardRelease struct {
96
+ // indexBoardName represents a single Board as written in package_index.json file.
97
+ type indexBoardName struct {
98
98
Name string
99
99
}
100
100
101
- type indexHelpRelease struct {
101
+ type indexHelp struct {
102
102
Online string `json:"online,omitempty"`
103
103
}
104
104
105
- func (packag indexPackage ) extractPackage () ( pm * Package ) {
106
- pm = & Package {
107
- Name : packag .Name ,
108
- Maintainer : packag .Maintainer ,
109
- WebsiteURL : packag .WebsiteURL ,
110
- Email : packag .Email ,
111
- Cores : make ( map [string ]* Core , len ( packag . Platforms )) ,
112
- Tools : make ( map [string ]* Tool , len ( packag . Tools )) ,
105
+ func (pack indexPackage ) extractPackage () * Package {
106
+ p : = & Package {
107
+ Name : pack .Name ,
108
+ Maintainer : pack .Maintainer ,
109
+ WebsiteURL : pack .WebsiteURL ,
110
+ Email : pack .Email ,
111
+ Plaftorms : map [string ]* Platform {} ,
112
+ Tools : map [string ]* Tool {} ,
113
113
}
114
114
115
- for _ , tool := range packag .Tools {
116
- pm .addTool (tool )
115
+ for _ , tool := range pack .Tools {
116
+ name := tool .Name
117
+ if p .Tools [name ] == nil {
118
+ p .Tools [name ] = tool .extractTool ()
119
+ } else {
120
+ p .Tools [name ].Releases [tool .Version ] = tool .extractRelease ()
121
+ }
117
122
}
118
- for _ , core := range packag .Platforms {
119
- pm .addCore (core )
123
+
124
+ for _ , platform := range pack .Platforms {
125
+ name := platform .Architecture
126
+ if p .Plaftorms [name ] == nil {
127
+ p .Plaftorms [name ] = platform .extractPlatform ()
128
+ } else {
129
+ release := platform .extractRelease ()
130
+ p .Plaftorms [name ].Releases [release .Version ] = release
131
+ }
120
132
}
121
133
122
- return
134
+ return p
123
135
}
124
136
125
- func (release indexCoreRelease ) extractCore () * Core {
126
- return & Core {
137
+ func (release indexPlatformRelease ) extractPlatform () * Platform {
138
+ return & Platform {
127
139
Name : release .Name ,
128
140
Architecture : release .Architecture ,
129
141
Category : release .Category ,
130
- Releases : map [string ]* Release {release .Version : release .extractRelease ()},
142
+ Releases : map [string ]* PlatformRelease {release .Version : release .extractRelease ()},
131
143
}
132
144
}
133
145
134
- func (release indexCoreRelease ) extractRelease () * Release {
135
- return & Release {
146
+ func (release indexPlatformRelease ) extractRelease () * PlatformRelease {
147
+ return & PlatformRelease {
136
148
Version : release .Version ,
137
149
ArchiveFileName : release .ArchiveFileName ,
138
150
Checksum : release .Checksum ,
@@ -143,7 +155,7 @@ func (release indexCoreRelease) extractRelease() *Release {
143
155
}
144
156
}
145
157
146
- func (release indexCoreRelease ) extractDeps () ToolDependencies {
158
+ func (release indexPlatformRelease ) extractDeps () ToolDependencies {
147
159
ret := make (ToolDependencies , len (release .ToolDependencies ))
148
160
for i , dep := range release .ToolDependencies {
149
161
ret [i ] = & ToolDependency {
@@ -155,21 +167,21 @@ func (release indexCoreRelease) extractDeps() ToolDependencies {
155
167
return ret
156
168
}
157
169
158
- func (release indexCoreRelease ) extractBoards () []string {
159
- boards := make ([]string , len (release .Boards ))
160
- for i , board := range release .Boards {
170
+ func (release indexPlatformRelease ) extractBoards () []string {
171
+ boards := make ([]string , len (release .BoardsNames ))
172
+ for i , board := range release .BoardsNames {
161
173
boards [i ] = board .Name
162
174
}
163
175
return boards
164
176
}
165
177
166
178
// extractTool extracts a Tool object from an indexToolRelease entry.
167
179
func (itr indexToolRelease ) extractTool () * Tool {
168
- releases := make (map [string ]* ToolRelease , len (itr .Systems ))
169
- releases [itr .Version ] = itr .extractRelease ()
170
180
return & Tool {
171
- Name : itr .Name ,
172
- Releases : releases ,
181
+ Name : itr .Name ,
182
+ Releases : map [string ]* ToolRelease {
183
+ itr .Version : itr .extractRelease (),
184
+ },
173
185
}
174
186
}
175
187
0 commit comments