Current section

35 Versions

Jump to

Compare versions

6 files changed
+71 additions
-38 deletions
  @@ -1,5 +1,22 @@
1 1 # CHANGELOG
2 2
3 + ## v0.8.5 on 05 Jun 2023
4 +
5 + **Full Changelog**: https://github.com/rclex/rclex/compare/v0.8.4...v0.8.5
6 +
7 + * New features:
8 + * * Adding handling for nested Message types from different Packages by @steve-at in https://github.com/rclex/rclex/pull/230
9 + * Code Improvements/Fixes: none
10 + * Bumps:
11 + * Bump elixir_make from 0.7.6 to 0.7.7
12 + * Known issues to be addressed in the near future:
13 + * `publish/2` sometimes failed just after `create_publisher/3` in https://github.com/rclex/rclex/issues/212
14 + * Lock `git_hooks` to 0.6.5 due to its issue in https://github.com/rclex/rclex/issues/138
15 + * Bump to Humble Hawksbill in https://github.com/rclex/rclex/issues/114
16 + * Bump to Iron Irwini in https://github.com/rclex/rclex/issues/228
17 + * Release rcl nif resources when GerServer terminates in https://github.com/rclex/rclex/issues/160
18 + * Note in this release: none
19 +
3 20 ## v0.8.4 on 11 Apr 2023
4 21
5 22 **Full Changelog**: https://github.com/rclex/rclex/compare/v0.8.3...v0.8.4
  @@ -92,7 +92,7 @@ by adding `rclex` to your list of dependencies in `mix.exs`:
92 92 defp deps do
93 93 [
94 94 ...
95 - {:rclex, "~> 0.8.4"},
95 + {:rclex, "~> 0.8.5"},
96 96 ...
97 97 ]
98 98 end
  @@ -79,7 +79,7 @@ cd rclex_usage
79 79 defp deps do
80 80 [
81 81 ...
82 - {:rclex, "~> 0.8.4"},
82 + {:rclex, "~> 0.8.5"},
83 83 ...
84 84 ]
85 85 end
  @@ -3,37 +3,36 @@
3 3 {<<"description">>,<<"ROS 2 Client Library for Elixir.">>}.
4 4 {<<"elixir">>,<<"~> 1.12">>}.
5 5 {<<"files">>,
6 - [<<"lib">>,<<"lib/rclex">>,<<"lib/rclex/publisher.ex">>,
7 - <<"lib/rclex/return_code.ex">>,<<"lib/rclex/node.ex">>,
8 - <<"lib/rclex/job_executor.ex">>,<<"lib/rclex/job_queue.ex">>,
9 - <<"lib/rclex/msg_prot.ex">>,<<"lib/rclex/subscriber.ex">>,
10 - <<"lib/rclex/timer_loop.ex">>,<<"lib/rclex/resource_server.ex">>,
11 - <<"lib/rclex/msg_types_nif.ex">>,<<"lib/rclex/timer.ex">>,
12 - <<"lib/rclex/sub_loop.ex">>,<<"lib/rclex/nifs.ex">>,<<"lib/rclex/msg.ex">>,
13 - <<"lib/rclex.ex">>,<<"lib/mix">>,<<"lib/mix/tasks">>,
14 - <<"lib/mix/tasks/rclex">>,<<"lib/mix/tasks/rclex/prep">>,
15 - <<"lib/mix/tasks/rclex/prep/ros2.ex">>,<<"lib/mix/tasks/rclex/gen">>,
16 - <<"lib/mix/tasks/rclex/gen/msgs.ex">>,<<"priv">>,<<"priv/templates">>,
6 + [<<"lib">>,<<"lib/rclex.ex">>,<<"lib/rclex">>,<<"lib/rclex/job_queue.ex">>,
7 + <<"lib/rclex/timer_loop.ex">>,<<"lib/rclex/msg_prot.ex">>,
8 + <<"lib/rclex/resource_server.ex">>,<<"lib/rclex/timer.ex">>,
9 + <<"lib/rclex/sub_loop.ex">>,<<"lib/rclex/msg.ex">>,<<"lib/rclex/node.ex">>,
10 + <<"lib/rclex/return_code.ex">>,<<"lib/rclex/job_executor.ex">>,
11 + <<"lib/rclex/nifs.ex">>,<<"lib/rclex/subscriber.ex">>,
12 + <<"lib/rclex/publisher.ex">>,<<"lib/rclex/msg_types_nif.ex">>,<<"lib/mix">>,
13 + <<"lib/mix/tasks">>,<<"lib/mix/tasks/rclex">>,<<"lib/mix/tasks/rclex/gen">>,
14 + <<"lib/mix/tasks/rclex/gen/msgs.ex">>,<<"lib/mix/tasks/rclex/prep">>,
15 + <<"lib/mix/tasks/rclex/prep/ros2.ex">>,<<"priv">>,<<"priv/templates">>,
17 16 <<"priv/templates/rclex.gen.msgs">>,
17 + <<"priv/templates/rclex.gen.msgs/msg_mod.eex">>,
18 + <<"priv/templates/rclex.gen.msgs/msg_prot_impl.eex">>,
19 + <<"priv/templates/rclex.gen.msgs/src">>,
20 + <<"priv/templates/rclex.gen.msgs/src/msg_types_nif.h">>,
21 + <<"priv/templates/rclex.gen.msgs/src/msg_types_nif.ec">>,
22 + <<"priv/templates/rclex.gen.msgs/msg_types_nif.eex">>,
23 + <<"priv/templates/rclex.gen.msgs/msg_nif_c.eex">>,
18 24 <<"priv/templates/rclex.gen.msgs/msg_nif_h.eex">>,
19 25 <<"priv/templates/rclex.gen.msgs/lib">>,
20 26 <<"priv/templates/rclex.gen.msgs/lib/rclex">>,
21 - <<"priv/templates/rclex.gen.msgs/lib/rclex/msg_types_nif.ex">>,
22 - <<"priv/templates/rclex.gen.msgs/src">>,
23 - <<"priv/templates/rclex.gen.msgs/src/msg_types_nif.ec">>,
24 - <<"priv/templates/rclex.gen.msgs/src/msg_types_nif.h">>,
25 - <<"priv/templates/rclex.gen.msgs/msg_prot_impl.eex">>,
26 - <<"priv/templates/rclex.gen.msgs/msg_mod.eex">>,
27 - <<"priv/templates/rclex.gen.msgs/msg_types_nif.eex">>,
28 - <<"priv/templates/rclex.gen.msgs/msg_nif_c.eex">>,<<"src">>,
29 - <<"src/graph_nif.h">>,<<"src/node_nif.h">>,<<"src/total_nif.c">>,
30 - <<"src/publisher_nif.c">>,<<"src/subscription_nif.h">>,<<"src/msg_nif.h">>,
31 - <<"src/msg_types_nif.ec">>,<<"src/init_nif.c">>,<<"src/wait_nif.c">>,
32 - <<"src/init_nif.h">>,<<"src/total_nif.h">>,<<"src/node_nif.c">>,
33 - <<"src/subscription_nif.c">>,<<"src/wait_nif.h">>,<<"src/msg_nif.c">>,
34 - <<"src/graph_nif.c">>,<<"src/msg_types_nif.h">>,<<"src/publisher_nif.h">>,
35 - <<"mix.exs">>,<<"README.md">>,<<"README_ja.md">>,<<"LICENSE">>,
36 - <<"CHANGELOG.md">>,<<"Makefile">>]}.
27 + <<"priv/templates/rclex.gen.msgs/lib/rclex/msg_types_nif.ex">>,<<"src">>,
28 + <<"src/graph_nif.c">>,<<"src/msg_nif.c">>,<<"src/node_nif.h">>,
29 + <<"src/init_nif.h">>,<<"src/wait_nif.h">>,<<"src/subscription_nif.c">>,
30 + <<"src/msg_nif.h">>,<<"src/graph_nif.h">>,<<"src/publisher_nif.c">>,
31 + <<"src/msg_types_nif.h">>,<<"src/node_nif.c">>,<<"src/total_nif.h">>,
32 + <<"src/msg_types_nif.ec">>,<<"src/subscription_nif.h">>,
33 + <<"src/total_nif.c">>,<<"src/wait_nif.c">>,<<"src/publisher_nif.h">>,
34 + <<"src/init_nif.c">>,<<"mix.exs">>,<<"README.md">>,<<"README_ja.md">>,
35 + <<"LICENSE">>,<<"CHANGELOG.md">>,<<"Makefile">>]}.
37 36 {<<"licenses">>,[<<"Apache-2.0">>]}.
38 37 {<<"links">>,[{<<"Github">>,<<"https://github.com/rclex/rclex">>}]}.
39 38 {<<"name">>,<<"rclex">>}.
  @@ -43,4 +42,4 @@
