42 lines
936 B
Go
42 lines
936 B
Go
package vo
|
|
|
|
import "fmt"
|
|
|
|
// OrderSide is a value object representing the side of an order (buy or sell).
|
|
type OrderSide string
|
|
|
|
const (
|
|
Buy OrderSide = "buy"
|
|
Sell OrderSide = "sell"
|
|
)
|
|
|
|
// ValidOrderSides lists all valid OrderSide values.
|
|
var ValidOrderSides = []OrderSide{Buy, Sell}
|
|
|
|
// NewOrderSide creates a validated OrderSide from a string.
|
|
func NewOrderSide(s string) (OrderSide, error) {
|
|
side := OrderSide(s)
|
|
if side != Buy && side != Sell {
|
|
return "", fmt.Errorf("invalid order side: %q, must be 'buy' or 'sell'", s)
|
|
}
|
|
return side, nil
|
|
}
|
|
|
|
// String returns the string representation of the OrderSide.
|
|
func (s OrderSide) String() string {
|
|
return string(s)
|
|
}
|
|
|
|
// IsValid returns true if the OrderSide is a recognized value.
|
|
func (s OrderSide) IsValid() bool {
|
|
return s == Buy || s == Sell
|
|
}
|
|
|
|
// Opposite returns the opposite side.
|
|
func (s OrderSide) Opposite() OrderSide {
|
|
if s == Buy {
|
|
return Sell
|
|
}
|
|
return Buy
|
|
}
|