check the incoming request version, which we hopefully don't need to use but does allow us optionality in the future to change the protocol in a breaking way.
use Duration instead of millis within the Rust SDK (still uses response_timeout_ms at FFI and protocol level)
Use a data class for method handlers to allow the introduction of new params later without a breaking change
Use a data class for perform_rpc for more consistency with updates made in other SDKs