43 42 {<<"optional">>,false},
44 43 {<<"repository">>,<<"hexpm">>},
45 44 {<<"requirement">>,<<"~> 0.4">>}]]}.
46 - {<<"version">>,<<"0.8.4">>}.
45 + {<<"version">>,<<"0.8.5">>}.
  @@ -255,7 +255,7 @@ defmodule Mix.Tasks.Rclex.Gen.Msgs do
255 255 @spec get_ros2_message_type_map(String.t(), String.t(), map()) :: map()
256 256 # credo:disable-for-next-line
257 257 def get_ros2_message_type_map(ros2_message_type, from, acc \\ %{}) do
258 - [package_name, "msg", _type_name] = String.split(ros2_message_type, "/")
258 + package_name = get_package_name(ros2_message_type)
259 259
260 260 rows =
261 261 "#{Path.join(from, ros2_message_type)}.msg"
  @@ -274,12 +274,15 @@ defmodule Mix.Tasks.Rclex.Gen.Msgs do
274 274 # NOTE: currently we do not support default value
275 275 |> Enum.take(2)
276 276
277 - cond do
278 - type in @ros2_built_in_types -> {type, variable}
279 - is_ros2_built_in_list(type) -> {type, variable}
280 - String.contains?(type, "/") -> {type, variable}
281 - true -> {Path.join("#{package_name}/msg", type), variable}
282 - end
277 + type =
278 + cond do
279 + type in @ros2_built_in_types -> type
280 + is_ros2_built_in_list(type) -> type
281 + String.contains?(type, "/") -> get_nested_ros2_type(type)
282 + true -> Path.join("#{package_name}/msg", type)
283 + end
284 +
285 + {type, variable}
283 286 end)
284 287
285 288 type_map = Map.put(acc, ros2_message_type, type_variable_tuples)
  @@ -771,6 +774,20 @@ defmodule Mix.Tasks.Rclex.Gen.Msgs do
771 774 String.match?(type, ~r/.+\[[0-9]+\]/)
772 775 end
773 776
777 + defp get_package_name(ros2_message_type) do
778 + case String.split(ros2_message_type, "/") do
779 + [package_name, "msg", _type_name] -> package_name
780 + [package_name, _type_name] -> package_name
781 + end
782 + end
783 +
784 + defp get_nested_ros2_type(type) do
785 + case String.split(type, "/") do
786 + [_package_name, "msg", _t] -> type
787 + [package_name, t] -> Path.join("#{package_name}/msg", t)
788 + end
789 + end
790 +
774 791 defp list_type(type) do
775 792 String.split(type, "[") |> List.first()
776 793 end
Loading more files…