2023-12-23 09:54:47 +00:00
|
|
|
package domain
|
|
|
|
|
2023-12-25 09:13:42 +00:00
|
|
|
import (
|
|
|
|
"net/url"
|
|
|
|
"slices"
|
|
|
|
)
|
2023-12-23 09:54:47 +00:00
|
|
|
|
|
|
|
type BaseServer struct {
|
|
|
|
key string
|
|
|
|
url *url.URL
|
|
|
|
open bool
|
|
|
|
}
|
|
|
|
|
2023-12-27 08:07:40 +00:00
|
|
|
const baseServerModelName = "BaseServer"
|
|
|
|
|
|
|
|
func NewBaseServer(key string, u *url.URL, open bool) (BaseServer, error) {
|
2023-12-23 09:54:47 +00:00
|
|
|
if err := validateServerKey(key); err != nil {
|
|
|
|
return BaseServer{}, ValidationError{
|
2023-12-27 08:07:40 +00:00
|
|
|
Model: baseServerModelName,
|
2023-12-23 09:54:47 +00:00
|
|
|
Field: "key",
|
2023-12-27 08:07:40 +00:00
|
|
|
Err: err,
|
2023-12-23 09:54:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-27 08:07:40 +00:00
|
|
|
if u == nil {
|
2023-12-23 09:54:47 +00:00
|
|
|
return BaseServer{}, ValidationError{
|
2023-12-27 08:07:40 +00:00
|
|
|
Model: baseServerModelName,
|
2023-12-23 09:54:47 +00:00
|
|
|
Field: "url",
|
2023-12-28 10:56:59 +00:00
|
|
|
Err: ErrNil,
|
2023-12-23 09:54:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return BaseServer{
|
|
|
|
key: key,
|
|
|
|
url: u,
|
|
|
|
open: open,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
2023-12-28 10:56:59 +00:00
|
|
|
func (s BaseServer) Key() string {
|
|
|
|
return s.key
|
2023-12-23 09:54:47 +00:00
|
|
|
}
|
|
|
|
|
2023-12-28 10:56:59 +00:00
|
|
|
func (s BaseServer) URL() *url.URL {
|
|
|
|
return s.url
|
2023-12-23 09:54:47 +00:00
|
|
|
}
|
|
|
|
|
2023-12-28 10:56:59 +00:00
|
|
|
func (s BaseServer) Open() bool {
|
|
|
|
return s.open
|
2023-12-23 09:54:47 +00:00
|
|
|
}
|
|
|
|
|
2023-12-28 10:56:59 +00:00
|
|
|
func (s BaseServer) IsZero() bool {
|
|
|
|
return s == BaseServer{}
|
2023-12-23 09:54:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type BaseServers []BaseServer
|
2023-12-25 09:13:42 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|