core/internal/domain/server_message_payloads.go

103 lines
2.2 KiB
Go

package domain
import (
"errors"
"fmt"
"net/url"
)
type SyncServersCmdPayload struct {
versionCode string
url *url.URL
}
func NewSyncServersCmdPayload(versionCode string, u *url.URL) (SyncServersCmdPayload, error) {
if versionCode == "" {
return SyncServersCmdPayload{}, errors.New("version code can't be blank")
}
if u == nil {
return SyncServersCmdPayload{}, errors.New("url can't be nil")
}
return SyncServersCmdPayload{versionCode: versionCode, url: u}, nil
}
func NewSyncServersCmdPayloadWithStringURL(versionCode string, rawURL string) (SyncServersCmdPayload, error) {
u, err := parseURL(rawURL)
if err != nil {
return SyncServersCmdPayload{}, err
}
return NewSyncServersCmdPayload(versionCode, u)
}
func (p SyncServersCmdPayload) VersionCode() string {
return p.versionCode
}
func (p SyncServersCmdPayload) URL() *url.URL {
return p.url
}
type ServerSyncedEventPayload struct {
key string
url *url.URL
versionCode string
}
func NewServerSyncedEventPayload(key string, rawURL string, versionCode string) (ServerSyncedEventPayload, error) {
if key == "" {
return ServerSyncedEventPayload{}, errors.New("key can't be blank")
}
if versionCode == "" {
return ServerSyncedEventPayload{}, errors.New("version code can't be blank")
}
u, err := parseURL(rawURL)
if err != nil {
return ServerSyncedEventPayload{}, err
}
return ServerSyncedEventPayload{
key: key,
url: u,
versionCode: versionCode,
}, nil
}
func NewServerSyncedEventPayloads(servers BaseServers, versionCode string) ([]ServerSyncedEventPayload, error) {
if versionCode == "" {
return nil, errors.New("version code can't be blank")
}
res := make([]ServerSyncedEventPayload, 0, len(servers))
for i, s := range servers {
if s.IsZero() {
return nil, fmt.Errorf("servers[%d] is an empty struct", i)
}
res = append(res, ServerSyncedEventPayload{
key: s.Key(),
url: s.URL(),
versionCode: versionCode,
})
}
return res, nil
}
func (p ServerSyncedEventPayload) Key() string {
return p.key
}
func (p ServerSyncedEventPayload) URL() *url.URL {
return p.url
}
func (p ServerSyncedEventPayload) VersionCode() string {
return p.versionCode
}