private static async Task <PluginOutput <ExternalDataHandlerTaskOutput> > ExecutePlugin(
            IPluginServices pluginServices,
            PluginData <ExternalAnswerWorkflowInput> input)
        {
            var externalService = pluginServices.GetService("ExternalService") as ExternalService;

            if (externalService == null)
            {
                throw new System.Exception("Failed to resolve service");
            }

            var result                  = externalService.GetResult(input.Data.Question);
            var externalOutput          = result == null ? null : pluginServices.CreatePluginData(result);
            var externalDataHandlerTask = pluginServices.GetOrCreatePlugin <ExternalDataHandlerTask>();
            var externalData            = await externalDataHandlerTask.Execute <ExternalDataHandlerTaskOutput>(new PluginInputs { { "input", externalOutput } });

            if (externalData != null)
            {
                var configOverride = pluginServices.GetConfig().Get("ExternalAnswerOverride");
                if (!string.IsNullOrEmpty(configOverride))
                {
                    externalData.Data.Answer = configOverride;
                }
            }

            return(await pluginServices.PluginCompleted(externalData));
        }
        private static async Task <PluginOutput <TResponse> > ExecutePlugin(
            IPluginServices pluginServices,
            PluginData <JsonExternalWorkflowInput <TRequest> > input)
        {
            var serializeTask      = pluginServices.GetOrCreatePlugin <SerializeJsonTask <TRequest> >();
            var serializeTaskInput = pluginServices.CreatePluginData <TRequest>(input.Data.RequestObject);
            var serializeOutput    = await serializeTask.Execute <StringData>(new PluginInputs { { "input", serializeTaskInput } });

            var externalService = pluginServices.GetService("ExternalService") as ExternalService;

            if (externalService == null)
            {
                throw new System.Exception("Failed to resolve service");
            }

            var result = externalService.GetResult(serializeOutput.Data.String);

            if (result == null)
            {
                return(await pluginServices.PluginIncomplete <TResponse>());
            }

            var externalOutput = pluginServices.CreatePluginData(result);

            var deserializeTask   = pluginServices.GetOrCreatePlugin <DeserializeJsonTask <TResponse> >();
            var deserializeInput  = pluginServices.CreatePluginData(externalOutput.Data.OutputData);
            var deserializeOutput = await deserializeTask.Execute <TResponse>(new PluginInputs { { "input", deserializeInput } });

            return(await pluginServices.PluginCompleted(deserializeOutput));
        }
        private static async Task <PluginOutput <ExternalDataHandlerTaskOutput> > ExecutePlugin(
            IPluginServices pluginServices,
            [Version(1, 5)] PluginData <ExternalAnswerWorkflowInput> input)
        {
            var externalService = pluginServices.GetService("ExternalService") as ExternalService;

            if (externalService == null)
            {
                throw new System.Exception("Failed to resolve service");
            }

            var result                  = externalService.GetResult(input.Data.Question);
            var externalOutput          = result == null ? null : pluginServices.CreatePluginData(result);
            var externalDataHandlerTask = pluginServices.GetOrCreatePlugin <ExternalDataHandlerTask>();
            var externalData            = await externalDataHandlerTask.Execute <ExternalDataHandlerTaskOutput>(new PluginInputs { { "input", externalOutput } });

            return(await pluginServices.PluginCompleted(externalData));
        }