Skip to content

Commit ce0287d

Browse files
rkurdukamichaelhtm
authored andcommitted
changes for aws-sdk-go-v2
1 parent 631aeb1 commit ce0287d

File tree

13 files changed

+943
-137
lines changed

13 files changed

+943
-137
lines changed

apiv2/loadModelV2.go

Lines changed: 258 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,258 @@
1+
package apiv2
2+
3+
import (
4+
"strings"
5+
6+
sdkmodel "github.com/aws/aws-sdk-go/private/model/api"
7+
)
8+
9+
type ModelV2Shape struct {
10+
Name string
11+
Raw_shape map[string]interface{}
12+
ServiceAlias string
13+
ServiceObjV2
14+
}
15+
16+
func NewModelV2Shape(raw_shape interface{}, key string, serviceAlias string) *ModelV2Shape {
17+
18+
return &ModelV2Shape{
19+
Name: key,
20+
Raw_shape: raw_shape.(map[string]interface{}),
21+
ServiceAlias: serviceAlias,
22+
}
23+
}
24+
25+
func (m *ModelV2Shape) GetShapeType() string {
26+
27+
for key, value := range m.Raw_shape {
28+
if key == "type" {
29+
switch value.(string) {
30+
case "structure":
31+
return "structure"
32+
case "map":
33+
return "map"
34+
case "list":
35+
return "list"
36+
case "string":
37+
return "string"
38+
case "integer":
39+
return "integer"
40+
case "long":
41+
return "long"
42+
case "double":
43+
return "double"
44+
case "boolean":
45+
return "boolean"
46+
case "timestamp":
47+
return "timestamp"
48+
case "enum":
49+
return "enum"
50+
case "operation":
51+
return "operation"
52+
case "blob":
53+
return "blob"
54+
default:
55+
return "unknown"
56+
}
57+
}
58+
}
59+
return "unknown"
60+
}
61+
62+
func (m *ModelV2Shape) CreateShape(name string) *sdkmodel.Shape {
63+
64+
api := sdkmodel.API{}
65+
66+
api.AddImport("time")
67+
68+
new_shape := &sdkmodel.Shape{
69+
ShapeName: *m.RemovePrefix(name, m.ServiceAlias),
70+
Exception: false,
71+
MemberRefs: make(map[string]*sdkmodel.ShapeRef),
72+
MemberRef: sdkmodel.ShapeRef{},
73+
API: &api,
74+
}
75+
76+
if Type, ok := m.Raw_shape["type"]; ok {
77+
if Type.(string) == "enum" {
78+
new_shape.Type = "string"
79+
} else {
80+
new_shape.Type = Type.(string)
81+
}
82+
}
83+
84+
return new_shape
85+
86+
}
87+
88+
func (m *ModelV2Shape) AddDefaultMembers(new_shape *sdkmodel.Shape) *sdkmodel.Shape {
89+
90+
if m.GetShapeType() != "structure" || m.GetShapeType() != "list" || m.GetShapeType() != "enum" {
91+
for key, _ := range m.Raw_shape {
92+
new_shape.MemberRefs[key] = &sdkmodel.ShapeRef{
93+
Shape: m.CreateShape(*m.RemovePrefix(key, m.ServiceAlias)),
94+
ShapeName: *m.RemovePrefix(key, m.ServiceAlias),
95+
}
96+
}
97+
}
98+
99+
return new_shape
100+
}
101+
102+
func (m *ModelV2Shape) AddStructMembers(new_shape *sdkmodel.Shape) *sdkmodel.Shape {
103+
104+
if m.GetShapeType() == "structure" {
105+
106+
for key, members := range m.Raw_shape["members"].(map[string]interface{}) {
107+
108+
if value, ok := members.(map[string]interface{})["target"]; ok {
109+
110+
valueRawShape := GetRawShape(value.(string))
111+
memberModel := NewModelV2Shape(valueRawShape, value.(string), m.ServiceAlias)
112+
key = memberModel.CapitaliseName(&key)
113+
114+
new_shape.MemberRefs[key] = &sdkmodel.ShapeRef{
115+
Shape: memberModel.CreateShape(*memberModel.RemovePrefix(value.(string), memberModel.ServiceAlias)),
116+
ShapeName: *memberModel.RemovePrefix(value.(string), memberModel.ServiceAlias),
117+
}
118+
119+
switch new_shape.MemberRefs[key].Shape.Type {
120+
case "list":
121+
new_shape.MemberRefs[key].Shape = memberModel.AddListRef(new_shape.MemberRefs[key].Shape)
122+
case "structure":
123+
new_shape.MemberRefs[key].Shape = memberModel.AddStructMembers(new_shape.MemberRefs[key].Shape)
124+
}
125+
if memberModel.GetShapeType() == "enum" {
126+
new_shape.MemberRefs[key].Shape = memberModel.AddEnumValues(new_shape.MemberRefs[key].Shape)
127+
}
128+
129+
}
130+
131+
}
132+
}
133+
return new_shape
134+
}
135+
136+
func (m *ModelV2Shape) AddListRef(new_shape *sdkmodel.Shape) *sdkmodel.Shape {
137+
138+
if m.GetShapeType() == "list" {
139+
for _, members := range m.Raw_shape["member"].(map[string]interface{}) {
140+
141+
if value, ok := members.(string); ok {
142+
143+
valueRawShape := GetRawShape(value)
144+
memberModel := NewModelV2Shape(valueRawShape, new_shape.ShapeName, m.ServiceAlias)
145+
146+
new_shape.MemberRef = sdkmodel.ShapeRef{
147+
Shape: memberModel.CreateShape(*memberModel.RemovePrefix(value, memberModel.ServiceAlias)),
148+
ShapeName: *memberModel.RemovePrefix(value, memberModel.ServiceAlias),
149+
}
150+
151+
switch new_shape.MemberRef.Shape.Type {
152+
case "structure":
153+
new_shape.MemberRef.Shape = memberModel.AddStructMembers(new_shape.MemberRef.Shape)
154+
default:
155+
new_shape.MemberRef.Shape = memberModel.AddDefaultMembers(new_shape.MemberRef.Shape)
156+
157+
}
158+
159+
}
160+
161+
}
162+
}
163+
return new_shape
164+
}
165+
166+
func (m *ModelV2Shape) AddEnumValues(new_shape *sdkmodel.Shape) *sdkmodel.Shape {
167+
168+
if m.GetShapeType() == "enum" {
169+
for key := range m.Raw_shape["members"].(map[string]interface{}) {
170+
new_shape.Enum = append(new_shape.Enum, key)
171+
}
172+
}
173+
174+
return new_shape
175+
}
176+
177+
func (m *ModelV2Shape) CreateOperation(name string) *sdkmodel.Operation {
178+
179+
if m.GetShapeType() == "operation" {
180+
new_operation := &sdkmodel.Operation{
181+
Name: name,
182+
ExportedName: *m.RemovePrefix(name, serviceAlias),
183+
}
184+
return new_operation
185+
186+
}
187+
return nil
188+
189+
}
190+
191+
func (m *ModelV2Shape) AddInputShapeRef(newOperation *sdkmodel.Operation, input interface{}) *sdkmodel.Operation {
192+
193+
inputShapeName := input.(map[string]interface{})["target"]
194+
inputRawShape := GetRawShape(inputShapeName.(string))
195+
196+
name := m.RemovePrefix(inputShapeName.(string), m.ServiceAlias)
197+
name = m.ReplaceShapeSuffixRequest(*name, m.ServiceAlias)
198+
199+
inputShapeModel := NewModelV2Shape(inputRawShape, *name, m.ServiceAlias)
200+
201+
if _, ok := shapes[inputShapeModel.Name]; ok {
202+
newOperation.InputRef = sdkmodel.ShapeRef{
203+
Shape: shapes[inputShapeModel.Name],
204+
ShapeName: inputShapeModel.Name,
205+
}
206+
} else {
207+
newOperation.InputRef = sdkmodel.ShapeRef{
208+
Shape: inputShapeModel.CreateShape(inputShapeModel.Name),
209+
ShapeName: inputShapeModel.Name,
210+
}
211+
shapes[newOperation.InputRef.ShapeName] = newOperation.InputRef.Shape
212+
}
213+
214+
return newOperation
215+
216+
}
217+
218+
func (m *ModelV2Shape) AddOutputShapeRef(newOperation *sdkmodel.Operation, output interface{}) *sdkmodel.Operation {
219+
220+
outputShapeName := output.(map[string]interface{})["target"]
221+
outputRawShape := GetRawShape(outputShapeName.(string))
222+
223+
name := m.RemovePrefix(outputShapeName.(string), m.ServiceAlias)
224+
name = m.ReplaceShapeSuffixRequest(*name, m.ServiceAlias)
225+
outputShapeModel := NewModelV2Shape(outputRawShape, *name, m.ServiceAlias)
226+
227+
if outputShapeModel.Name == "smithy.api#Unit" {
228+
229+
newOperation.OutputRef = sdkmodel.ShapeRef{
230+
Shape: outputShapeModel.CreateShape(newOperation.Name + "Output"),
231+
ShapeName: newOperation.Name + "Output",
232+
}
233+
newOperation.OutputRef.Shape.Type = "structure"
234+
shapes[newOperation.OutputRef.ShapeName] = newOperation.OutputRef.Shape
235+
236+
return newOperation
237+
238+
}
239+
240+
if OpOutputRef, ok := shapes[outputShapeModel.Name]; ok {
241+
242+
var OutputShapeName string
243+
if strings.HasSuffix(OpOutputRef.ShapeName, "Description") {
244+
245+
OutputShapeName = newOperation.Name + "Output"
246+
outputShapeModel.Name = OutputShapeName
247+
outPutShape := BuildModelV2(outputShapeModel)
248+
newOperation.OutputRef.Shape = outPutShape
249+
return newOperation
250+
251+
}
252+
newOperation.OutputRef.Shape = OpOutputRef
253+
254+
}
255+
256+
return newOperation
257+
258+
}

0 commit comments

Comments
 (0)