William Petit
8e574c299b
All checks were successful
arcad/edge/pipeline/pr-master This commit looks good
122 lines
2.2 KiB
Go
122 lines
2.2 KiB
Go
package share
|
|
|
|
import (
|
|
"time"
|
|
|
|
"forge.cadoles.com/arcad/edge/pkg/app"
|
|
)
|
|
|
|
type BaseResource struct {
|
|
id ResourceID
|
|
origin app.ID
|
|
attributes []Attribute
|
|
}
|
|
|
|
// Attributes implements Resource
|
|
func (r *BaseResource) Attributes() []Attribute {
|
|
return r.attributes
|
|
}
|
|
|
|
// ID implements Resource
|
|
func (r *BaseResource) ID() ResourceID {
|
|
return r.id
|
|
}
|
|
|
|
// Origin implements Resource
|
|
func (r *BaseResource) Origin() app.ID {
|
|
return r.origin
|
|
}
|
|
|
|
func (r *BaseResource) SetAttribute(attr Attribute) {
|
|
for idx, rAttr := range r.attributes {
|
|
if rAttr.Name() != attr.Name() {
|
|
continue
|
|
}
|
|
|
|
r.attributes[idx] = attr
|
|
|
|
return
|
|
}
|
|
|
|
r.attributes = append(r.attributes, attr)
|
|
}
|
|
|
|
func NewBaseResource(origin app.ID, resourceID ResourceID, attributes ...Attribute) *BaseResource {
|
|
return &BaseResource{
|
|
id: resourceID,
|
|
origin: origin,
|
|
attributes: attributes,
|
|
}
|
|
}
|
|
|
|
var _ Resource = &BaseResource{}
|
|
|
|
type BaseAttribute struct {
|
|
name string
|
|
valueType ValueType
|
|
value any
|
|
createdAt time.Time
|
|
updatedAt time.Time
|
|
}
|
|
|
|
// CreatedAt implements Attribute
|
|
func (a *BaseAttribute) CreatedAt() time.Time {
|
|
return a.createdAt
|
|
}
|
|
|
|
// Name implements Attribute
|
|
func (a *BaseAttribute) Name() string {
|
|
return a.name
|
|
}
|
|
|
|
// Type implements Attribute
|
|
func (a *BaseAttribute) Type() ValueType {
|
|
return a.valueType
|
|
}
|
|
|
|
// UpdatedAt implements Attribute
|
|
func (a *BaseAttribute) UpdatedAt() time.Time {
|
|
return a.updatedAt
|
|
}
|
|
|
|
// Value implements Attribute
|
|
func (a *BaseAttribute) Value() any {
|
|
return a.value
|
|
}
|
|
|
|
func (a *BaseAttribute) SetCreatedAt(createdAt time.Time) {
|
|
a.createdAt = createdAt
|
|
}
|
|
|
|
func (a *BaseAttribute) SetUpdatedAt(updatedAt time.Time) {
|
|
a.updatedAt = updatedAt
|
|
}
|
|
|
|
func NewBaseAttribute(name string, valueType ValueType, value any) *BaseAttribute {
|
|
return &BaseAttribute{
|
|
name: name,
|
|
valueType: valueType,
|
|
value: value,
|
|
}
|
|
}
|
|
|
|
var _ Attribute = &BaseAttribute{}
|
|
|
|
func HasAttribute(res Resource, name string, valueType ValueType) bool {
|
|
return GetAttribute(res, name, valueType) != nil
|
|
}
|
|
|
|
func GetAttribute(res Resource, name string, valueType ValueType) Attribute {
|
|
for _, attr := range res.Attributes() {
|
|
if attr.Name() != name {
|
|
continue
|
|
}
|
|
|
|
if attr.Type() == valueType {
|
|
return attr
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|