diff options
author | Greg Hysen <greg.hysen@gmail.com> | 2018-11-26 07:32:13 +0800 |
---|---|---|
committer | Greg Hysen <greg.hysen@gmail.com> | 2018-11-29 08:38:11 +0800 |
commit | dc7092e1eb11ff9844efe02e367ef37592f38c55 (patch) | |
tree | d0031a5731ee0d01b5190a400236e2c86e90ae86 /packages/utils/src/abi_encoder/evm_data_type_factory.ts | |
parent | c638151b73289fc936bb7d4323711d1954cc4fcb (diff) | |
download | dexon-sol-tools-dc7092e1eb11ff9844efe02e367ef37592f38c55.tar dexon-sol-tools-dc7092e1eb11ff9844efe02e367ef37592f38c55.tar.gz dexon-sol-tools-dc7092e1eb11ff9844efe02e367ef37592f38c55.tar.bz2 dexon-sol-tools-dc7092e1eb11ff9844efe02e367ef37592f38c55.tar.lz dexon-sol-tools-dc7092e1eb11ff9844efe02e367ef37592f38c55.tar.xz dexon-sol-tools-dc7092e1eb11ff9844efe02e367ef37592f38c55.tar.zst dexon-sol-tools-dc7092e1eb11ff9844efe02e367ef37592f38c55.zip |
Removed mapDataItemToDataType from Factory. Now its just ::create()
Diffstat (limited to 'packages/utils/src/abi_encoder/evm_data_type_factory.ts')
-rw-r--r-- | packages/utils/src/abi_encoder/evm_data_type_factory.ts | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/packages/utils/src/abi_encoder/evm_data_type_factory.ts b/packages/utils/src/abi_encoder/evm_data_type_factory.ts index 5d37acad9..bfe457367 100644 --- a/packages/utils/src/abi_encoder/evm_data_type_factory.ts +++ b/packages/utils/src/abi_encoder/evm_data_type_factory.ts @@ -82,42 +82,36 @@ export class EvmDataTypeFactory implements DataTypeFactory { return EvmDataTypeFactory._instance; } - public mapDataItemToDataType(dataItem: DataItem): DataType { + public create(dataItem: DataItem, parentDataType?: DataType): DataType { + // Create data type + let dataType: undefined | DataType; if (Array.matchType(dataItem.type)) { - return new Array(dataItem); + dataType = new Array(dataItem); } else if (Address.matchType(dataItem.type)) { - return new Address(dataItem); + dataType = new Address(dataItem); } else if (Bool.matchType(dataItem.type)) { - return new Bool(dataItem); + dataType = new Bool(dataItem); } else if (Int.matchType(dataItem.type)) { - return new Int(dataItem); + dataType = new Int(dataItem); } else if (UInt.matchType(dataItem.type)) { - return new UInt(dataItem); + dataType = new UInt(dataItem); } else if (StaticBytes.matchType(dataItem.type)) { - return new StaticBytes(dataItem); + dataType = new StaticBytes(dataItem); } else if (Tuple.matchType(dataItem.type)) { - return new Tuple(dataItem); + dataType = new Tuple(dataItem); } else if (DynamicBytes.matchType(dataItem.type)) { - return new DynamicBytes(dataItem); + dataType = new DynamicBytes(dataItem); } else if (String.matchType(dataItem.type)) { - return new String(dataItem); + dataType = new String(dataItem); } // @TODO: Implement Fixed/UFixed types - throw new Error(`Unrecognized data type: '${dataItem.type}'`); - } - - public create(dataItem: DataItem, parentDataType?: DataType): DataType { - const dataType = this.mapDataItemToDataType(dataItem); - if (dataType.isStatic()) { - return dataType; - } - - if (parentDataType === undefined) { - // @Todo -- will this work for return values? - throw new Error(`Trying to create a pointer`); + if (!dataType) { + throw new Error(`Unrecognized data type: '${dataItem.type}'`); + } else if (parentDataType && !dataType.isStatic()) { + const pointerToDataType = new Pointer(dataType, parentDataType); + return pointerToDataType; } - const pointer = new Pointer(dataType, parentDataType); - return pointer; + return dataType; } private constructor() {} |