Skip to content

Commit

Permalink
dynamic content execution
Browse files Browse the repository at this point in the history
  • Loading branch information
yahya077 committed Sep 15, 2024
1 parent 0f3e974 commit 8cd65d3
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 24 deletions.
16 changes: 13 additions & 3 deletions body.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,22 @@ func (f *MultipartFormDataBody) Parse() *bytes.Buffer {
}

func NewMultipartFormDataBodyParser(v any) IBodyParser {
if _, ok := v.(map[string]string); !ok {
panic("form data must be a map[string]string")
formData := make(map[string]string)

Check failure on line 95 in body.go

View workflow job for this annotation

GitHub Actions / lint

ineffectual assignment to formData

Check failure on line 95 in body.go

View workflow job for this annotation

GitHub Actions / lint

ineffectual assignment to formData

if _, ok := v.(map[string]any); ok {
newMap := make(map[string]string)

for key, value := range v.(map[string]any) {
newMap[key] = value.(string)
}

formData = newMap
} else {
formData, _ = v.(map[string]string)
}

return &MultipartFormDataBody{
formData: v.(map[string]string),
formData: formData,
}
}

Expand Down
31 changes: 10 additions & 21 deletions elevator/elevator.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ func (e *ElevatorEngine) DynamicExecute(roomKey, requestKey string, v any) (room
if roomContainerEntry, ok := e.RoomContainers[roomKey]; ok {
if requestEntry, ok := roomContainerEntry.Requests[requestKey]; ok {
elevatorRequest := e.elevator.GetRequest(roomKey, requestKey)
requestEntry.BodyParser = e.generateDynamicParser(elevatorRequest.Body.Type, elevatorRequest.Body.DynamicContent, NewDynamicExecutionPayload(v).toMap())
requestEntry.BodyParser = e.generateDynamicParser(elevatorRequest.Body.Type, elevatorRequest.Body.DynamicContent, NewDynamicExecutionPayload(v).Fields)
return roomContainerEntry.Room.Send(requestEntry)
}
panic(fmt.Sprintf("engine for %s on %s not configured", roomKey, requestKey))
Expand Down Expand Up @@ -375,17 +375,7 @@ func (r *IntegrationConfig) UnmarshalJSON(data []byte) error {
}

type DynamicExecutionPayload struct {
Fields []DynamicExecutionField
}

func (p DynamicExecutionPayload) toMap() map[string]any {
payload := map[string]any{}

for _, field := range p.Fields {
payload[field.Key] = field.Value
}

return payload
Fields map[string]any
}

type DynamicExecutionField struct {
Expand All @@ -394,16 +384,18 @@ type DynamicExecutionField struct {
}

func NewDynamicExecutionPayload(v any) DynamicExecutionPayload {
payload := DynamicExecutionPayload{}
payload := DynamicExecutionPayload{Fields: map[string]any{}}

switch v.(type) {
case map[string]any:
for key, value := range v.(map[string]any) {
payload.Fields = append(payload.Fields, DynamicExecutionField{Key: key, Value: value})
payload.Fields[key] = value
}
case store.MapStore:
storeMap := v.(store.MapStore)
case store.IMap:
storeMap := v.(store.IMap)

for key, value := range storeMap.All() {
payload.Fields = append(payload.Fields, DynamicExecutionField{Key: key, Value: value})
payload.Fields[key] = value
}
default:
val := reflect.ValueOf(v)
Expand All @@ -423,10 +415,7 @@ func structToMap(val reflect.Value, payload *DynamicExecutionPayload) {
if field.Kind() == reflect.Struct {
structToMap(field, payload)
} else {
payload.Fields = append(payload.Fields, DynamicExecutionField{
Key: fieldName,
Value: field.Interface(),
})
payload.Fields[fieldName] = field.Interface()
}
}
}

0 comments on commit 8cd65d3

Please sign in to comment.