I feel rust promotes functional programming. I created a parser that would change its own state on an advance but the mutability and borrowing kind of made it hard to do it that way so I changed it so that the parser was stateless and had to return an index rather then adjust an internal index. Is it common for people to hit issues like this where the traditional pattern just doesn’t work and you have to do it a completely different way for rust?
I've experienced this. I would say it depends a lot on the complexity at hand, so for instance if it's something rather simple, you can keep track and avoid pitfalls even when doing it with a lot of mutation and imperative style. On the other hand, when complexity grows, I find myself going more functional and avoiding mutation at all cost, as obviously it avoids a lot of problems.
I would say Rust's borrow checker and lifetimes make it harder to use traditional patterns and favor a more functional approach. Obviously, sometimes doing it the functional way might be hard, for people not so used to it, but it keeps the compiler happier I would say.