private IEnumerable <SwaggerRouteData> ToSwaggerRouteData(INancyModule module)
{
Func <IEnumerable <RouteAttribute>, RouteId> getRouteId = (attrs) =>
{
return(attrs.Select(attr => RouteId.Create(module, attr))
.FirstOrDefault(routeId => routeId.IsValid));
};
// Discover route handlers and put them in a Dictionary<RouteId, MethodInfo>
var routeHandlers =
module.GetType().GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static)
.Select(methodInfo => new
{
RouteId = getRouteId(methodInfo.GetCustomAttributes <RouteAttribute>()),
MethodInfo = methodInfo
})
.Where(x => x.RouteId.IsValid)
.ToDictionary(
x => x.RouteId,
x => x.MethodInfo
);
return(module.Routes
.Select(route => CreateSwaggerRouteData(module, route, routeHandlers)));
}