Skip to content

Code Generation for Enum does not match example #17

@BinaryHexer

Description

@BinaryHexer

version: f2de116


Taking an example from features/sum-types

main.dingo:

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),
}

The generated main.go:

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
}

Is this expected?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions