Convert the Convert Request/Response types to Proto, refactor Layout conversion code #1965
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Based on PR #1886
Chain of upstream PRs as of 2025-01-09
PR [PROTOCONV] Convert the Kotlin code to Proto #1886:
main
←feature/protoconv
feature/protoconv
←wb/froeht/protolize-convertresponse
With this change we're able to fully remove serde-reflection from the code base.
This involved a decent amount of refactoring and cleanup of old work to get things right. My goal with the refactoring was to keep the packages cleanly separated and to work towards having the ability to build a DesignCompose app without including anything related to Live Update. Ultimately I could see the dc_jni crate being split into the layout and fetch portions, which would compile into their own separate libraries, and merged in with figma_import and layout.
Some of the messages related to both the doc fetching and layout processing were a bit scattered and were declared in crates that didn't actually use them. Before this change the
dc_jni
crate didn't have any of its own proto messages, it was pulling the ones it needed (Layout conversion related) from other crates (bothdc_bundle
andlayout
). The new Convert Request/Response messages would only be used bydc_jni
, so it made sense to add a build.rs file to it so that the generated messages would be native to that crate, rather than being part of an unrelated crate.While making that change it made sense to rearrange the proto messages related to the android interface, so I moved the layout related messages into a
layout_interface
proto package and put the new Convert messages into thelive_update
package.In addition, the layout code had really only been half converted to proto, we were still parsing them and then converting them into the original Rust structs. That's all cleaned up now.
We had been manually generating a json string which was decoded into the ConvertRequest on the rust side, so I converted the ConvertRequest to Proto and removed the json code. It didn't make sense to use proto on one side and not the other. It'd probably be cleaner to change the
jniFetchDoc
method to just send a single proto message instead of the ConvertRequest, doc_id, version_id and proxy configuration, but that can be cleaned up another day.I also decided not to convert the image_session from json to proto because we don't actually do anything with it on the Kotlin side other than writing it into the .dcf. I'm simply including the json in the proto message and removing the redundant storage of the session's bytes in the docContent class.
Admittedly this PR is bigger than it strictly needed to be. I can split it into some smaller PRs if requested. I'm sure there's some additional cleanup that could be done as well, including simplifying the
jniFetchDoc
function and turning ProxyConfig into a proto struct.