{"action":"created","comment":{"url":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/comments/175853096","pull_request_review_id":105447698,"id":175853096,"diff_hunk":"@@ -0,0 +1,392 @@\n+# RockLib.Configuration.ObjectFactory [![Build status](https://ci.appveyor.com/api/projects/status/ox9velgud5ljj8d0?svg=true)](https://ci.appveyor.com/project/bfriesen/rocklib-configuration-owv0n)\n+\n+An alternative to `Microsoft.Extensions.Configuration.Binder` that supports non-default constructors and other features commonly found in JSON and XML serializers.\n+\n+## Table Of Contents\n+\n+- [Overview](#overview)\n+- [Non-default constructors](#non-default-constructors)\n+- [Type-specified values](#type-specified-values)\n+- [Lists](#lists)\n+- [Default Types](#default-types)\n+- [Value Converters](#value-converters)\n+\n+### Overview\n+\n+The `RockLib.Configuration.ObjectFactory` package defines a `Create` extension method that behaves very similar to the `Get` extension method from the `Microsoft.Extensions.Configuration.Binder` package. Both extension methods extend the `IConfiguration` interface and create an object of a specified type with values contained in the `IConfiguration` intstance. The `Create` extension method also has additional features, as described in later sections.\n+\n+For example, an `IConfiguration` created with this json file:\n+\n+```json\n+{\n+    \"bar\": 123,\n+    \"baz\": {\n+        \"qux\": \"abc\",\n+        \"corge\": true\n+    }\n+}\n+```\n+\n+can be mapped to an instance of the `Foo` class:\n+\n+```c#\n+public class Foo\n+{\n+    public int Bar { get; set; }\n+    public Baz Baz { get; set; }\n+}\n+\n+public class Baz\n+{\n+    public string Qux { get; set; }\n+    public bool Corge { get; set; }\n+}\n+```\n+\n+by making this call:\n+\n+```c#\n+IConfiguration configuration; // TODO: load from json\n+Foo foo = configuration.Create<Foo>();\n+\n+// Non-generic overload is also available.\n+Foo foo2 = (Foo)configuration.Create(typeof(Foo));\n+```\n+\n+### Non-default constructors\n+\n+The `Create` extension method supports mapping to types without default constructors. It does so by matching config setting names to constructor parameter names. For example:\n+\n+```json\n+{\n+    \"bar\": 123,\n+    \"baz\": {\n+        \"qux\": \"abc\",\n+        \"corge\": true\n+    }\n+}\n+```\n+\n+can be mapped to an instance of the `Foo` class:\n+\n+```c#\n+public class Foo\n+{\n+    public Foo(int bar, Baz baz)\n+    {\n+        Bar = bar;\n+        Baz = baz;\n+    }\n+\n+    public int Bar { get; }\n+    public Baz Baz { get; }\n+}\n+\n+public class Baz\n+{\n+    public Baz(string qux, bool corge)\n+    {\n+        Qux = qux;\n+        Corge = corge;\n+    }\n+\n+    public string Qux { get; }\n+    public bool Corge { get; }\n+}\n+```\n+\n+Note that a public property corresponding to the constructor parameter does not have to exist in order for the mapping to occur. The same configuration can be mapped to this version of `Foo` as well:\n+\n+```c#\n+public class Foo\n+{\n+    public Foo(int bar, Baz baz)\n+    {\n+    }\n+}\n+\n+public class Baz\n+{\n+    public Baz(string qux, bool corge)\n+    {\n+    }\n+}\n+```\n+\n+### Type-specified values\n+\n+Sometimes, it is necessary to specify a derived type for a value in the configuration. For example, given the following types defined in assembly `MyAssembly`:\n+\n+```c#\n+namespace MyNamespace\n+{\n+    public class Foo\n+    {\n+        public int Bar { get; set; }\n+        public Baz Baz { get; set; }\n+    }\n+\n+    public class Baz\n+    {\n+        public string Qux { get; set; }\n+    }\n+\n+    public class BazDerived : Baz\n+    {\n+        public bool Corge { get; set; }\n+    }\n+}\n+```\n+\n+a instance of `Foo` can be created with a `Baz` property with a value of type `BazDerived` by specifying a `type/value` pair where the `type` is a *[assembly quallified name](https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx)*:\n+\n+```json\n+{\n+    \"bar\": 123,\n+    \"baz\": {\n+        \"type\": \"MyNamespace.BazDerived, MyAssembly\",\n+        \"value\": {\n+            \"qux\": \"abc\",\n+            \"corge\": true\n+        }\n+    }\n+}\n+```\n+\n+Being able to specify a type means that interfaces and abstract classes are supported.\n+\n+```c#\n+public class Foo\n+{\n+    public IBar Bar { get; set; }\n+    public BazBase Baz { get; set; }\n+}\n+\n+public interface IBar\n+{\n+}\n+\n+public class Bar : IBar\n+{\n+    public int Qux { get; set; }\n+}\n+\n+public abstract class BazBase\n+{\n+}\n+\n+public class Baz : BazBase\n+{\n+    public bool Corge { get; set; }\n+}\n+```\n+\n+is mappable from:\n+\n+```json\n+{\n+    \"bar\": {\n+        \"type\": \"MyNamespace.Bar, MyAssembly\",\n+        \"value\": {\n+            \"qux\": \"abc\"\n+        }\n+    },\n+    \"baz\": {\n+        \"type\": \"MyNamespace.Baz, MyAssembly\",\n+        \"value\": {\n+            \"corge\": true\n+        }\n+    }\n+}\n+```\n+\n+### Lists\n+\n+RockLib.Configuration.ObjectFactory currently supports the following list types:\n+\n+- Any single-dimension array\n+- `List<T>`\n+- `IList<T>`\n+- `ICollection<T>`\n+- `IEnumerable<T>`\n+- `IReadOnlyCollection<T>`\n+- `IReadOnlyList<T>`\n+\n+If a list property is readonly, one of the following conditions must be met:\n+\n+- The property type is one of the following:\n+  - `List<T>`\n+  - `IList<T>`\n+  - `ICollectionList<T>`\n+- The property type implements `IList` and has a single `Add` method that has one parameter with a type other than `object`.\n+\n+If a class has a list-type property, but the application only want to define one item, the configuration can be flattened. For the `Foo` class:\n+\n+```c#\n+public class Foo\n+{\n+    public IEnumerable<Bar> Bars { get; set; }\n+}\n+\n+public class Bar\n+{\n+    public string Baz { get; set; }\n+    public int Qux { get; set; }\n+}\n+```\n+\n+instead of a configuration like this:\n+\n+```json\n+{\n+    \"bars\": [\n+        {\n+            \"baz\": \"abc\",\n+            \"qux\": 123\n+        }\n+    ]\n+}\n+```\n+\n+can be rewritten like this:\n+\n+```json\n+{\n+    \"bars\": {\n+        \"baz\": \"abc\",\n+        \"qux\": 123\n+    }\n+}\n+```\n+\n+### Default Types\n+\n+Given a type `Foo` that has an abstract property `Bar`:\n+\n+```c#\n+public class Foo\n+{\n+    public IBar Bar { get; set; }\n+}\n+\n+public interface IBar\n+{\n+}\n+\n+public class DefaultBar : IBar\n+{\n+    public int Baz { get; set; }\n+}\n+\n+We would like to be able to define the `DefaultBar` type as the default type - if the type is not otherwise specified, create an instance of `DefaultBar`. There are two ways of specifying the default type: by property or by type. When specified by property, we want to say: \"when setting the `Foo.Bar` property, if the configuration is *not* type-specified, set the property to an instance of `DefaultBar`.\" When specified by type we want to say: \"whenever creating an instance of `IBar`, if the configuration is *not* type-specified, create an instance of `DefaultBar`.","path":"RockLib.Configuration.ObjectFactory/README.md","position":281,"original_position":281,"commit_id":"733cf0ac943c6f549757fd514ef077f7258ddd89","original_commit_id":"733cf0ac943c6f549757fd514ef077f7258ddd89","user":{"login":"JustinMoss","id":5470940,"avatar_url":"https://avatars3.githubusercontent.com/u/5470940?v=4","gravatar_id":"","url":"https://api.github.com/users/JustinMoss","html_url":"https://github.com/JustinMoss","followers_url":"https://api.github.com/users/JustinMoss/followers","following_url":"https://api.github.com/users/JustinMoss/following{/other_user}","gists_url":"https://api.github.com/users/JustinMoss/gists{/gist_id}","starred_url":"https://api.github.com/users/JustinMoss/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JustinMoss/subscriptions","organizations_url":"https://api.github.com/users/JustinMoss/orgs","repos_url":"https://api.github.com/users/JustinMoss/repos","events_url":"https://api.github.com/users/JustinMoss/events{/privacy}","received_events_url":"https://api.github.com/users/JustinMoss/received_events","type":"User","site_admin":false},"body":"Should this close off the code section?  It seems to look funny here in the readme","created_at":"2018-03-20T17:19:15Z","updated_at":"2018-03-20T17:26:15Z","html_url":"https://github.com/RockLib/RockLib.Configuration/pull/29#discussion_r175853096","pull_request_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/29","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/comments/175853096"},"html":{"href":"https://github.com/RockLib/RockLib.Configuration/pull/29#discussion_r175853096"},"pull_request":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/29"}}},"pull_request":{"url":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/29","id":176255827,"html_url":"https://github.com/RockLib/RockLib.Configuration/pull/29","diff_url":"https://github.com/RockLib/RockLib.Configuration/pull/29.diff","patch_url":"https://github.com/RockLib/RockLib.Configuration/pull/29.patch","issue_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues/29","number":29,"state":"open","locked":false,"title":"Update readme files","user":{"login":"bfriesen","id":1056340,"avatar_url":"https://avatars0.githubusercontent.com/u/1056340?v=4","gravatar_id":"","url":"https://api.github.com/users/bfriesen","html_url":"https://github.com/bfriesen","followers_url":"https://api.github.com/users/bfriesen/followers","following_url":"https://api.github.com/users/bfriesen/following{/other_user}","gists_url":"https://api.github.com/users/bfriesen/gists{/gist_id}","starred_url":"https://api.github.com/users/bfriesen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bfriesen/subscriptions","organizations_url":"https://api.github.com/users/bfriesen/orgs","repos_url":"https://api.github.com/users/bfriesen/repos","events_url":"https://api.github.com/users/bfriesen/events{/privacy}","received_events_url":"https://api.github.com/users/bfriesen/received_events","type":"User","site_admin":false},"body":"- Create separate readme files for each package.\r\n- Update main readme to link to each package.\r\n- Remove old content from main readme.","created_at":"2018-03-20T16:51:47Z","updated_at":"2018-03-20T17:26:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a8119c4eb9383595ba621472895dc765e71b254b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/29/commits","review_comments_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/29/comments","review_comment_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues/29/comments","statuses_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/statuses/733cf0ac943c6f549757fd514ef077f7258ddd89","head":{"label":"RockLib:readme","ref":"readme","sha":"733cf0ac943c6f549757fd514ef077f7258ddd89","user":{"login":"RockLib","id":7093169,"avatar_url":"https://avatars0.githubusercontent.com/u/7093169?v=4","gravatar_id":"","url":"https://api.github.com/users/RockLib","html_url":"https://github.com/RockLib","followers_url":"https://api.github.com/users/RockLib/followers","following_url":"https://api.github.com/users/RockLib/following{/other_user}","gists_url":"https://api.github.com/users/RockLib/gists{/gist_id}","starred_url":"https://api.github.com/users/RockLib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RockLib/subscriptions","organizations_url":"https://api.github.com/users/RockLib/orgs","repos_url":"https://api.github.com/users/RockLib/repos","events_url":"https://api.github.com/users/RockLib/events{/privacy}","received_events_url":"https://api.github.com/users/RockLib/received_events","type":"Organization","site_admin":false},"repo":{"id":96794950,"name":"RockLib.Configuration","full_name":"RockLib/RockLib.Configuration","owner":{"login":"RockLib","id":7093169,"avatar_url":"https://avatars0.githubusercontent.com/u/7093169?v=4","gravatar_id":"","url":"https://api.github.com/users/RockLib","html_url":"https://github.com/RockLib","followers_url":"https://api.github.com/users/RockLib/followers","following_url":"https://api.github.com/users/RockLib/following{/other_user}","gists_url":"https://api.github.com/users/RockLib/gists{/gist_id}","starred_url":"https://api.github.com/users/RockLib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RockLib/subscriptions","organizations_url":"https://api.github.com/users/RockLib/orgs","repos_url":"https://api.github.com/users/RockLib/repos","events_url":"https://api.github.com/users/RockLib/events{/privacy}","received_events_url":"https://api.github.com/users/RockLib/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RockLib/RockLib.Configuration","description":null,"fork":false,"url":"https://api.github.com/repos/RockLib/RockLib.Configuration","forks_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/forks","keys_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/teams","hooks_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/hooks","issue_events_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues/events{/number}","events_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/events","assignees_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/assignees{/user}","branches_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/branches{/branch}","tags_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/tags","blobs_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/refs{/sha}","trees_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/statuses/{sha}","languages_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/languages","stargazers_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/stargazers","contributors_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/contributors","subscribers_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/subscribers","subscription_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/subscription","commits_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/commits{/sha}","git_commits_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/commits{/sha}","comments_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/comments{/number}","issue_comment_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues/comments{/number}","contents_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/contents/{+path}","compare_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/merges","archive_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/downloads","issues_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues{/number}","pulls_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls{/number}","milestones_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/milestones{/number}","notifications_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/labels{/name}","releases_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/releases{/id}","deployments_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/deployments","created_at":"2017-07-10T15:48:44Z","updated_at":"2017-08-04T14:24:57Z","pushed_at":"2018-03-20T16:51:47Z","git_url":"git://github.com/RockLib/RockLib.Configuration.git","ssh_url":"git@github.com:RockLib/RockLib.Configuration.git","clone_url":"https://github.com/RockLib/RockLib.Configuration.git","svn_url":"https://github.com/RockLib/RockLib.Configuration","homepage":null,"size":3180,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":4,"open_issues":2,"watchers":0,"default_branch":"develop"}},"base":{"label":"RockLib:develop","ref":"develop","sha":"cfb3f2e6ffceea463ddb399a2bdc35a5f9d83dd8","user":{"login":"RockLib","id":7093169,"avatar_url":"https://avatars0.githubusercontent.com/u/7093169?v=4","gravatar_id":"","url":"https://api.github.com/users/RockLib","html_url":"https://github.com/RockLib","followers_url":"https://api.github.com/users/RockLib/followers","following_url":"https://api.github.com/users/RockLib/following{/other_user}","gists_url":"https://api.github.com/users/RockLib/gists{/gist_id}","starred_url":"https://api.github.com/users/RockLib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RockLib/subscriptions","organizations_url":"https://api.github.com/users/RockLib/orgs","repos_url":"https://api.github.com/users/RockLib/repos","events_url":"https://api.github.com/users/RockLib/events{/privacy}","received_events_url":"https://api.github.com/users/RockLib/received_events","type":"Organization","site_admin":false},"repo":{"id":96794950,"name":"RockLib.Configuration","full_name":"RockLib/RockLib.Configuration","owner":{"login":"RockLib","id":7093169,"avatar_url":"https://avatars0.githubusercontent.com/u/7093169?v=4","gravatar_id":"","url":"https://api.github.com/users/RockLib","html_url":"https://github.com/RockLib","followers_url":"https://api.github.com/users/RockLib/followers","following_url":"https://api.github.com/users/RockLib/following{/other_user}","gists_url":"https://api.github.com/users/RockLib/gists{/gist_id}","starred_url":"https://api.github.com/users/RockLib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RockLib/subscriptions","organizations_url":"https://api.github.com/users/RockLib/orgs","repos_url":"https://api.github.com/users/RockLib/repos","events_url":"https://api.github.com/users/RockLib/events{/privacy}","received_events_url":"https://api.github.com/users/RockLib/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RockLib/RockLib.Configuration","description":null,"fork":false,"url":"https://api.github.com/repos/RockLib/RockLib.Configuration","forks_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/forks","keys_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/teams","hooks_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/hooks","issue_events_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues/events{/number}","events_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/events","assignees_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/assignees{/user}","branches_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/branches{/branch}","tags_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/tags","blobs_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/refs{/sha}","trees_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/statuses/{sha}","languages_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/languages","stargazers_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/stargazers","contributors_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/contributors","subscribers_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/subscribers","subscription_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/subscription","commits_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/commits{/sha}","git_commits_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/git/commits{/sha}","comments_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/comments{/number}","issue_comment_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues/comments{/number}","contents_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/contents/{+path}","compare_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/merges","archive_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/downloads","issues_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues{/number}","pulls_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls{/number}","milestones_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/milestones{/number}","notifications_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/labels{/name}","releases_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/releases{/id}","deployments_url":"https://api.github.com/repos/RockLib/RockLib.Configuration/deployments","created_at":"2017-07-10T15:48:44Z","updated_at":"2017-08-04T14:24:57Z","pushed_at":"2018-03-20T16:51:47Z","git_url":"git://github.com/RockLib/RockLib.Configuration.git","ssh_url":"git@github.com:RockLib/RockLib.Configuration.git","clone_url":"https://github.com/RockLib/RockLib.Configuration.git","svn_url":"https://github.com/RockLib/RockLib.Configuration","homepage":null,"size":3180,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":4,"open_issues":2,"watchers":0,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/29"},"html":{"href":"https://github.com/RockLib/RockLib.Configuration/pull/29"},"issue":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues/29"},"comments":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/issues/29/comments"},"review_comments":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/29/comments"},"review_comment":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/pulls/29/commits"},"statuses":{"href":"https://api.github.com/repos/RockLib/RockLib.Configuration/statuses/733cf0ac943c6f549757fd514ef077f7258ddd89"}},"author_association":"OWNER"}}
{"actor":{"display_login":"JustinMoss"}}