Skip to content

Instantly share code, notes, and snippets.

@odinserj
Created November 14, 2016 12:04
Show Gist options
  • Save odinserj/9b49abe5f51501a192dc168172cc5da2 to your computer and use it in GitHub Desktop.
Save odinserj/9b49abe5f51501a192dc168172cc5da2 to your computer and use it in GitHub Desktop.
HangfireFSharp.cs.diff
@@ -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