mirror of
https://github.com/facebook/sapling.git
synced 2024-12-24 05:21:49 +03:00
75105421ce
Summary: Introduce separate wire types to allow protocol evolution and client API changes to happen independently. * Duplicate `*Request`, `*Entry`, `Key`, `Parents`, `RepoPathBuf`, `HgId`, and `revisionstore_types::Metadata` types into the `wire` module. The versions in the `wire` module are required to have proper `serde` annotations, `Serialize` / `Deserialize` implementations, etc. These have been removed from the original structs. * Introduce infallible conversions from "API types" to "wire types" with the `ToWire` trait and fallible conversions from "wire types" to "API types" with the `ToApi`. API -> wire conversions should never fail in a binary that builds succesfully, but wire -> API conversions can fail in the case that the server and client are using different versions of the library. This will cause, for instance, a newly-introduced enum variant used by the client to be deserialized into the catch-all `Unknown` variant on the server, which won't generally have a corresponding representation in the API type. * Cleanup: remove `*Response` types, which are no longer used anywhere. * Introduce a `map` method on `Fetch` struct which allows a fallible conversion function to be used to convert a `Fetch<T>` to a `Fetch<U>`. This function is used in the edenapi client implementation to convert from wire types to API types. * Modify `edenapi_server` to convert from API types to wire types. * Modify `edenapi_cli` to convert back to wire types before serializing responses to disk. * Modify `make_req` to use `ToWire` for converting API structs from the `json` module to wire structs. * Modify `read_res` to use `ToApi` to convert deserialized wire types to API types with the necessary methods for investigating the contents (`.data()`, primarily). It will print an error message to stderr if it encounters a wire type which cannot be converted into the corresponding API type. * Add some documentation about protocol conventions to the root of the `wire` module. Reviewed By: kulshrax Differential Revision: D23224705 fbshipit-source-id: 88f8addc403f3a8da3cde2aeee765899a826446d |
||
---|---|---|
.. | ||
src | ||
tools | ||
types | ||
Cargo.toml |