-
Notifications
You must be signed in to change notification settings - Fork 199
Calculate type hash from TypeDescription (rep2011) #1027
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
clalancette
merged 8 commits into
ros2:rolling
from
emersonknapp:emersonknapp/type-version-hash
Mar 29, 2023
Merged
Changes from 4 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
c44ac92
Convert TypeDescription to YAML and hash
emersonknapp 9d745da
Update to latest
emersonknapp b1c1bbc
Address review nits
emersonknapp febd2ff
Explicit yaml dependency and doctext update
emersonknapp 454adac
Update docstring language
emersonknapp fb40e7c
Fix ament exported dependency
emersonknapp c761578
Ament export dependency
emersonknapp 00dbb57
Fix msbuild warnings
emersonknapp File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| // Copyright 2023 Open Source Robotics Foundation, Inc. | ||
| // | ||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||
| // you may not use this file except in compliance with the License. | ||
| // You may obtain a copy of the License at | ||
| // | ||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||
| // | ||
| // Unless required by applicable law or agreed to in writing, software | ||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| // See the License for the specific language governing permissions and | ||
| // limitations under the License. | ||
|
|
||
| #ifndef RCL__TYPE_HASH_H_ | ||
| #define RCL__TYPE_HASH_H_ | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" | ||
| { | ||
| #endif | ||
|
|
||
| #include "rcl/types.h" | ||
| #include "rcl/visibility_control.h" | ||
| #include "rcutils/sha256.h" | ||
| #include "rosidl_runtime_c/type_hash.h" | ||
| #include "type_description_interfaces/msg/type_description.h" | ||
|
|
||
| /// Given a TypeDescription, output a string of the hashable JSON representation of that data. | ||
| /** | ||
| * The output here is generally hashed via rcl_calculate_type_hash below. | ||
| * Compare this reference implementation with rosidl_parser.type_hash.idl_to_hashable_json. | ||
|
clalancette marked this conversation as resolved.
Outdated
|
||
| * Both must produce the same output for the same types, providing a stable reference for | ||
| * external implementations of the ROS 2 Type Version Hash. | ||
| * | ||
| * The JSON representation contains all types and fields of the original message, but excludes: | ||
| * - Default values | ||
| * - Comments | ||
| * - The input plaintext files that generated the TypeDescription | ||
| * | ||
| * \param[in] type_description Prefilled TypeDescription message to be translated | ||
| * \param[out] output_repr An initialized empty char array that will be filled with | ||
| * the JSON representation of type_description. Note that output_repr will have a | ||
| * terminating null character, which should be omitted from hashing. To do so, use | ||
| * (output_repr.buffer_length - 1) or strlen(output_repr.buffer) for the size of data to hash. | ||
| * \return #RCL_RET_OK on success, or | ||
| * \return #RCL_RET_ERROR if any problems occur in translation. | ||
| */ | ||
| RCL_PUBLIC | ||
| rcl_ret_t | ||
| rcl_type_description_to_hashable_json( | ||
| const type_description_interfaces__msg__TypeDescription * type_description, | ||
| rcutils_char_array_t * output_repr); | ||
|
|
||
| /// Calculate the Type Version Hash for a given TypeDescription. | ||
| /** | ||
| * This function produces a stable hash value for a ROS communication interface type. | ||
| * For design motivations leading to this implementation, see REP-2011. | ||
| * | ||
| * This convenience wrapper calls rcl_type_description_to_hashable_json, | ||
| * then runs sha256 hash on the result. | ||
| * | ||
| * \param[in] msg Prefilled TypeDescription message describing the type to be hashed | ||
| * \param[out] message_digest Preallocated buffer, to be filled with calculated checksum | ||
| * \return #RCL_RET_OK on success, or | ||
| * \return #RCL_RET_ERROR if any problems occur while hashing. | ||
| */ | ||
| RCL_PUBLIC | ||
| rcl_ret_t | ||
| rcl_calculate_type_hash( | ||
| const type_description_interfaces__msg__TypeDescription * type_description, | ||
| rosidl_type_hash_t * out_type_hash); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif // RCL__TYPE_HASH_H_ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.