47 lines
873 B
Go
47 lines
873 B
Go
package protocol
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"net"
|
|
|
|
"forge.cadoles.com/cadoles/go-emlid/reach/client/logger"
|
|
)
|
|
|
|
type Identifier string
|
|
|
|
type DialFunc func(network string, addr string) (net.Conn, error)
|
|
|
|
type Protocol interface {
|
|
Identifier() Identifier
|
|
Available(ctx context.Context, addr string) (bool, error)
|
|
Operations(addr string) Operations
|
|
}
|
|
|
|
type ProtocolOptions struct {
|
|
Logger logger.Logger
|
|
Dial DialFunc
|
|
}
|
|
|
|
type ProtocolFactory func(opts *ProtocolOptions) (Protocol, error)
|
|
|
|
type ProtocolOptionFunc func(opts *ProtocolOptions)
|
|
|
|
func NewProtocolOptions(funcs ...ProtocolOptionFunc) *ProtocolOptions {
|
|
opts := &ProtocolOptions{
|
|
Logger: slog.Default(),
|
|
}
|
|
|
|
for _, fn := range funcs {
|
|
fn(opts)
|
|
}
|
|
|
|
return opts
|
|
}
|
|
|
|
func WithProtocolLogger(logger logger.Logger) ProtocolOptionFunc {
|
|
return func(opts *ProtocolOptions) {
|
|
opts.Logger = logger
|
|
}
|
|
}
|