external_struct.adl
1 2 program child.alpha { 3 struct Foo { 4 bar: [Bar; 1], 5 } 6 7 struct Bar { 8 baz: [Baz; 2], 9 } 10 11 struct Baz { 12 one: One, 13 } 14 15 struct One { 16 two: [Two; 2], 17 } 18 19 struct Two { 20 val1: u32, 21 val2: u32, 22 } 23 24 record Boo { 25 owner: address, 26 val: u32, 27 } 28 29 transition create() -> (Foo, Boo) { 30 return (Foo {bar: [Bar {baz: [Baz {one: One {two: [Two {val1: 1u32, val2: 2u32}, Two {val1: 3u32, val2: 31 4u32}]}}, Baz {one: One {two: [Two {val1: 5u32, val2: 6u32}, Two {val1: 7u32, val2: 8u32}]}}]}]}, Boo {owner: 32 self.signer, val: 10u32}); 33 } 34 } 35 36 // --- Next Program --- // 37 38 import child.alpha; 39 program parent.alpha { 40 41 record BooHoo { 42 owner: address, 43 val: u32, 44 woo: Woo, 45 } 46 47 struct Woo { 48 a: u32, 49 b: u32, 50 } 51 52 transition create_wrapper() -> (Foo, child.alpha/Boo) { 53 let f: Foo = Foo {bar: [Bar {baz: [Baz {one: One {two: [Two {val1: 1u32, val2: 2u32}, Two {val1: 3u32, val2: 4u32}]}}, Baz {one: One {two: [Two {val1: 5u32, val2: 6u32}, Two {val1: 7u32, val2: 8u32}]}}]}]}; 54 let (f1, b1): (Foo, child.alpha/Boo) = child.alpha/create(); 55 return child.alpha/create(); 56 } 57 58 transition create_another_wrapper() -> (Foo, child.alpha/Boo, BooHoo, Woo) { 59 let f: Foo = Foo {bar: [Bar {baz: [Baz {one: One {two: [Two {val1: 1u32, val2: 2u32}, Two {val1: 3u32, val2: 4u32}]}}, Baz {one: One {two: [Two {val1: 5u32, val2: 6u32}, Two {val1: 7u32, val2: 8u32}]}}]}]}; 60 let (f1, b1): (Foo, child.alpha/Boo) = child.alpha/create(); 61 return (f1, b1, BooHoo {owner: self.signer, val: 10u32, woo: Woo {a: 1u32, b: 2u32}}, Woo {a: 3u32, b: 4u32}); 62 } 63 64 } 65 66 // --- Next Program --- // 67 import parent.alpha; 68 import child.alpha; 69 program grandparent.alpha { 70 71 transition main(b: u32) -> u32 { 72 let a: u32 = 1u32 + b; 73 return a; 74 } 75 76 transition omega_wrapper() -> (Foo, child.alpha/Boo, parent.alpha/BooHoo, Woo) { 77 let (f, b, bh, w): (Foo, child.alpha/Boo, parent.alpha/BooHoo, Woo) = parent.alpha/create_another_wrapper(); 78 return parent.alpha/create_another_wrapper(); 79 } 80 }