cue eval disjunctions.cue
cmp stdout expect-stdout-cue

-- frontmatter.toml --
title = "Disjunctions"
description = ""

-- text.md --
Disjunctions, or sum types, define a new type that is one of several things.

In the example, our `Conn` definition of earlier is augmented to define
the possible values for `protocol`: `"tcp"` or `"udp"`.
It is an error for a concrete `Conn`
to define anything else than these two values.

-- disjunctions.cue --
#Conn: {
    address:  string
    port:     int
    protocol: "tcp" | "udp"
}

lossy: #Conn & {
    address:  "1.2.3.4"
    port:     8888
    protocol: "udp"
}

-- expect-stdout-cue --
#Conn: {
    address:  string
    port:     int
    protocol: "tcp" | "udp"
}
lossy: {
    address:  "1.2.3.4"
    port:     8888
    protocol: "udp"
}
