diff --git a/text/0000-postfix-match.md b/text/0000-postfix-match.md
new file mode 100644
index 00000000000..af63d7377fd
--- /dev/null
+++ b/text/0000-postfix-match.md
@@ -0,0 +1,313 @@
+- Feature Name: `postfix-match`
+- Start Date: 2022-07-10
+- RFC PR: [rust-lang/rfcs#0000](https://github.com/rust-lang/rfcs/pull/0000)
+- Rust Issue: [rust-lang/rust#0000](https://github.com/rust-lang/rust/issues/0000)
+
+# Summary
+[summary]: #summary
+
+An alternative postfix syntax for match expressions that allows for interspersing match statements with function chains
+
+```rust
+foo.bar().baz.match {
+ _ => {}
+}
+```
+
+as syntax sugar for
+
+```rust
+match foo.bar().baz {
+ _ => {}
+}
+```
+
+# Motivation
+[motivation]: #motivation
+
+Method chaining is something rust users do a lot to provide a nice
+flow of data from left-to-right/top-to-bottom which promotes a very natural reading order
+of the code.
+
+Sometimes, these method chains can become quite terse for the sake of composability
+
+For instance, we have the [surprising ordering](https://github.com/rust-lang/rfcs/issues/1025)
+of the methods like
+[`map_or_else`](https://doc.rust-lang.org/std/result/enum.Result.html#method.map_or_else).
+
+This RFC proposes promoting the use of match statements by supporting postfix-match, reducing the use of some of these terse methods and potentially confusing method chains.
+
+# Guide-level explanation
+[guide-level-explanation]: #guide-level-explanation
+
+`match expressions` are how one would normally deal with the values
+of an enum type (eg `Option`, `Result`, etc.) by pattern matching on each
+variant. Some powerful techniques like pattern binding, nested patterns and or patterns
+allow for some versatile and concise, but still fairly readable syntax for dealing
+with these types.
+
+Rust often features functional approaches to lots of problems. For instance,
+it's very common to have chains of `map`, `and_then`, `ok_or`, `unwrap`
+to process some `Option` or `Result` type in a pipeline, rather than continuously reassigning to new variable bindings.
+
+```rust
+let x = Some(42);
+let magic_number = x.map(|x| x * 5)
+ .and_then(NonZeroI32::new)
+ .ok_or("5x was zero")
+ .unwrap();
+```
+
+Some of these provided method chains are fairly readable, like the ones presented above,
+but sometimes the desire to use long method chains is met with unwieldy hacks or awkward function arguments.
+
+```rust
+let x = Some("crustaceans");
+x.and_then(|x| (!x.is_empty()).then(x)) // None if x is an empty string
+ .map_or_else(
+ || "Ferris", // default
+ |x| &x[1..], // remove first letter
+ );
+```
+
+These can be re-written using postfix match to be much more self-documenting
+
+```rust
+x.match {
+ Some("") | None => None
+ x @ Some(_) => x
+}.match {
+ Some(x) => &x[1..],
+ None => "Ferris",
+};
+
+// or even just
+
+x.match {
+ Some("") | None => "Ferris"
+ x @ Some(_) => &x[1..]
+};
+```
+
+While this example ended up being a single match, and is near-equivalent to the `match x {}` form, often these option chains can get quite long, especially when interspersed with `?`, `.await` and other forms of postfix syntax we already make heavy use of.
+
+you could imagine that this `x` would be replaced with
+
+```rust
+context.client
+ .post("https://example.com/crabs")
+ .body("favourite crab?")
+ .send()
+ .await?
+ .json::