package main
enum Payment {
Cash,
Card {
number: string,
expiry: string,
},
Crypto {
wallet: string,
currency: string,
},
}
enum Order {
Draft {
items: []Item,
customer_id: string,
},
Pending {
order_id: string,
total: float64,
},
Paid {
order_id: string,
payment: Payment,
receipt_url: string,
},
Cancelled(string),
}
package main
// dingo:n:1
type PaymentTag uint8
const (
PaymentTagCash PaymentTag = iota
)
type Payment struct {
tag PaymentTag
}
func PaymentCash() Payment {
return Payment{tag: PaymentTagCash}
}
func (e Payment) IsCash() bool {
return e.tag == PaymentTagCash
}
// dingo:n:0
type OrderTag uint8
const (
OrderTagCancelled OrderTag = iota
)
type Order struct {
tag OrderTag
cancelled *string
}
func OrderCancelled(arg0 string) Order {
return Order{tag: OrderTagCancelled, cancelled: &arg0}
}
func (e Order) IsCancelled() bool {
return e.tag == OrderTagCancelled
}
version: f2de116
Taking an example from features/sum-types
main.dingo:The generated
main.go:Is this expected?