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 }