I've pushed fixes that I think should be good for most of the issues. The focus issues still need attention, but I may not get to that until the weekend. Quick summary of where I'm leaving off:
So, this is definitely one source of differences from the C implementation.
I think this probably isn't an issue. seat.interacted.take() resets the value to None (and is the idiomatic way to clear an Option and use the contents).
This should be fixed with the bindings -> seat refactor. I originally had this in place to deal with some borrow checker complaints, but the new data model fixed that entirely.
Passing the ObjectId is actually perfect. This is a huge improvement, and I think the pattern of passing around ObjectIds as user data is probably the right default for Rust since it bypasses...
Whoops! Should be fixed now.
Updated! I didn't follow the Go implementation exactly. For Rust at least, keeping the proxy in the enum with the rest of the operation-specific state is cleaner, and it didn't seem worth having a...
unwrap calls with expect
expect
unwrap calls with expect
expect
Yup! Done.
unwrap calls with expect
expect
unwrap calls with expect
expect
Done!
It's a little awkward, but we could do it.
I don't think it should ever happen without a bug. I think at the time I was thinking that logging an error message was better than panicking if it did happen, but I can see the argument either way.