aboutsummaryrefslogtreecommitdiffstats
path: root/packages/utils/src/abi_encoder/evm_data_type_factory.ts
diff options
context:
space:
mode:
authorGreg Hysen <greg.hysen@gmail.com>2018-11-26 07:32:13 +0800
committerGreg Hysen <greg.hysen@gmail.com>2018-11-29 08:38:11 +0800
commitdc7092e1eb11ff9844efe02e367ef37592f38c55 (patch)
treed0031a5731ee0d01b5190a400236e2c86e90ae86 /packages/utils/src/abi_encoder/evm_data_type_factory.ts
parentc638151b73289fc936bb7d4323711d1954cc4fcb (diff)
downloaddexon-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.ts42
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() {}