コード例 #1
0
ファイル: SCLRunner.cs プロジェクト: reductech/Core
        /// <summary>
        /// Runs an SCL sequence without injecting any metadata
        /// </summary>
        public async Task <Result <Unit, IError> > RunSequence(
            string text,
            IReadOnlyDictionary <string, object> sequenceMetadata,
            CancellationToken cancellationToken)
        {
            var stepResult = SCLParsing.TryParseStep(text)
                             .Bind(x => x.TryFreeze(TypeReference.Any.Instance, _stepFactoryStore))
                             .Map(ConvertToUnitStep);

            if (stepResult.IsFailure)
            {
                return(stepResult.ConvertFailure <Unit>());
            }

            using var loggingScope = _logger.BeginScope(TopLevelLoggingScope);

            var stateMonad = new StateMonad(
                _logger,
                _settings,
                _stepFactoryStore,
                _externalContext,
                sequenceMetadata
                );

            LogSituation.SequenceStarted.Log(stateMonad, null);

            var connectorSettings = _settings.Entity.TryGetValue(SCLSettings.ConnectorsKey);

            if (connectorSettings.HasValue)
            {
                LogSituation.ConnectorSettings.Log(
                    stateMonad,
                    null,
                    connectorSettings.Value.Serialize()
                    );
            }

            var runResult = await stepResult.Value.Run(stateMonad, cancellationToken);

            await stateMonad.DisposeAsync();

            _logger.LogSituation(
                LogSituation.SequenceCompleted,
                null,
                sequenceMetadata,
                Array.Empty <object?>()
                );

            return(runResult);
        }