Created
November 14, 2016 12:04
-
-
Save odinserj/9b49abe5f51501a192dc168172cc5da2 to your computer and use it in GitHub Desktop.
HangfireFSharp.cs.diff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@@ -323,7 +323,7 @@ private static Job FromExpression([NotNull] LambdaExpression methodCall, [CanBeN | |
{ | |
if (methodCall == null) throw new ArgumentNullException(nameof(methodCall)); | |
var callExpression = methodCall.Body as MethodCallExpression; | |
var callExpression = UnwrapFSharpExpression(methodCall).Body as MethodCallExpression; | |
if (callExpression == null) | |
{ | |
throw new ArgumentException("Expression body should be of type `MethodCallExpression`", nameof(methodCall)); | |
@@ -363,6 +363,36 @@ private static Job FromExpression([NotNull] LambdaExpression methodCall, [CanBeN | |
GetExpressionValues(callExpression.Arguments)); | |
} | |
private static LambdaExpression UnwrapFSharpExpression([NotNull] LambdaExpression sourceExpression) | |
{ | |
if (sourceExpression == null) throw new ArgumentNullException(nameof(sourceExpression)); | |
var invokeExpression = sourceExpression.Body as MethodCallExpression; | |
if (invokeExpression == null || | |
invokeExpression.Type.FullName != "Microsoft.FSharp.Core.Unit" || | |
invokeExpression.Method.Name != "Invoke") | |
{ | |
return sourceExpression; | |
} | |
var tofsharpFuncExpression = invokeExpression.Object as MethodCallExpression; | |
if (tofsharpFuncExpression == null || | |
tofsharpFuncExpression.Method.Name != "ToFSharpFunc") | |
{ | |
return sourceExpression; | |
} | |
if (tofsharpFuncExpression.Arguments.Count != 1) | |
{ | |
return sourceExpression; | |
} | |
var lambdaExpression = tofsharpFuncExpression.Arguments[0] as LambdaExpression; | |
return lambdaExpression ?? sourceExpression; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment