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