64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package domain
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/url"
|
|
|
|
"source.toby3d.me/toby3d/hub/internal/common"
|
|
)
|
|
|
|
type Mode struct {
|
|
mode string
|
|
}
|
|
|
|
var (
|
|
ModeUnd Mode = Mode{mode: ""} // "und"
|
|
ModeDenied Mode = Mode{mode: "denied"} // "denied"
|
|
ModePublish Mode = Mode{mode: "publish"} // "publish"
|
|
ModeSubscribe Mode = Mode{mode: "subscribe"} // "subscribe"
|
|
ModeUnsubscribe Mode = Mode{mode: "unsubscribe"} // "unsubscribe"
|
|
)
|
|
|
|
var ErrModeSyntax = errors.New("bad mode syntax")
|
|
|
|
var stringsModes = map[string]Mode{
|
|
ModeDenied.mode: ModeDenied,
|
|
ModePublish.mode: ModePublish,
|
|
ModeSubscribe.mode: ModeSubscribe,
|
|
ModeUnsubscribe.mode: ModeUnsubscribe,
|
|
}
|
|
|
|
func ParseMode(mode string) (Mode, error) {
|
|
if mode, ok := stringsModes[mode]; ok {
|
|
return mode, nil
|
|
}
|
|
|
|
return ModeUnd, fmt.Errorf("%w: %s", ErrModeSyntax, mode)
|
|
}
|
|
|
|
func (m *Mode) UnmarshalForm(src []byte) error {
|
|
var err error
|
|
if *m, err = ParseMode(string(src)); err != nil {
|
|
return fmt.Errorf("Mode: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (m Mode) AddQuery(q url.Values) {
|
|
q.Add(common.HubMode, m.mode)
|
|
}
|
|
|
|
func (m Mode) String() string {
|
|
if m.mode != "" {
|
|
return m.mode
|
|
}
|
|
|
|
return common.Und
|
|
}
|
|
|
|
func (m Mode) GoString() string {
|
|
return "domain.Mode(" + m.String() + ")"
|
|
}
|