70 lines
1.1 KiB
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
|
|
}
|