mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 20:52:33 +02:00
44 lines
1 KiB
Go
44 lines
1 KiB
Go
package fields
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
E "github.com/yusing/go-proxy/internal/error"
|
|
)
|
|
|
|
type StreamScheme struct {
|
|
ListeningScheme Scheme `json:"listening"`
|
|
ProxyScheme Scheme `json:"proxy"`
|
|
}
|
|
|
|
func ValidateStreamScheme(s string) (*StreamScheme, error) {
|
|
ss := &StreamScheme{}
|
|
parts := strings.Split(s, ":")
|
|
if len(parts) == 1 {
|
|
parts = []string{s, s}
|
|
} else if len(parts) != 2 {
|
|
return nil, ErrInvalidScheme.Subject(s)
|
|
}
|
|
|
|
var lErr, pErr error
|
|
ss.ListeningScheme, lErr = NewScheme(parts[0])
|
|
ss.ProxyScheme, pErr = NewScheme(parts[1])
|
|
|
|
if err := E.Join(lErr, pErr); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return ss, nil
|
|
}
|
|
|
|
func (s StreamScheme) String() string {
|
|
return fmt.Sprintf("%s -> %s", s.ListeningScheme, s.ProxyScheme)
|
|
}
|
|
|
|
// IsCoherent checks if the ListeningScheme and ProxyScheme of the StreamScheme are equal.
|
|
//
|
|
// It returns a boolean value indicating whether the ListeningScheme and ProxyScheme are equal.
|
|
func (s StreamScheme) IsCoherent() bool {
|
|
return s.ListeningScheme == s.ProxyScheme
|
|
}
|