Pull out importMsgExecuteContractEncodeObject/importMsgInstantiateContract

This commit is contained in:
Simon Warta 2022-03-09 02:00:14 +01:00
parent 458d4d03cd
commit 1ade2ad431

View File

@ -1,6 +1,6 @@
import { toUtf8 } from "@cosmjs/encoding"; import { toUtf8 } from "@cosmjs/encoding";
import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing"; import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing";
import { isNonNullObject } from "@cosmjs/utils"; import { assert, isNonNullObject } from "@cosmjs/utils";
import { import {
MsgClearAdmin, MsgClearAdmin,
MsgExecuteContract, MsgExecuteContract,
@ -78,6 +78,55 @@ export function isMsgExecuteEncodeObject(object: EncodeObject): object is MsgExe
return (object as MsgExecuteContractEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgExecuteContract"; return (object as MsgExecuteContractEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgExecuteContract";
} }
function getField(object: any, key: string | number): any {
if (!(key in object)) throw new Error(`Missing key '${key}' in object`);
return object[key];
}
function getStringField(object: any, key: string | number): string {
const value = getField(object, key);
if (typeof value !== "string") {
throw new Error(`Wrong type for key '${key}' in object: ${typeof value}. Must be a string.`);
}
return value;
}
function getArrayField(object: any, key: string | number): any[] {
const value = getField(object, key);
if (!Array.isArray(value)) {
throw new Error(`Wrong type for key '${key}' in object: ${typeof value}. Must be an array.`);
}
return value;
}
function importMsgExecuteContractEncodeObject(object: unknown): MsgExecuteContractEncodeObject {
assert(isNonNullObject(object));
return {
typeUrl: "/cosmwasm.wasm.v1.MsgExecuteContract",
value: MsgExecuteContract.fromPartial({
sender: getStringField(object, "sender"),
contract: getStringField(object, "contract"),
msg: toUtf8(JSON.stringify(getField(object, "msg"))),
funds: getArrayField(object, "funds"),
}),
};
}
function importMsgInstantiateContract(object: unknown): MsgInstantiateContractEncodeObject {
assert(isNonNullObject(object));
return {
typeUrl: "/cosmwasm.wasm.v1.MsgInstantiateContract",
value: MsgInstantiateContract.fromPartial({
sender: getStringField(object, "sender"),
admin: getStringField(object, "admin"),
codeId: Long.fromString(getStringField(object, "code_id"), true, 10),
label: getStringField(object, "label"),
msg: toUtf8(JSON.stringify(getField(object, "msg"))),
funds: getArrayField(object, "funds"),
}),
};
}
/** /**
* Takes a JSON representation of the Go implementation and imports it into CosmJS types * Takes a JSON representation of the Go implementation and imports it into CosmJS types
* *
@ -92,40 +141,14 @@ export function importWasmMessages(
const out = []; const out = [];
for (const element of doc) { for (const element of doc) {
if (!isNonNullObject(element)) throw new Error("Element must be an object"); if (!isNonNullObject(element)) throw new Error("Element must be an object");
if (!("@type" in element)) throw new Error("Element is missing a @type field"); const typeUrl = getStringField(element, "@type");
const typeUrl = (element as any)["@type"];
if (typeof typeUrl !== "string") throw new Error("Element's @type fiels must be a string");
switch (typeUrl) { switch (typeUrl) {
case "/cosmwasm.wasm.v1.MsgExecuteContract": { case "/cosmwasm.wasm.v1.MsgExecuteContract":
// console.log(element); out.push(importMsgExecuteContractEncodeObject(element));
const msg: MsgExecuteContractEncodeObject = {
typeUrl: "/cosmwasm.wasm.v1.MsgExecuteContract",
value: MsgExecuteContract.fromPartial({
sender: (element as any).sender,
contract: (element as any).contract,
msg: toUtf8(JSON.stringify((element as any).msg)),
funds: (element as any).funds,
}),
};
out.push(msg);
break; break;
} case "/cosmwasm.wasm.v1.MsgInstantiateContract":
case "/cosmwasm.wasm.v1.MsgInstantiateContract": { out.push(importMsgInstantiateContract(element));
// console.log(element);
const msg: MsgInstantiateContractEncodeObject = {
typeUrl: "/cosmwasm.wasm.v1.MsgInstantiateContract",
value: MsgInstantiateContract.fromPartial({
sender: (element as any).sender,
admin: (element as any).admin,
codeId: Long.fromString((element as any).code_id, true, 10),
label: (element as any).label,
msg: toUtf8(JSON.stringify((element as any).msg)),
funds: (element as any).funds,
}),
};
out.push(msg);
break; break;
}
default: default:
throw new Error(`Unsupported message type '${typeUrl}' found.`); throw new Error(`Unsupported message type '${typeUrl}' found.`);
} }