{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments/187808303","pull_request_review_id":119661241,"id":187808303,"diff_hunk":"@@ -0,0 +1,322 @@\n+- Feature Name: `deref_move`\n+- Start Date: 2018-05-05\n+- RFC PR: (leave this empty)\n+- Rust Issue: (leave this empty)\n+\n+# Summary\n+[summary]: #summary\n+\n+Add a new `DerefMove` trait that allows consuming a smart pointer to move its\n+contents, as in `let x = *p;`.\n+\n+For more background and discussion, see #178 and #997.\n+\n+# Motivation\n+[motivation]: #motivation\n+\n+Currently, two smart pointer traits provide access to values contained in smart\n+pointers: `Deref` and `DerefMut`. These traits allow overloading of the\n+dereferencing (unary `*`) operator, and by extension participate in autoderef in\n+a number of places, such as method calls and index expressions.\n+\n+These two traits, however, only dereference references to produce references to\n+the contained value. They do not offer the option to dereference by value,\n+consuming the smart pointer to produce the owned value inside. As a special\n+case, `Box<T>` has compiler support allowing it to be dereferenced (explicitly\n+or implicitly) to produce the inner `T`. Because this is special-cased in the\n+compiler, this functionality is not available for other smart pointer types.\n+\n+Other smart pointers may support this consuming operation, but it must be done\n+explicitly due to the lack of language support. For instance, in the stdlib, the\n+following methods both consume a smart pointer to produce the inner value:\n+\n+* `ManuallyDrop<T>::into_inner()`\n+* `binary_heap::PeakMut<'a, T>::pop()`\n+* `Cow<'a, B>::into_owned()`\n+\n+I have not made any attempt to survey into the larger ecosystem for more\n+examples, but there are probably many more.\n+\n+Note that removing `FnBox` is explicitly *not* part of the motivation for this\n+RFC. It has been suggested in a few places, such as in discussion of\n+rust-lang/rust#28796, that `DerefMove` would allow `Box<FnOnce()>` to be called\n+without needing the `FnBox` workaround. This is not the case, however: the inner\n+value is dynamically-sized and thus cannot be moved onto the stack. Indeed, one\n+can call a `Box<T>` where `T` is a concrete type implementing `FnOnce()`.\n+`DerefMove` would allow `Box<FnOnce()>` to continue not working, just without a\n+special case in the compiler to allow it to do so.\n+\n+This will not remove all of `Box`'s special cases from the compiler, but\n+represents progress towards that goal.\n+\n+# Guide-level explanation\n+[guide-level-explanation]: #guide-level-explanation\n+\n+The following trait is defined in `std::ops`:\n+\n+```rust\n+trait DerefMove : DerefMut {\n+    fn deref_move(self) -> Self::Target;\n+}\n+```\n+\n+This trait allows moving out of the result of a derefence. This can happen\n+either explicitly, as in `let x = *p;`, or implicitly, as in `p.into_foo()`.\n+`Box<T>` from the standard library implements `DerefMove`, allowing you to move\n+out of it.\n+\n+```rust\n+let b = Box::new(\"s\".to_owned());\n+let s = *b;\n+// ERROR: b has already been moved on the previous line.\n+// let t = *b;\n+```\n+\n+If the `Target` type is `Copy`, then `DerefMove` will not be used, and instead\n+`Deref` will be used and the resulting referenced value will be copied:\n+\n+```rust\n+let b = Box::new(0i32);\n+// Since i32 is Copy, this is equivalent to i = b.deref().\n+let i = *b;\n+// That makes this legal, since b was not moved.\n+let j = *b;\n+```\n+\n+# Reference-level explanation\n+[reference-level-explanation]: #reference-level-explanation\n+\n+`DerefMove` is a lang item that, like `Deref` and `DerefMut`, plays a role in\n+dereferencing, both explicitly with the unary `*` operator and implicitly with\n+autoderef.\n+\n+`deref_move` is only called in contexts where a value is needed to be moved out.\n+This can occur either because an explicit dereference is used in a context where\n+a value is to be moved, or because autoderef selects a method taking `self` (or\n+`Box<self>`) as a parameter. In both cases, when evaluating whether to call\n+`deref_move`, the compiler will look at whether `Target` implements `Copy`. If\n+it does not, then `deref_move` is called to move the target out of the smart\n+pointer. If it does, then instead the compiler will only call `deref` and then\n+copy out of the returned reference. For generic types, the compiler only checks\n+if a `Copy` bound is available at the use site; it is not done during\n+monomorphization.\n+\n+For explicit dereference, the changes are straightforward. Any explicit\n+dereference of a `DerefMove` type becomes a movable expression, just as\n+dereference of `Box` is today.\n+\n+For autodereference: \n+\n+* In a function call expression, the callee operand may be dereferenced and\n+  moved if the `Target` implements `FnOnce` and no reference-based call trait.\n+* In a method call expression, the receiver operand may be dereferenced and\n+  moved if the function selected by overload resolution takes `self` or\n+  `Box<self>` as a parameter (in the latter case, this would require a smart\n+  pointer containing a `Box<Self>`, of course).\n+* In a field access expression, the left-hand operand may be dereferenced and\n+  moved if the result of the expression is moved. In this case, the move is\n+  always entire; partial move is not supported when a dereference is necessary.\n+* An index expression can never move its left operand, so it is unaffected.\n+* A borrow expression can never move its operand, so it is unaffected.\n+\n+No change is made to overload resolution of method calls. This means that calls\n+which are invalid today due to preferring `T` over `&T` may now be legal,\n+selecting to move out of the smart pointer rather than giving an error.\n+\n+There is an ambiguity in a method call expression when the `Target` type of the\n+receiver is a reference, and that reference type has a method taking `self`. In\n+this case, autodereference could either dereference via `deref_move` or via\n+`deref` or `defer_mut`. In this case, it will prefer the latter (for `deref`, it\n+is a special case of the `Copy` rule above, but for `deref_mut` it is not) to\n+avoid unnecessarily moving out of the receiver.\n+\n+# Drawbacks\n+[drawbacks]: #drawbacks\n+\n+## Nobody understands autoderef already and this makes it worse\n+\n+Or at least, it would if `Box` wasn't already complicating it in the same way.\n+\n+## Copy behaviour is unintuitive in generic cases\n+\n+If a type has nontrivial/side-effectful `defer_move`, it may be slightly\n+confusing why it is not used for `Copy` types in non-generic code, but is used\n+in generic code.\n+\n+## Breaking change to an edge case of `Box<&mut T>`\n+\n+Currently, a `Box<&mut T>` variable [can be\n+dereferenced](https://play.rust-lang.org/?gist=5b3f046ecf29da8f00fde3bd1d2a3df4&version=nightly&mode=debug)\n+in at least some cases into a `&mut T` without either requiring that the\n+variable be mutable (as would be the case for any other `DerefMut` type), or\n+moving out of the `Box`. This behaviour would not be maintained if its magical\n+dereferencing were replaced with `DerefMove`, as `DerefMut` requires a mutable\n+variable.\n+\n+This is an edge case, as it requires `Box<&mut T>`, which is an unlikely type,\n+and in most cases it can be trivially fixed by making the variable mutable. It's\n+possible there are more complex cases (such as if the `Box` itself is stored in\n+another smart pointer) where this is not easily fixed, but I would be\n+unsurprised if there were few, if any, instances of this in extant code.\n+Moreover, the behaviour is arguably a bug because it is taking a mutable borrow\n+of an immutable variable (and one can modify the above example to get an error\n+message implying exactly that), though the semantics are more like the unique\n+immutable borrows used by closures.\n+\n+As a result, I propose that this breaking change be accepted after verifying its\n+effect on Cargo packages.\n+\n+# Rationale and alternatives\n+[alternatives]: #alternatives\n+\n+## Copy handling\n+\n+The handling of copies is the real complexity of `DerefMove`. Currently, one can\n+copy out of a `Box` without consuming it, so this desirable behaviour needs to\n+be preserved. The proposal is to do so by special casing in the compiler.\n+However, it could also be done via, for instance, a separate method in the Deref\n+trait definition:\n+\n+```rust\n+   fn deref_copy(&self) -> Self::Target where Self::Target : Copy {\n+       return self.deref();\n+   }\n+```\n+\n+This still requires special-casing in the compiler, but it is less magical. One\n+could even envision a `DerefCopy` trait with similar purpose.\n+\n+These approaches would, however, make diverging implementations (that is,\n+implementations for which the behaviour of the various deref traits is\n+unintuitive because they don't actually refer to the same underlying value) more\n+difficult to write, and we want to avoid that. And they would not fundamentally\n+solve the special casing in the compiler; to do that, we would really need a\n+more advanced type system allowing us to condition the type of `self` in\n+`deref_move` on whether or not `Target : Copy`.\n+\n+With negative trait bounds, we could also bound `DerefMove` on `Target : !Copy`,\n+eliminating the problem, at the cost of requiring every implementation to also\n+bound on `!Copy`.\n+\n+## Status quo\n+\n+The status quo is disfavoured because it requires special-casing `Box` in the\n+compiler, privileging it over other smart pointers. While there's no obvious\n+call in the stdlib for `DerefMut` other than `Box` (see below), it prevents","path":"text/0000-deref-move.md","position":205,"original_position":205,"commit_id":"c147a1ec75bd241b903ec9741b824715f0b2bbbb","original_commit_id":"c147a1ec75bd241b903ec9741b824715f0b2bbbb","user":{"login":"Gankro","id":1136864,"avatar_url":"https://avatars1.githubusercontent.com/u/1136864?v=4","gravatar_id":"","url":"https://api.github.com/users/Gankro","html_url":"https://github.com/Gankro","followers_url":"https://api.github.com/users/Gankro/followers","following_url":"https://api.github.com/users/Gankro/following{/other_user}","gists_url":"https://api.github.com/users/Gankro/gists{/gist_id}","starred_url":"https://api.github.com/users/Gankro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Gankro/subscriptions","organizations_url":"https://api.github.com/users/Gankro/orgs","repos_url":"https://api.github.com/users/Gankro/repos","events_url":"https://api.github.com/users/Gankro/events{/privacy}","received_events_url":"https://api.github.com/users/Gankro/received_events","type":"User","site_admin":false},"body":"typo: `DerefMove`","created_at":"2018-05-13T17:41:43Z","updated_at":"2018-05-13T17:47:04Z","html_url":"https://github.com/rust-lang/rfcs/pull/2439#discussion_r187808303","pull_request_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/2439","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments/187808303"},"html":{"href":"https://github.com/rust-lang/rfcs/pull/2439#discussion_r187808303"},"pull_request":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/2439"}}},"pull_request":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/2439","id":187654764,"html_url":"https://github.com/rust-lang/rfcs/pull/2439","diff_url":"https://github.com/rust-lang/rfcs/pull/2439.diff","patch_url":"https://github.com/rust-lang/rfcs/pull/2439.patch","issue_url":"https://api.github.com/repos/rust-lang/rfcs/issues/2439","number":2439,"state":"open","locked":false,"title":"RFC for DerefMove","user":{"login":"alercah","id":20842325,"avatar_url":"https://avatars0.githubusercontent.com/u/20842325?v=4","gravatar_id":"","url":"https://api.github.com/users/alercah","html_url":"https://github.com/alercah","followers_url":"https://api.github.com/users/alercah/followers","following_url":"https://api.github.com/users/alercah/following{/other_user}","gists_url":"https://api.github.com/users/alercah/gists{/gist_id}","starred_url":"https://api.github.com/users/alercah/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alercah/subscriptions","organizations_url":"https://api.github.com/users/alercah/orgs","repos_url":"https://api.github.com/users/alercah/repos","events_url":"https://api.github.com/users/alercah/events{/privacy}","received_events_url":"https://api.github.com/users/alercah/received_events","type":"User","site_admin":false},"body":"[Rendered](https://github.com/alercah/rfcs/blob/deref-move/text/0000-deref-move.md)\r\n\r\nPart of #997.","created_at":"2018-05-13T06:24:17Z","updated_at":"2018-05-13T17:47:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0d514c6ed9e497479d3d64de74d3c33f5681f6a5","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/2439/commits","review_comments_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/2439/comments","review_comment_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rust-lang/rfcs/issues/2439/comments","statuses_url":"https://api.github.com/repos/rust-lang/rfcs/statuses/c147a1ec75bd241b903ec9741b824715f0b2bbbb","head":{"label":"alercah:deref-move","ref":"deref-move","sha":"c147a1ec75bd241b903ec9741b824715f0b2bbbb","user":{"login":"alercah","id":20842325,"avatar_url":"https://avatars0.githubusercontent.com/u/20842325?v=4","gravatar_id":"","url":"https://api.github.com/users/alercah","html_url":"https://github.com/alercah","followers_url":"https://api.github.com/users/alercah/followers","following_url":"https://api.github.com/users/alercah/following{/other_user}","gists_url":"https://api.github.com/users/alercah/gists{/gist_id}","starred_url":"https://api.github.com/users/alercah/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alercah/subscriptions","organizations_url":"https://api.github.com/users/alercah/orgs","repos_url":"https://api.github.com/users/alercah/repos","events_url":"https://api.github.com/users/alercah/events{/privacy}","received_events_url":"https://api.github.com/users/alercah/received_events","type":"User","site_admin":false},"repo":{"id":120553497,"name":"rfcs","full_name":"alercah/rfcs","owner":{"login":"alercah","id":20842325,"avatar_url":"https://avatars0.githubusercontent.com/u/20842325?v=4","gravatar_id":"","url":"https://api.github.com/users/alercah","html_url":"https://github.com/alercah","followers_url":"https://api.github.com/users/alercah/followers","following_url":"https://api.github.com/users/alercah/following{/other_user}","gists_url":"https://api.github.com/users/alercah/gists{/gist_id}","starred_url":"https://api.github.com/users/alercah/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alercah/subscriptions","organizations_url":"https://api.github.com/users/alercah/orgs","repos_url":"https://api.github.com/users/alercah/repos","events_url":"https://api.github.com/users/alercah/events{/privacy}","received_events_url":"https://api.github.com/users/alercah/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/alercah/rfcs","description":"RFCs for changes to Rust","fork":true,"url":"https://api.github.com/repos/alercah/rfcs","forks_url":"https://api.github.com/repos/alercah/rfcs/forks","keys_url":"https://api.github.com/repos/alercah/rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/alercah/rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/alercah/rfcs/teams","hooks_url":"https://api.github.com/repos/alercah/rfcs/hooks","issue_events_url":"https://api.github.com/repos/alercah/rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/alercah/rfcs/events","assignees_url":"https://api.github.com/repos/alercah/rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/alercah/rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/alercah/rfcs/tags","blobs_url":"https://api.github.com/repos/alercah/rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/alercah/rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/alercah/rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/alercah/rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/alercah/rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/alercah/rfcs/languages","stargazers_url":"https://api.github.com/repos/alercah/rfcs/stargazers","contributors_url":"https://api.github.com/repos/alercah/rfcs/contributors","subscribers_url":"https://api.github.com/repos/alercah/rfcs/subscribers","subscription_url":"https://api.github.com/repos/alercah/rfcs/subscription","commits_url":"https://api.github.com/repos/alercah/rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/alercah/rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/alercah/rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/alercah/rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/alercah/rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/alercah/rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/alercah/rfcs/merges","archive_url":"https://api.github.com/repos/alercah/rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/alercah/rfcs/downloads","issues_url":"https://api.github.com/repos/alercah/rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/alercah/rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/alercah/rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/alercah/rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/alercah/rfcs/labels{/name}","releases_url":"https://api.github.com/repos/alercah/rfcs/releases{/id}","deployments_url":"https://api.github.com/repos/alercah/rfcs/deployments","created_at":"2018-02-07T02:45:17Z","updated_at":"2018-02-07T02:45:21Z","pushed_at":"2018-05-13T04:48:40Z","git_url":"git://github.com/alercah/rfcs.git","ssh_url":"git@github.com:alercah/rfcs.git","clone_url":"https://github.com/alercah/rfcs.git","svn_url":"https://github.com/alercah/rfcs","homepage":"http://rust-lang.github.io/rfcs/","size":11687,"stargazers_count":0,"watchers_count":0,"language":"Shell","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"rust-lang:master","ref":"master","sha":"adecae4da29556cc5a528b601bd2c2240ae794ea","user":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars1.githubusercontent.com/u/5430905?v=4","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":17527989,"name":"rfcs","full_name":"rust-lang/rfcs","owner":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars1.githubusercontent.com/u/5430905?v=4","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rust-lang/rfcs","description":"RFCs for changes to Rust","fork":false,"url":"https://api.github.com/repos/rust-lang/rfcs","forks_url":"https://api.github.com/repos/rust-lang/rfcs/forks","keys_url":"https://api.github.com/repos/rust-lang/rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rust-lang/rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rust-lang/rfcs/teams","hooks_url":"https://api.github.com/repos/rust-lang/rfcs/hooks","issue_events_url":"https://api.github.com/repos/rust-lang/rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/rust-lang/rfcs/events","assignees_url":"https://api.github.com/repos/rust-lang/rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/rust-lang/rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/rust-lang/rfcs/tags","blobs_url":"https://api.github.com/repos/rust-lang/rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rust-lang/rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rust-lang/rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/rust-lang/rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rust-lang/rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/rust-lang/rfcs/languages","stargazers_url":"https://api.github.com/repos/rust-lang/rfcs/stargazers","contributors_url":"https://api.github.com/repos/rust-lang/rfcs/contributors","subscribers_url":"https://api.github.com/repos/rust-lang/rfcs/subscribers","subscription_url":"https://api.github.com/repos/rust-lang/rfcs/subscription","commits_url":"https://api.github.com/repos/rust-lang/rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/rust-lang/rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/rust-lang/rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/rust-lang/rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/rust-lang/rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/rust-lang/rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rust-lang/rfcs/merges","archive_url":"https://api.github.com/repos/rust-lang/rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rust-lang/rfcs/downloads","issues_url":"https://api.github.com/repos/rust-lang/rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/rust-lang/rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/rust-lang/rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/rust-lang/rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rust-lang/rfcs/labels{/name}","releases_url":"https://api.github.com/repos/rust-lang/rfcs/releases{/id}","deployments_url":"https://api.github.com/repos/rust-lang/rfcs/deployments","created_at":"2014-03-07T21:29:00Z","updated_at":"2018-05-13T16:17:13Z","pushed_at":"2018-05-13T16:09:12Z","git_url":"git://github.com/rust-lang/rfcs.git","ssh_url":"git@github.com:rust-lang/rfcs.git","clone_url":"https://github.com/rust-lang/rfcs.git","svn_url":"https://github.com/rust-lang/rfcs","homepage":"http://rust-lang.github.io/rfcs/","size":137995,"stargazers_count":1487,"watchers_count":1487,"language":"Shell","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":622,"mirror_url":null,"archived":false,"open_issues_count":708,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":622,"open_issues":708,"watchers":1487,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/2439"},"html":{"href":"https://github.com/rust-lang/rfcs/pull/2439"},"issue":{"href":"https://api.github.com/repos/rust-lang/rfcs/issues/2439"},"comments":{"href":"https://api.github.com/repos/rust-lang/rfcs/issues/2439/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/2439/comments"},"review_comment":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/2439/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang/rfcs/statuses/c147a1ec75bd241b903ec9741b824715f0b2bbbb"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Gankro"}}