mirror of
https://github.com/emo2007/block-accounting.git
synced 2025-04-12 08:56:28 +00:00
70 lines
1.2 KiB
Go
70 lines
1.2 KiB
Go
package hal
|
|
|
|
type Link struct {
|
|
Href string `json:"href"`
|
|
Title string `json:"title,omitempty"`
|
|
Method string `json:"method,omitempty"`
|
|
}
|
|
|
|
type Resource struct {
|
|
Type string `json:"_type,omitempty"`
|
|
Links map[string]Link `json:"_links"`
|
|
Embedded map[string]any `json:"_embedded,omitempty"`
|
|
}
|
|
|
|
type Payload interface{}
|
|
|
|
type NewResourceOption func(r *Resource)
|
|
|
|
func NewResource(selfLink string, opts ...NewResourceOption) *Resource {
|
|
r := &Resource{
|
|
Links: map[string]Link{
|
|
"self": {
|
|
Href: selfLink,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, o := range opts {
|
|
o(r)
|
|
}
|
|
|
|
return r
|
|
}
|
|
|
|
func WithType(t string) NewResourceOption {
|
|
return func(r *Resource) {
|
|
r.Type = t
|
|
}
|
|
}
|
|
|
|
func WithSelfTitle(t string) NewResourceOption {
|
|
return func(r *Resource) {
|
|
if l, ok := r.Links["self"]; ok {
|
|
l.Title = t
|
|
|
|
r.Links["self"] = l
|
|
}
|
|
}
|
|
}
|
|
|
|
func (r *Resource) Embed(relation string, resource *Resource) {
|
|
if r.Embedded == nil {
|
|
r.Embedded = make(map[string]any, 1)
|
|
}
|
|
|
|
r.Embedded[relation] = resource
|
|
}
|
|
|
|
func (r *Resource) AddLink(relation string, link Link) {
|
|
if r.Links == nil {
|
|
r.Links = make(map[string]Link, 1)
|
|
}
|
|
|
|
r.Links[relation] = link
|
|
}
|
|
|
|
func (r *Resource) SetType(t string) {
|
|
r.Type = t
|
|
}
|