ProcessTransportMessage <TTransportMessage, TDomainMessage>( ITransportToDomainMessageTransform <TTransportMessage, TDomainMessage> messageTransform, ServiceProvider rootServiceProvider, IIocManagement <TTransportMessage> iocManagement, TTransportMessage transportMessage) { Option <TDomainMessage> domainMessageO = messageTransform.ToDomainMessage(transportMessage); OptionAsync <Either <IPipelineError, Tuple <TTransportMessage, TDomainMessage> > > result2 = domainMessageO.MapAsync(d => HandleDomainMessage( rootServiceProvider, iocManagement, transportMessage, d)); Task <Either < IPipelineError, Tuple <TTransportMessage, TDomainMessage> > > res = result2.Match( sm => sm, () => Prelude.Left((IPipelineError) new ErrorParsingTransportMessage())); return(res); }
Run <TTransportMessage, TDomainMessage>( IMessageSource <TTransportMessage> messageSource, ITransportToDomainMessageTransform <TTransportMessage, TDomainMessage> messageTransform, ServiceProvider rootServiceProvider, IIocManagement <TTransportMessage> iocManagement ) { Option <TTransportMessage> transportMessageO = await messageSource.Poll(); Option <Either <IPipelineError, Tuple <TTransportMessage, TDomainMessage> > > processMessageResult = await transportMessageO.MapAsync( transportMessage => ProcessTransportMessage( messageTransform, rootServiceProvider, iocManagement, transportMessage)).ToOption(); Either <IPipelineError, Tuple <TTransportMessage, TDomainMessage> > resFinal = processMessageResult.Match( mpr => mpr, () => Prelude.Left <IPipelineError>(new NoTransportMessageAvailable())); resFinal.IfRight(m => messageSource.Ack(m.Item1)); return(resFinal); }