{"action":"created","comment":{"url":"https://api.github.com/repos/freya-fs/freya/pulls/comments/25126025","id":25126025,"diff_hunk":"@@ -0,0 +1,156 @@\n+﻿//----------------------------------------------------------------------------\n+//\n+// Copyright (c) 2014\n+//\n+//    Ryan Riley (@panesofglass) and Andrew Cherry (@kolektiv)\n+//\n+// Licensed under the Apache License, Version 2.0 (the \"License\");\n+// you may not use this file except in compliance with the License.\n+// You may obtain a copy of the License at\n+//\n+//    http://www.apache.org/licenses/LICENSE-2.0\n+//\n+// Unless required by applicable law or agreed to in writing, software\n+// distributed under the License is distributed on an \"AS IS\" BASIS,\n+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+// See the License for the specific language governing permissions and\n+// limitations under the License.\n+//----------------------------------------------------------------------------\n+\n+module Freya.Integration\n+\n+open System\n+open System.Threading.Tasks\n+open Freya.Core\n+\n+(* OWIN Conversion *)\n+\n+/// Provides transformation functions for converting to/from OWIN from/to Freya.\n+[<RequireQualifiedAccess>]\n+[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]\n+module OwinAppFunc =\n+    \n+    /// Converts an <see cref=\"OwinAppFunc\" /> to a <see cref=\"Freya{T}\" /> computation\n+    /// to allow use of standard OWIN components within Freya.\n+    /// NOTE: EXPERIMENTAL\n+    [<CompiledName (\"ToFreya\")>]\n+    let toFreya (app: OwinAppFunc) : Freya<unit> =\n+        fun s -> async {\n+            let! token = Async.CancellationToken\n+            // Apply and mutate the OwinEnvironment asynchronously\n+            do! Async.AwaitTask <| app.Invoke(s.Environment).ContinueWith<unit>((fun _ -> ()), token)\n+            // Return the result as a unit value and the mutated FreyaState\n+            return (), s }\n+\n+open Freya.Pipeline\n+\n+/// Type alias for the OWIN MidFunc signature.\n+type OwinMidFunc =\n+    Func<OwinAppFunc, OwinAppFunc>\n+\n+/// Provides transformation functions for converting to/from OWIN middlewares from/to Freya Pipelines.\n+[<RequireQualifiedAccess>]\n+[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]\n+module OwinMidFunc =\n+    \n+    /// Converts a Freya.Pipeline to an OWIN MidFunc run before executing the next OwinAppFunc.\n+    [<CompiledName(\"FromFreya\")>]\n+    let ofFreya (pipeline: Freya<FreyaPipelineChoice>) =\n+        OwinMidFunc(fun next ->\n+            let app e =\n+                // Convert to FreyaState\n+                let s = { Environment = e\n+                          Meta = { Memos = Map.empty } }\n+                async {\n+                    // Execute the pipeline\n+                    let! choice, s' = pipeline s\n+                    match choice with\n+                    // Execute the next OwinAppFunc\n+                    | Next ->\n+                        return! next.Invoke(s'.Environment).ContinueWith<unit>(fun _ -> ()) |> Async.AwaitTask\n+                    // Complete the Task\n+                    | Halt -> return () }\n+                |> Async.StartAsTask :> Task\n+            OwinAppFunc app)\n+    \n+    /// Converts a Freya.Pipeline to an OWIN MidFunc run after executing the next OwinAppFunc.\n+    [<CompiledName(\"FromFreyaAfter\")>]\n+    let ofFreyaAfter (pipeline: Freya<FreyaPipelineChoice>) =\n+        OwinMidFunc(fun next ->\n+            let app e =\n+                async {\n+                    let task = next.Invoke e\n+                    do! task.ContinueWith<unit>(fun _ -> ()) |> Async.AwaitTask\n+                    // Check the result. If the Task is complete run the after pipeline.\n+                    if (task.Status = TaskStatus.RanToCompletion) then\n+                        // Convert to FreyaState\n+                        let s = { Environment = e\n+                                  Meta = { Memos = Map.empty } }\n+                        // Execute the pipeline\n+                        do! pipeline s |> Async.Ignore\n+                    else return () }\n+                |> Async.StartAsTask :> Task\n+            OwinAppFunc app)\n+\n+    /// Converts a Freya.Pipeline to an OWIN MidFunc.\n+    [<CompiledName(\"FromFreyaWrapped\")>]\n+    let ofFreyaWrapped (before: Freya<FreyaPipelineChoice>) (after: Freya<FreyaPipelineChoice>) =\n+        OwinMidFunc(fun next ->\n+            let app e =\n+                // Convert to FreyaState\n+                let s = { Environment = e\n+                          Meta = { Memos = Map.empty } }\n+                async {\n+                    // Execute the before pipeline\n+                    let! choice, s' = before s\n+                    match choice with\n+                    // Execute the next OwinAppFunc\n+                    | Next ->\n+                        let task = next.Invoke(s'.Environment)\n+                        do! task.ContinueWith<unit>(fun _ -> ()) |> Async.AwaitTask\n+                        // Check the result. If the Task is complete run the after pipeline.\n+                        if (task.Status = TaskStatus.RanToCompletion) then\n+                            // Execute the after pipeline\n+                            do! after s' |> Async.Ignore\n+                        else return ()\n+                    // Complete the Task\n+                    | Halt -> return () }\n+                |> Async.StartAsTask :> Task\n+            OwinAppFunc app)\n+\n+    /// Splits a MidFunc into a before and after Freya.Pipeline.\n+    [<CompiledName(\"SplitIntoFreya\")>]\n+    let splitIntoFreya (midFunc: OwinMidFunc) : Freya<FreyaPipelineChoice> * Freya<FreyaPipelineChoice> =\n+        // TODO: find a better way than using TaskCompletionSource instances\n+        let nextWasRun = ref false\n+        let signalCh = TaskCompletionSource<unit>()\n+        let continueCh = TaskCompletionSource<unit>()\n+        let midFuncCh = ref Unchecked.defaultof<Task<unit>>\n+        let nextSignal =\n+            OwinAppFunc(fun _ ->\n+                nextWasRun := true\n+                signalCh.SetResult ()\n+                continueCh.Task :> Task)\n+        let before s =\n+            async {\n+                let! token = Async.CancellationToken\n+                // Apply and mutate the OwinEnvironment asynchronously.\n+                midFuncCh := midFunc.Invoke(nextSignal).Invoke(s.Environment).ContinueWith<unit>((fun _ -> ()), token)\n+                // If haltCh completes first, nextWasRun will be false, and nothing further is necessary.\n+                // Otherwise, we'll continue on and call back into the midFunc in the after pipe.\n+                let! _ = Async.AwaitTask <| Task.WhenAny([| signalCh.Task; !midFuncCh |])","path":"src/Freya.Integration/Integration.fs","position":141,"original_position":141,"commit_id":"71bd07cc0e5d69b7d491969bae121adf40d37e2d","original_commit_id":"71bd07cc0e5d69b7d491969bae121adf40d37e2d","user":{"login":"kolektiv","id":1546,"avatar_url":"https://avatars.githubusercontent.com/u/1546?v=3","gravatar_id":"","url":"https://api.github.com/users/kolektiv","html_url":"https://github.com/kolektiv","followers_url":"https://api.github.com/users/kolektiv/followers","following_url":"https://api.github.com/users/kolektiv/following{/other_user}","gists_url":"https://api.github.com/users/kolektiv/gists{/gist_id}","starred_url":"https://api.github.com/users/kolektiv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kolektiv/subscriptions","organizations_url":"https://api.github.com/users/kolektiv/orgs","repos_url":"https://api.github.com/users/kolektiv/repos","events_url":"https://api.github.com/users/kolektiv/events{/privacy}","received_events_url":"https://api.github.com/users/kolektiv/received_events","type":"User","site_admin":false},"body":"This does raise an interesting point - at the moment, Freya is generally .Net 4 Client Profile. I think we should probably agree on a target compatibility. For me, I'm never too fussed - I very rarely build anything where \"latest and greatest\" is a problem, but I'm sure that's not true for some people. Do you have any strong feelings on that @panesofglass ?","created_at":"2015-02-21T21:31:08Z","updated_at":"2015-02-21T21:31:08Z","html_url":"https://github.com/freya-fs/freya/pull/59#discussion_r25126025","pull_request_url":"https://api.github.com/repos/freya-fs/freya/pulls/59","_links":{"self":{"href":"https://api.github.com/repos/freya-fs/freya/pulls/comments/25126025"},"html":{"href":"https://github.com/freya-fs/freya/pull/59#discussion_r25126025"},"pull_request":{"href":"https://api.github.com/repos/freya-fs/freya/pulls/59"}}},"pull_request":{"url":"https://api.github.com/repos/freya-fs/freya/pulls/59","id":28895342,"html_url":"https://github.com/freya-fs/freya/pull/59","diff_url":"https://github.com/freya-fs/freya/pull/59.diff","patch_url":"https://github.com/freya-fs/freya/pull/59.patch","issue_url":"https://api.github.com/repos/freya-fs/freya/issues/59","number":59,"state":"open","locked":false,"title":"OWIN integration","user":{"login":"panesofglass","id":8803,"avatar_url":"https://avatars.githubusercontent.com/u/8803?v=3","gravatar_id":"","url":"https://api.github.com/users/panesofglass","html_url":"https://github.com/panesofglass","followers_url":"https://api.github.com/users/panesofglass/followers","following_url":"https://api.github.com/users/panesofglass/following{/other_user}","gists_url":"https://api.github.com/users/panesofglass/gists{/gist_id}","starred_url":"https://api.github.com/users/panesofglass/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panesofglass/subscriptions","organizations_url":"https://api.github.com/users/panesofglass/orgs","repos_url":"https://api.github.com/users/panesofglass/repos","events_url":"https://api.github.com/users/panesofglass/events{/privacy}","received_events_url":"https://api.github.com/users/panesofglass/received_events","type":"User","site_admin":false},"body":"Resolve #28 \r\n- [x] from `OwinAppFunc`\r\n- [x] to `OwinMidFunc`\r\n- [x] from `OwinMidFunc`\r\n- [ ] Test working with security middleware\r\n- [ ] Test working with Glimpse","created_at":"2015-02-09T04:04:33Z","updated_at":"2015-02-21T21:31:08Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2f6b46b2f300c60b08331f2f6c0c74c4a1afa387","assignee":{"login":"panesofglass","id":8803,"avatar_url":"https://avatars.githubusercontent.com/u/8803?v=3","gravatar_id":"","url":"https://api.github.com/users/panesofglass","html_url":"https://github.com/panesofglass","followers_url":"https://api.github.com/users/panesofglass/followers","following_url":"https://api.github.com/users/panesofglass/following{/other_user}","gists_url":"https://api.github.com/users/panesofglass/gists{/gist_id}","starred_url":"https://api.github.com/users/panesofglass/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panesofglass/subscriptions","organizations_url":"https://api.github.com/users/panesofglass/orgs","repos_url":"https://api.github.com/users/panesofglass/repos","events_url":"https://api.github.com/users/panesofglass/events{/privacy}","received_events_url":"https://api.github.com/users/panesofglass/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/freya-fs/freya/milestones/3","labels_url":"https://api.github.com/repos/freya-fs/freya/milestones/3/labels","id":916655,"number":3,"title":"1.1","description":"Ensure Freya Machine works with existing OWIN middleware.","creator":{"login":"panesofglass","id":8803,"avatar_url":"https://avatars.githubusercontent.com/u/8803?v=3","gravatar_id":"","url":"https://api.github.com/users/panesofglass","html_url":"https://github.com/panesofglass","followers_url":"https://api.github.com/users/panesofglass/followers","following_url":"https://api.github.com/users/panesofglass/following{/other_user}","gists_url":"https://api.github.com/users/panesofglass/gists{/gist_id}","starred_url":"https://api.github.com/users/panesofglass/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panesofglass/subscriptions","organizations_url":"https://api.github.com/users/panesofglass/orgs","repos_url":"https://api.github.com/users/panesofglass/repos","events_url":"https://api.github.com/users/panesofglass/events{/privacy}","received_events_url":"https://api.github.com/users/panesofglass/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":0,"state":"open","created_at":"2014-12-29T13:08:30Z","updated_at":"2015-02-09T05:21:15Z","due_on":"2015-02-28T06:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/freya-fs/freya/pulls/59/commits","review_comments_url":"https://api.github.com/repos/freya-fs/freya/pulls/59/comments","review_comment_url":"https://api.github.com/repos/freya-fs/freya/pulls/comments/{number}","comments_url":"https://api.github.com/repos/freya-fs/freya/issues/59/comments","statuses_url":"https://api.github.com/repos/freya-fs/freya/statuses/71bd07cc0e5d69b7d491969bae121adf40d37e2d","head":{"label":"panesofglass:owin-integration","ref":"owin-integration","sha":"71bd07cc0e5d69b7d491969bae121adf40d37e2d","user":{"login":"panesofglass","id":8803,"avatar_url":"https://avatars.githubusercontent.com/u/8803?v=3","gravatar_id":"","url":"https://api.github.com/users/panesofglass","html_url":"https://github.com/panesofglass","followers_url":"https://api.github.com/users/panesofglass/followers","following_url":"https://api.github.com/users/panesofglass/following{/other_user}","gists_url":"https://api.github.com/users/panesofglass/gists{/gist_id}","starred_url":"https://api.github.com/users/panesofglass/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panesofglass/subscriptions","organizations_url":"https://api.github.com/users/panesofglass/orgs","repos_url":"https://api.github.com/users/panesofglass/repos","events_url":"https://api.github.com/users/panesofglass/events{/privacy}","received_events_url":"https://api.github.com/users/panesofglass/received_events","type":"User","site_admin":false},"repo":{"id":25473416,"name":"freya","full_name":"panesofglass/freya","owner":{"login":"panesofglass","id":8803,"avatar_url":"https://avatars.githubusercontent.com/u/8803?v=3","gravatar_id":"","url":"https://api.github.com/users/panesofglass","html_url":"https://github.com/panesofglass","followers_url":"https://api.github.com/users/panesofglass/followers","following_url":"https://api.github.com/users/panesofglass/following{/other_user}","gists_url":"https://api.github.com/users/panesofglass/gists{/gist_id}","starred_url":"https://api.github.com/users/panesofglass/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panesofglass/subscriptions","organizations_url":"https://api.github.com/users/panesofglass/orgs","repos_url":"https://api.github.com/users/panesofglass/repos","events_url":"https://api.github.com/users/panesofglass/events{/privacy}","received_events_url":"https://api.github.com/users/panesofglass/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/panesofglass/freya","description":"F# support for the Open Web Interface for .NET (OWIN)","fork":true,"url":"https://api.github.com/repos/panesofglass/freya","forks_url":"https://api.github.com/repos/panesofglass/freya/forks","keys_url":"https://api.github.com/repos/panesofglass/freya/keys{/key_id}","collaborators_url":"https://api.github.com/repos/panesofglass/freya/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/panesofglass/freya/teams","hooks_url":"https://api.github.com/repos/panesofglass/freya/hooks","issue_events_url":"https://api.github.com/repos/panesofglass/freya/issues/events{/number}","events_url":"https://api.github.com/repos/panesofglass/freya/events","assignees_url":"https://api.github.com/repos/panesofglass/freya/assignees{/user}","branches_url":"https://api.github.com/repos/panesofglass/freya/branches{/branch}","tags_url":"https://api.github.com/repos/panesofglass/freya/tags","blobs_url":"https://api.github.com/repos/panesofglass/freya/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/panesofglass/freya/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/panesofglass/freya/git/refs{/sha}","trees_url":"https://api.github.com/repos/panesofglass/freya/git/trees{/sha}","statuses_url":"https://api.github.com/repos/panesofglass/freya/statuses/{sha}","languages_url":"https://api.github.com/repos/panesofglass/freya/languages","stargazers_url":"https://api.github.com/repos/panesofglass/freya/stargazers","contributors_url":"https://api.github.com/repos/panesofglass/freya/contributors","subscribers_url":"https://api.github.com/repos/panesofglass/freya/subscribers","subscription_url":"https://api.github.com/repos/panesofglass/freya/subscription","commits_url":"https://api.github.com/repos/panesofglass/freya/commits{/sha}","git_commits_url":"https://api.github.com/repos/panesofglass/freya/git/commits{/sha}","comments_url":"https://api.github.com/repos/panesofglass/freya/comments{/number}","issue_comment_url":"https://api.github.com/repos/panesofglass/freya/issues/comments{/number}","contents_url":"https://api.github.com/repos/panesofglass/freya/contents/{+path}","compare_url":"https://api.github.com/repos/panesofglass/freya/compare/{base}...{head}","merges_url":"https://api.github.com/repos/panesofglass/freya/merges","archive_url":"https://api.github.com/repos/panesofglass/freya/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/panesofglass/freya/downloads","issues_url":"https://api.github.com/repos/panesofglass/freya/issues{/number}","pulls_url":"https://api.github.com/repos/panesofglass/freya/pulls{/number}","milestones_url":"https://api.github.com/repos/panesofglass/freya/milestones{/number}","notifications_url":"https://api.github.com/repos/panesofglass/freya/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/panesofglass/freya/labels{/name}","releases_url":"https://api.github.com/repos/panesofglass/freya/releases{/id}","created_at":"2014-10-20T15:41:21Z","updated_at":"2015-02-08T21:22:49Z","pushed_at":"2015-02-21T21:27:28Z","git_url":"git://github.com/panesofglass/freya.git","ssh_url":"git@github.com:panesofglass/freya.git","clone_url":"https://github.com/panesofglass/freya.git","svn_url":"https://github.com/panesofglass/freya","homepage":null,"size":1767,"stargazers_count":3,"watchers_count":3,"language":"F#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":3,"default_branch":"master"}},"base":{"label":"freya-fs:develop","ref":"develop","sha":"517c0103e96edca8b155394d07b347940f3cc02e","user":{"login":"freya-fs","id":9322151,"avatar_url":"https://avatars.githubusercontent.com/u/9322151?v=3","gravatar_id":"","url":"https://api.github.com/users/freya-fs","html_url":"https://github.com/freya-fs","followers_url":"https://api.github.com/users/freya-fs/followers","following_url":"https://api.github.com/users/freya-fs/following{/other_user}","gists_url":"https://api.github.com/users/freya-fs/gists{/gist_id}","starred_url":"https://api.github.com/users/freya-fs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freya-fs/subscriptions","organizations_url":"https://api.github.com/users/freya-fs/orgs","repos_url":"https://api.github.com/users/freya-fs/repos","events_url":"https://api.github.com/users/freya-fs/events{/privacy}","received_events_url":"https://api.github.com/users/freya-fs/received_events","type":"Organization","site_admin":false},"repo":{"id":14531506,"name":"freya","full_name":"freya-fs/freya","owner":{"login":"freya-fs","id":9322151,"avatar_url":"https://avatars.githubusercontent.com/u/9322151?v=3","gravatar_id":"","url":"https://api.github.com/users/freya-fs","html_url":"https://github.com/freya-fs","followers_url":"https://api.github.com/users/freya-fs/followers","following_url":"https://api.github.com/users/freya-fs/following{/other_user}","gists_url":"https://api.github.com/users/freya-fs/gists{/gist_id}","starred_url":"https://api.github.com/users/freya-fs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freya-fs/subscriptions","organizations_url":"https://api.github.com/users/freya-fs/orgs","repos_url":"https://api.github.com/users/freya-fs/repos","events_url":"https://api.github.com/users/freya-fs/events{/privacy}","received_events_url":"https://api.github.com/users/freya-fs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/freya-fs/freya","description":"F# support for the Open Web Interface for .NET (OWIN)","fork":false,"url":"https://api.github.com/repos/freya-fs/freya","forks_url":"https://api.github.com/repos/freya-fs/freya/forks","keys_url":"https://api.github.com/repos/freya-fs/freya/keys{/key_id}","collaborators_url":"https://api.github.com/repos/freya-fs/freya/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/freya-fs/freya/teams","hooks_url":"https://api.github.com/repos/freya-fs/freya/hooks","issue_events_url":"https://api.github.com/repos/freya-fs/freya/issues/events{/number}","events_url":"https://api.github.com/repos/freya-fs/freya/events","assignees_url":"https://api.github.com/repos/freya-fs/freya/assignees{/user}","branches_url":"https://api.github.com/repos/freya-fs/freya/branches{/branch}","tags_url":"https://api.github.com/repos/freya-fs/freya/tags","blobs_url":"https://api.github.com/repos/freya-fs/freya/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/freya-fs/freya/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/freya-fs/freya/git/refs{/sha}","trees_url":"https://api.github.com/repos/freya-fs/freya/git/trees{/sha}","statuses_url":"https://api.github.com/repos/freya-fs/freya/statuses/{sha}","languages_url":"https://api.github.com/repos/freya-fs/freya/languages","stargazers_url":"https://api.github.com/repos/freya-fs/freya/stargazers","contributors_url":"https://api.github.com/repos/freya-fs/freya/contributors","subscribers_url":"https://api.github.com/repos/freya-fs/freya/subscribers","subscription_url":"https://api.github.com/repos/freya-fs/freya/subscription","commits_url":"https://api.github.com/repos/freya-fs/freya/commits{/sha}","git_commits_url":"https://api.github.com/repos/freya-fs/freya/git/commits{/sha}","comments_url":"https://api.github.com/repos/freya-fs/freya/comments{/number}","issue_comment_url":"https://api.github.com/repos/freya-fs/freya/issues/comments{/number}","contents_url":"https://api.github.com/repos/freya-fs/freya/contents/{+path}","compare_url":"https://api.github.com/repos/freya-fs/freya/compare/{base}...{head}","merges_url":"https://api.github.com/repos/freya-fs/freya/merges","archive_url":"https://api.github.com/repos/freya-fs/freya/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/freya-fs/freya/downloads","issues_url":"https://api.github.com/repos/freya-fs/freya/issues{/number}","pulls_url":"https://api.github.com/repos/freya-fs/freya/pulls{/number}","milestones_url":"https://api.github.com/repos/freya-fs/freya/milestones{/number}","notifications_url":"https://api.github.com/repos/freya-fs/freya/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/freya-fs/freya/labels{/name}","releases_url":"https://api.github.com/repos/freya-fs/freya/releases{/id}","created_at":"2013-11-19T17:10:26Z","updated_at":"2015-02-20T13:40:53Z","pushed_at":"2015-02-20T12:24:46Z","git_url":"git://github.com/freya-fs/freya.git","ssh_url":"git@github.com:freya-fs/freya.git","clone_url":"https://github.com/freya-fs/freya.git","svn_url":"https://github.com/freya-fs/freya","homepage":null,"size":2274,"stargazers_count":83,"watchers_count":83,"language":"F#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":13,"mirror_url":null,"open_issues_count":19,"forks":13,"open_issues":19,"watchers":83,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/freya-fs/freya/pulls/59"},"html":{"href":"https://github.com/freya-fs/freya/pull/59"},"issue":{"href":"https://api.github.com/repos/freya-fs/freya/issues/59"},"comments":{"href":"https://api.github.com/repos/freya-fs/freya/issues/59/comments"},"review_comments":{"href":"https://api.github.com/repos/freya-fs/freya/pulls/59/comments"},"review_comment":{"href":"https://api.github.com/repos/freya-fs/freya/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/freya-fs/freya/pulls/59/commits"},"statuses":{"href":"https://api.github.com/repos/freya-fs/freya/statuses/71bd07cc0e5d69b7d491969bae121adf40d37e2d"}}}}