core/internal/domain/base_server.go

70 lines
1.1 KiB
Go

package domain
import (
"net/url"
"slices"
)
type BaseServer struct {
key string
url *url.URL
open bool
}
func NewBaseServer(key, rawURL string, open bool) (BaseServer, error) {
if err := validateServerKey(key); err != nil {
return BaseServer{}, ValidationError{
Err: err,
Field: "key",
}
}
u, err := parseURL(rawURL)
if err != nil {
return BaseServer{}, ValidationError{
Err: err,
Field: "url",
}
}
return BaseServer{
key: key,
url: u,
open: open,
}, nil
}
func (b BaseServer) Key() string {
return b.key
}
func (b BaseServer) URL() *url.URL {
return b.url
}
func (b BaseServer) Open() bool {
return b.open
}
func (b BaseServer) IsZero() bool {
return b == BaseServer{}
}
type BaseServers []BaseServer
func (ss BaseServers) FilterOutSpecial(specials Servers) BaseServers {
res := make(BaseServers, 0, len(ss))
for _, s := range ss {
if slices.ContainsFunc(specials, func(special Server) bool {
return special.Special() && special.Key() == s.Key()
}) {
continue
}
res = append(res, s)
}
return res
}