I don't want to rain on anyone's parade, but type inference across statements would be a major change in how Swift does things; it's also likely to be a source compat break if you apply it to multi-line closures no matter how hard we try. The reason Rust (and Haskell, and several other languages) can get away with it is that they don't have overloading (by type or by default arguments), which makes the problem of type-checking a lot simpler. In Swift, we've kept it limited to a single statement so that both the compiler and the developer can know that once a type is defined, its type is fixed.
I will say that a limited way that model could be extended without full-on multi-statement type-checking would be the syntax @QuinceyMorris brought up.
let t = ...
x = f(t)
In this case, nothing can depend on the type of
x until it is set, and so it'd be possible for the compiler to infer it based on the first assignment. If there's more than one "first assignment", the rest would have to agree with the first. (If I recall correctly there's a similar rule for the inferred return type of an Objective-C block.)