Uczę się libki LanguageExt. Mam jednak problem z przekazywaniem wartości między wywołaniami kolejnych funkcji.
Mam taki kod
return await CertificateHelper.GetCertificate()
.BindAsync(certificate => (CreateDoc(requestId, certificate)))
.BindAsync(data =>
SignDoc(data.xmlDocument, data.certificate, data.issuerNode))
.BindAsync(xmlDoc => _xmlMessageProvider.SendMessage(xmlDoc))
.MapAsync(xmlDoc => new
{
xmlDoc,
authenticationRequestId = XmlHelper.GetAuthenticationRequestId(xmlDoc)
})
.MapAsync(x => new
{
extractParameters = XmlHelper.ExtractParameters(x.xmlDoc),
x.xmlDoc,
x.authenticationRequestId
})
.MapAsync((x) => new
{
encryptionCert = CertificateHelper.GetPrivateKey(),
x.xmlDoc,
x.authenticationRequestId,
x.extractParameters
})
.MapAsync(x => CryptoHelper.DecryptXml(x.extractDecryptionParameters.Case as AssertionDecryptionParameters,
x.encryptionCert, "12345"));
Problemem jest to, że np. XmlHelper.ExtractParameters(x.xmlDoc)
zwraca Either<Failure, Parameters>
I tak jest zapisywany do zmiennej.
Chciałbym jednak, aby działało to w taki sposób, że jeżeli jest Failure
to wywala błąd, zaś jeżeli jest wszystko Ok, to zapisuje do zmiennej obiekt Parameters.
Nie chcę zrobić podobnie jak w części
.BindAsync(certificate => (CreateDoc(requestId, certificate)))
.BindAsync(data =>
SignDoc(data.xmlDocument, data.certificate, data.issuerNode))
że przekazuje dane (certificate) do funkcji, aby przekazać ją dalej przez funkcję.