builder method Null safety

InvokeHostFuncOpBuilder builder(
  1. XdrInvokeHostFunctionOp op
)
override

Implementation

static InvokeHostFuncOpBuilder builder(XdrInvokeHostFunctionOp op) {
  XdrHostFunction xdrHostFunction = op.function;
  if (xdrHostFunction.discriminant !=
          XdrHostFunctionType.HOST_FUNCTION_TYPE_INVOKE_CONTRACT ||
      xdrHostFunction.invokeArgs == null) {
    throw new Exception("invalid argument");
  }

  List<XdrSCVal> invokeArgsList = xdrHostFunction.invokeArgs!;
  if (invokeArgsList.length < 2 ||
      invokeArgsList.elementAt(0).discriminant != XdrSCValType.SCV_OBJECT ||
      invokeArgsList.elementAt(0).obj == null ||
      invokeArgsList.elementAt(1).discriminant != XdrSCValType.SCV_SYMBOL ||
      invokeArgsList.elementAt(1).sym == null) {
    throw new Exception("invalid argument");
  }

  XdrSCObject contractIDSCObject = invokeArgsList.elementAt(0).obj!;
  if (contractIDSCObject.discriminant != XdrSCObjectType.SCO_BYTES ||
      contractIDSCObject.bin == null) {
    throw new Exception("invalid argument");
  }
  String contractID = Util.bytesToHex(contractIDSCObject.bin!.dataValue);
  String functionName = invokeArgsList.elementAt(1).sym!;

  List<XdrSCVal>? funcArgs;
  if (invokeArgsList.length > 2) {
    funcArgs = List<XdrSCVal>.empty(growable: true);
    for (int i = 2; i < invokeArgsList.length; i++) {
      funcArgs.add(invokeArgsList[i]);
    }
  }

  List<ContractAuth> contractAuth = ContractAuth.fromXdrList(op.contractAuth);

  return InvokeHostFuncOpBuilder.forInvokingContract(contractID, functionName,
      functionArguments: funcArgs,
      footprint: op.footprint,
      contractAuth: contractAuth);
}