51 lines
1007 B
Go
51 lines
1007 B
Go
|
package resource
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
)
|
||
|
|
||
|
type Resource interface {
|
||
|
TerraformId() string
|
||
|
TerraformType() string
|
||
|
}
|
||
|
|
||
|
type SerializableResource struct {
|
||
|
Resource
|
||
|
}
|
||
|
|
||
|
type SerializedResource struct {
|
||
|
Id string `json:"id"`
|
||
|
Type string `json:"type"`
|
||
|
}
|
||
|
|
||
|
func (u SerializedResource) TerraformId() string {
|
||
|
return u.Id
|
||
|
}
|
||
|
|
||
|
func (u SerializedResource) TerraformType() string {
|
||
|
return u.Type
|
||
|
}
|
||
|
|
||
|
func (s *SerializableResource) UnmarshalJSON(bytes []byte) error {
|
||
|
var res SerializedResource
|
||
|
|
||
|
if err := json.Unmarshal(bytes, &res); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
s.Resource = res
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (s SerializableResource) MarshalJSON() ([]byte, error) {
|
||
|
return json.Marshal(SerializedResource{Id: s.TerraformId(), Type: s.TerraformType()})
|
||
|
}
|
||
|
|
||
|
type NormalizedResource interface {
|
||
|
NormalizeForState() (Resource, error)
|
||
|
NormalizeForProvider() (Resource, error)
|
||
|
}
|
||
|
|
||
|
func IsSameResource(rRs, lRs Resource) bool {
|
||
|
return rRs.TerraformType() == lRs.TerraformType() && rRs.TerraformId() == lRs.TerraformId()
|
||
|
}
|