|
| 1 | +// Use Cairo 2.5.3 |
| 2 | +use starknet::eth_address::EthAddress; |
| 3 | +use starknet::eth_address::{EthAddressSerde, Felt252TryIntoEthAddress}; |
| 4 | + |
| 5 | +#[derive(Drop, Serde)] |
| 6 | +struct Order2 { |
| 7 | + p1: felt252, |
| 8 | + p2: Array<felt252>, |
| 9 | +} |
| 10 | + |
| 11 | +#[derive(Drop, Serde)] |
| 12 | +enum Direction { |
| 13 | + North, |
| 14 | + East: Result<u16, felt252> |
| 15 | +} |
| 16 | + |
| 17 | +#[starknet::interface] |
| 18 | +trait ITupleStarknet<TContractState> { |
| 19 | + fn simple(self: @TContractState) -> u8; |
| 20 | + fn get_tuple1(self: @TContractState) -> (u8, Array<u16>, bool); |
| 21 | + fn get_tuple2(self: @TContractState) -> (bytes31, ByteArray); |
| 22 | + fn get_tuple3(self: @TContractState) -> (u256, Order2); |
| 23 | + fn get_tuple4(self: @TContractState) -> (EthAddress, u256); |
| 24 | + fn get_tuple5(self: @TContractState) -> (Result<u64, u8>, u8); |
| 25 | + fn get_tuple6(self: @TContractState) -> (Option<u64>, u8); |
| 26 | + fn get_tuple7(self: @TContractState) -> (Direction, u8); |
| 27 | + fn get_tuple8(self: @TContractState) -> ((u256, Array<u16>), u8); |
| 28 | + fn get_tuple9( |
| 29 | + self: @TContractState, l0: ((u256, (u16, Order2)), u8) |
| 30 | + ) -> ((u256, (u16, Order2)), u8); |
| 31 | + fn get_tuple10(self: @TContractState) -> (u256,Array<Result<u256, u8>>); |
| 32 | + fn get_tuple11(self: @TContractState) -> (u16,Option<Result<u16, felt252>>); |
| 33 | + fn get_tuple12(self: @TContractState) -> (Direction, u8); |
| 34 | +} |
| 35 | + |
| 36 | + |
| 37 | +#[starknet::contract] |
| 38 | +mod HelloStarknet { |
| 39 | + use starknet::eth_address::EthAddress; |
| 40 | + use starknet::eth_address::{EthAddressSerde, Felt252TryIntoEthAddress}; |
| 41 | + use super::{Order2, Direction}; |
| 42 | + |
| 43 | + #[storage] |
| 44 | + struct Storage {} |
| 45 | + |
| 46 | + #[abi(embed_v0)] |
| 47 | + impl HelloStarknetImpl of super::ITupleStarknet<ContractState> { |
| 48 | + fn simple(self: @ContractState) -> u8 { |
| 49 | + 26_u8 |
| 50 | + } |
| 51 | + |
| 52 | + fn get_tuple1(self: @ContractState) -> (u8, Array<u16>, bool) { |
| 53 | + let arr = array![5000_u16, 6000_u16]; |
| 54 | + let a: (u8, Array<u16>, bool) = (100_u8, arr, true); |
| 55 | + a |
| 56 | + } |
| 57 | + |
| 58 | + fn get_tuple2(self: @ContractState) -> (bytes31, ByteArray) { |
| 59 | + //let str:bytes31="a"; |
| 60 | + let mess: bytes31 = bytes31_const::<0x496e707574>(); // "Input" |
| 61 | + let long_mess: ByteArray = "Zorg is very verbose and creates only long sentences."; |
| 62 | + let a: (bytes31, ByteArray) = (mess, long_mess); |
| 63 | + a |
| 64 | + } |
| 65 | + |
| 66 | + fn get_tuple3(self: @ContractState) -> (u256, Order2) { |
| 67 | + let arr = array![1_felt252, 2_felt252, 3_felt252]; |
| 68 | + let structure = Order2 { p1: 10_felt252, p2: arr }; |
| 69 | + let a: (u256, Order2) = (123456_u256, structure); |
| 70 | + a |
| 71 | + } |
| 72 | + |
| 73 | + fn get_tuple4(self: @ContractState) -> (EthAddress, u256) { |
| 74 | + let ethA: EthAddress = 123_felt252.try_into().unwrap(); |
| 75 | + let a: (EthAddress, u256) = (ethA, 500_u256); |
| 76 | + a |
| 77 | + } |
| 78 | + |
| 79 | + fn get_tuple5(self: @ContractState) -> (Result<u64, u8>, u8) { |
| 80 | + let r: Result<u64, u8> = Result::Ok(18_u64); |
| 81 | + let a: (Result<u64, u8>, u8) = (r, 4_u8); |
| 82 | + a |
| 83 | + } |
| 84 | + |
| 85 | + fn get_tuple6(self: @ContractState) -> (Option<u64>, u8) { |
| 86 | + let o: Option<u64> = Option::Some(18_u64); |
| 87 | + let a: (Option<u64>, u8) = (o, 4_u8); |
| 88 | + a |
| 89 | + } |
| 90 | + |
| 91 | + fn get_tuple7(self: @ContractState) -> (Direction, u8) { |
| 92 | + let r: Direction = Direction::North; |
| 93 | + let a: (Direction, u8) = (r, 4_u8); |
| 94 | + a |
| 95 | + } |
| 96 | + |
| 97 | + fn get_tuple8(self: @ContractState) -> ((u256, Array<u16>), u8) { |
| 98 | + let arr = array![1_u16, 2_u16, 3_u16]; |
| 99 | + let t: (u256, Array<u16>) = (600_u256, arr); |
| 100 | + let a: ((u256, Array<u16>), u8) = (t, 8_u8); |
| 101 | + a |
| 102 | + } |
| 103 | + |
| 104 | + fn get_tuple9( |
| 105 | + self: @ContractState, l0: ((u256, (u16, Order2)), u8) |
| 106 | + ) -> ((u256, (u16, Order2)), u8) { |
| 107 | + let ((my_u256, (my_u16, my_order2)), my_u8) = l0; |
| 108 | + let arr = my_order2.p2; |
| 109 | + let o = Order2 { p1: my_order2.p1, p2: arr }; |
| 110 | + let r: (u16, Order2) = (my_u16, o); |
| 111 | + let t: (u256, (u16, Order2)) = (my_u256, r); |
| 112 | + let a: ((u256, (u16, Order2)), u8) = (t, my_u8); |
| 113 | + a |
| 114 | + } |
| 115 | + |
| 116 | + fn get_tuple10(self: @ContractState) -> (u256,Array<Result<u256, u8>>) { |
| 117 | + let r1: Result<u256, u8> = Result::Ok(6000_u256); |
| 118 | + let r2: Result<u256, u8> = Result::Ok(7000_u256); |
| 119 | + let arr = array![r1, r2]; |
| 120 | + let a: (u256,Array<Result<u256, u8>>) = (8000_u256,arr); |
| 121 | + a |
| 122 | + } |
| 123 | + |
| 124 | + fn get_tuple11(self: @ContractState) -> (u16,Option<Result<u16, felt252>>) { |
| 125 | + let r: Result<u16, felt252> = Result::Ok(2000_u16); |
| 126 | + let o: Option<Result<u16, felt252>> = Option::Some(r); |
| 127 | + let a: (u16,Option<Result<u16, felt252>>) = (400_u16,o); |
| 128 | + a |
| 129 | + } |
| 130 | + |
| 131 | + fn get_tuple12(self: @ContractState) -> (Direction, u8) { |
| 132 | + let r: Result<u16, felt252> = Result::Ok(2000_u16); |
| 133 | + let e: Direction = Direction::East(r); |
| 134 | + let a: (Direction, u8) = (e, 4_u8); |
| 135 | + a |
| 136 | + } |
| 137 | + |
| 138 | + } |
| 139 | +} |
0 commit comments