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
|
||
|
}
|