diff --git a/models/resources/resource.go b/models/resources/resource.go index 25ff9ad..bdb109e 100755 --- a/models/resources/resource.go +++ b/models/resources/resource.go @@ -1,6 +1,7 @@ package resources import ( + "encoding/json" "errors" "slices" @@ -382,3 +383,42 @@ func (rp *ResourcePartnerShip[T]) GetPeerGroups() map[string][]string { func (rp *ResourcePartnerShip[T]) ClearPeerGroups() { rp.PeerGroups = map[string][]string{} } + +func ToResource( + dt int, + payload []byte, +) (ResourceInterface, error) { + switch dt { + case tools.PROCESSING_RESOURCE.EnumIndex(): + var data ProcessingResource + if err := json.Unmarshal(payload, &data); err != nil { + return nil, err + } + return &data, nil + case tools.WORKFLOW_RESOURCE.EnumIndex(): + var data WorkflowResource + if err := json.Unmarshal(payload, &data); err != nil { + return nil, err + } + return &data, nil + case tools.DATA_RESOURCE.EnumIndex(): + var data DataResource + if err := json.Unmarshal(payload, &data); err != nil { + return nil, err + } + return &data, nil + case tools.STORAGE_RESOURCE.EnumIndex(): + var data StorageResource + if err := json.Unmarshal(payload, &data); err != nil { + return nil, err + } + return &data, nil + case tools.COMPUTE_RESOURCE.EnumIndex(): + var data ComputeResource + if err := json.Unmarshal(payload, &data); err != nil { + return nil, err + } + return &data, nil + } + return nil, errors.New("can't found any data resources matching") +}