예제 #1
0
        public string GenerateMethod(FunctionABI functionABI)
        {
            var messageType         = _functionCQSMessageModel.GetFunctionMessageTypeName(functionABI);
            var messageVariableName = _functionCQSMessageModel.GetFunctionMessageVariableName(functionABI);

            if (_functionOutputDTOModel.CanGenerateOutputDTO(functionABI))
            {
                var functionOutputDTOType = _functionOutputDTOModel.GetFunctionOutputTypeName(functionABI);
                return
                    ($@"{SpaceUtils.TwoTabs}public Task<{functionOutputDTOType}> {_commonGenerators.GenerateClassName(functionABI.Name)}QueryAsync({messageType} {messageVariableName}, BlockParameter blockParameter = null)
{SpaceUtils.TwoTabs}{{
{SpaceUtils.ThreeTabs}return ContractHandler.QueryDeserializingToObjectAsync<{messageType}, {functionOutputDTOType}>({messageVariableName}, blockParameter);
{SpaceUtils.TwoTabs}}}");
            }

            if (functionABI.OutputParameters != null && functionABI.OutputParameters.Length == 1 &&
                functionABI.Constant)
            {
                var type = _abiTypeToCSharpType.GetTypeMap(functionABI.OutputParameters[0].Type);

                return
                    ($@"{SpaceUtils.TwoTabs}public Task<{type}> {_commonGenerators.GenerateClassName(functionABI.Name)}QueryAsync({messageType} {messageVariableName}, BlockParameter blockParameter = null)
{SpaceUtils.TwoTabs}{{
{SpaceUtils.ThreeTabs}return ContractHandler.QueryAsync<{messageType}, {type}>({messageVariableName}, blockParameter);
{SpaceUtils.TwoTabs}}}");
            }

            if (functionABI.Constant == false || (functionABI.OutputParameters == null || functionABI.OutputParameters.Length == 0))
            {
                var transactionRequest =
                    $@"{SpaceUtils.TwoTabs}public Task<string> {_commonGenerators.GenerateClassName(functionABI.Name)}RequestAsync({messageType} {messageVariableName})
{SpaceUtils.TwoTabs}{{
{SpaceUtils.ThreeTabs} return ContractHandler.SendRequestAsync({messageVariableName});
{SpaceUtils.TwoTabs}}}";

                var transactionRequestAndReceipt =
                    $@"{SpaceUtils.TwoTabs}public Task<TransactionReceipt> {_commonGenerators.GenerateClassName(functionABI.Name)}RequestAndWaitForReceiptAsync({messageType} {messageVariableName}, CancellationTokenSource cancellationToken = null)
{SpaceUtils.TwoTabs}{{
{SpaceUtils.ThreeTabs} return ContractHandler.SendRequestAndWaitForReceiptAsync({messageVariableName}, cancellationToken);
{SpaceUtils.TwoTabs}}}";

                return(transactionRequest + Environment.NewLine + transactionRequestAndReceipt);
            }

            return(null);
        }
        public string GenerateClass(FunctionABI functionABI)
        {
            var header = "";

            if (_functionABIModel.IsMultipleOutput(functionABI))
            {
                header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}"", typeof({_functionOutputDTOModel.GetFunctionOutputTypeName(functionABI)}))]";
            }

            if (_functionABIModel.IsSingleOutput(functionABI))
            {
                header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}"", ""{_functionABIModel.GetSingleAbiReturnType(functionABI)}""))]";
            }

            if (_functionABIModel.HasNoReturn(functionABI))
            {
                header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}""]";
            }

            return($@"{header}
{SpaceUtils.OneTab}public class {_functionCQSMessageModel.GetFunctionMessageTypeName(functionABI)}:ContractMessage
{SpaceUtils.OneTab}{{
{_parameterABIFunctionDTOTemplate.GenerateAllProperties(functionABI.InputParameters)}
{SpaceUtils.OneTab}}}");
        }