1interface variants {
2  enum e1 {
3      a,
4  }
5
6  e1-arg: func(x: e1)
7  e1-result: func() -> e1
8
9  union u1 {
10      u32,
11      float32,
12  }
13
14  u1-arg: func(x: u1)
15  u1-result: func() -> u1
16
17  record empty {}
18
19  variant v1 {
20      a,
21      b(u1),
22      c(e1),
23      d(string),
24      e(empty),
25      f,
26      g(u32),
27  }
28
29  v1-arg: func(x: v1)
30  v1-result: func() -> v1
31
32  bool-arg: func(x: bool)
33  bool-result: func() -> bool
34
35  option-arg: func(
36    a: option<bool>,
37    b: option<tuple<>>,
38    c: option<u32>,
39    d: option<e1>,
40    e: option<float32>,
41    f: option<u1>,
42    g: option<option<bool>>,
43  )
44  option-result: func() -> tuple<
45    option<bool>,
46    option<tuple<>>,
47    option<u32>,
48    option<e1>,
49    option<float32>,
50    option<u1>,
51    option<option<bool>>,
52  >
53
54  variant casts1 {
55    a(s32),
56    b(float32),
57  }
58
59  variant casts2 {
60    a(float64),
61    b(float32),
62  }
63
64  variant casts3 {
65    a(float64),
66    b(u64),
67  }
68
69  variant casts4 {
70    a(u32),
71    b(s64),
72  }
73
74  variant casts5 {
75    a(float32),
76    b(s64),
77  }
78
79  variant casts6 {
80    a(tuple<float32, u32>),
81    b(tuple<u32, u32>),
82  }
83
84  casts: func(
85    a: casts1,
86    b: casts2,
87    c: casts3,
88    d: casts4,
89    e: casts5,
90    f: casts6,
91  ) -> tuple<
92    casts1,
93    casts2,
94    casts3,
95    casts4,
96    casts5,
97    casts6,
98  >
99
100  result-arg: func(
101    a: result,
102    b: result<_, e1>,
103    c: result<e1>,
104    d: result<tuple<>, tuple<>>,
105    e: result<u32, v1>,
106    f: result<string, list<u8>>,
107  )
108  result-result: func() -> tuple<
109    result,
110    result<_, e1>,
111    result<e1>,
112    result<tuple<>, tuple<>>,
113    result<u32, v1>,
114    result<string, list<u8>>,
115  >
116
117  enum my-errno {
118    bad1,
119    bad2,
120  }
121
122  return-result-sugar: func() -> result<s32, my-errno>
123  return-result-sugar2: func() -> result<_, my-errno>
124  return-result-sugar3: func() -> result<my-errno, my-errno>
125  return-result-sugar4: func() -> result<tuple<s32, u32>, my-errno>
126  return-option-sugar: func() -> option<s32>
127  return-option-sugar2: func() -> option<my-errno>
128
129  result-simple: func() -> result<u32, s32>
130
131  record is-clone {
132    v1: v1,
133  }
134
135  is-clone-arg: func(a: is-clone)
136  is-clone-return: func() -> is-clone
137
138  return-named-option: func() -> (a: option<u8>)
139  return-named-result: func() -> (a: result<u8, my-errno>)
140}
141
142world my-world {
143  import imports: variants
144  export exports: variants
145  default export variants
146}
147