BUG: Adding a new API regenerates all existing Candid Result return types and breaks client compatibility

In Rust, if we autogenerate our candid bindings using the officially provided macros, in cases where there’s a new API added that returns a Result type, all the previous result types are regenerated with new names that breaks compatibility with existing deployed clients.

Here’s an example from our current application:

The above is generated for return types of Result when a new API is added to the services list for our app as shown below:

Ideally, the generator should not be generating the candid bindings from scratch but checking the earlier *.old.did that is already available and comparing to not change existing types, but add to the existing list.

Thoughts?

Thanks for reporting.

The Rust ↔ Candid bindings generation is on the top of our Q2 plan. We expect to provide more convenient and consistent DX about it.

4 Likes