obmarg / graphql-ws-client

A GraphQL over Websockets implementation for Rust
Apache License 2.0
39 stars 15 forks source link

fix: make client clone, remove &mut self from subscribe #88

Closed obmarg closed 7 months ago

obmarg commented 7 months ago

In #87 a user was having issues using graphql-ws-client in a multithreaded environment. These issues stemmed from:

  1. As Client::subscribe takes &mut self they needed a Arc<RwLock<Client>>, which is a bit annoying.
  2. They want to call Client::close at some point, which takes an owned Client and it's hard to get one of those when you're sharing the client among many threads.

This fixes 1 by removing the mutability from Client::subscribe and 2 by driving Clone on Client.

If a user has cloned the Client and they call close on one instance it'll close all the others. So any future calls to Client::subscribe on those other clients will fail. Not ideal, but I think it's reasonable to expect users to handle this case if they have a need to clone the Client.