From 4999221886de435a74c8b10f47e55a358606e8aa Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Wed, 8 Oct 2025 13:23:24 -0400 Subject: [PATCH 1/9] feat: add ament_cargo parsing in ros2pkg/api/create.py as package build type Signed-off-by: Parth Patel --- ros2pkg/ros2pkg/api/create.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/ros2pkg/ros2pkg/api/create.py b/ros2pkg/ros2pkg/api/create.py index 1bbecf8e2..e29818cce 100644 --- a/ros2pkg/ros2pkg/api/create.py +++ b/ros2pkg/ros2pkg/api/create.py @@ -126,6 +126,9 @@ def create_package_environment(package, destination_directory): print('creating source and include folder') source_directory = _create_folder('src', package_directory) include_directory = _create_folder(package.name, package_directory + os.sep + 'include') + if package.get_build_type() == 'ament_cargo': + print('creating source folder') + source_directory = _create_folder('src', package_directory) if package.get_build_type() == 'ament_python': print('creating source folder') source_directory = _create_folder(package.name, package_directory) @@ -313,3 +316,35 @@ def populate_cpp_library(package, source_directory, include_directory, cpp_libra include_directory, 'visibility_control.h', visibility_config) + +def populate_ament_cargo(package, package_directory, cargo_node_name, cargo_library_name): + print("Cargo Package Make Pending") + exit(1) + cmakelists_config = { + 'project_name': package.name, + 'dependencies': [str(dep) for dep in package.build_depends], + 'cargo_node_name': cargo_node_name, + 'cargo_library_name': cargo_library_name, + } + _create_template_file( + 'ament_cmake', + 'CMakeLists.txt.em', + package_directory, + 'CMakeLists.txt', + cmakelists_config) + + +def populate_rust_node(package, source_directory, cargo_node_name): + print("Cargo Node Make Pending") + exit(1) + cargo_node_config = { + 'package_name': package.name, + } + _create_template_file( + 'cpp', + 'main.cpp.em', + source_directory, + cargo_node_name + '.cpp', + cargo_node_config) + + From bfb5e1a5676ecd7a1447c03ee4ea645ea1dbed06 Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Wed, 8 Oct 2025 13:38:08 -0400 Subject: [PATCH 2/9] feat: add Cargo.toml EmPy Package for ament_cargo Signed-off-by: Parth Patel --- .../resource/ament_cargo/Cargo.toml.em | 27 +++++++++++++++++++ .../ros2pkg/resource/ament_cargo/__init__.py | 0 2 files changed, 27 insertions(+) create mode 100644 ros2pkg/ros2pkg/resource/ament_cargo/Cargo.toml.em create mode 100644 ros2pkg/ros2pkg/resource/ament_cargo/__init__.py diff --git a/ros2pkg/ros2pkg/resource/ament_cargo/Cargo.toml.em b/ros2pkg/ros2pkg/resource/ament_cargo/Cargo.toml.em new file mode 100644 index 000000000..b64fa23a8 --- /dev/null +++ b/ros2pkg/ros2pkg/resource/ament_cargo/Cargo.toml.em @@ -0,0 +1,27 @@ +[package] +name = "@project_name" +version = "0.0.1" +authors = ["@maintainer_name <@maintainer_email>"] +edition = "2021" + +[[bin]] +name = "@project_name" +path = "src/main.rs" + +[dependencies] +anyhow = {version = "1", features = ["backtrace"]} +rclrs = "0.5" +rosidl_runtime_rs = "0.4" + +# This specific version is compatible with Rust 1.75 +backtrace = "=0.3.74" + +@[if dependencies]@ +@[ for dep in dependencies]@ +@dep = "*" +@[ end for]@ +@[else]@ +# uncomment the following section in order to fill in +# further dependencies manually. +# = "*" +@[end if]@ diff --git a/ros2pkg/ros2pkg/resource/ament_cargo/__init__.py b/ros2pkg/ros2pkg/resource/ament_cargo/__init__.py new file mode 100644 index 000000000..e69de29bb From d9deb9f85d64de8ea235fbe7a4b0f4f678c6c820 Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Wed, 8 Oct 2025 13:41:59 -0400 Subject: [PATCH 3/9] feat: add main.rs EmPy file for rust package generation Signed-off-by: Parth Patel --- ros2pkg/ros2pkg/resource/rust/__init__.py | 0 ros2pkg/ros2pkg/resource/rust/main.rs.em | 8 ++++++++ 2 files changed, 8 insertions(+) create mode 100644 ros2pkg/ros2pkg/resource/rust/__init__.py create mode 100644 ros2pkg/ros2pkg/resource/rust/main.rs.em diff --git a/ros2pkg/ros2pkg/resource/rust/__init__.py b/ros2pkg/ros2pkg/resource/rust/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ros2pkg/ros2pkg/resource/rust/main.rs.em b/ros2pkg/ros2pkg/resource/rust/main.rs.em new file mode 100644 index 000000000..b0df962d2 --- /dev/null +++ b/ros2pkg/ros2pkg/resource/rust/main.rs.em @@ -0,0 +1,8 @@ +use anyhow::{Error, Result}; +use rclrs::*; + +fn main() -> Result<(), Error> { + println!("Hello world @(package_name) package\n"); + Ok(()) +} + From 37998b64d3ffa673079e68f5d6dffaf616d21b94 Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Wed, 8 Oct 2025 14:10:19 -0400 Subject: [PATCH 4/9] feat: add rust package generate support to create verb Signed-off-by: Parth Patel --- ros2pkg/ros2pkg/verb/create.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ros2pkg/ros2pkg/verb/create.py b/ros2pkg/ros2pkg/verb/create.py index ef2df5ad9..eb7c181d1 100644 --- a/ros2pkg/ros2pkg/verb/create.py +++ b/ros2pkg/ros2pkg/verb/create.py @@ -29,11 +29,13 @@ from ros2pkg.api.create import create_package_environment from ros2pkg.api.create import populate_ament_cmake from ros2pkg.api.create import populate_ament_python +from ros2pkg.api.create import populate_ament_cargo from ros2pkg.api.create import populate_cmake from ros2pkg.api.create import populate_cpp_library from ros2pkg.api.create import populate_cpp_node from ros2pkg.api.create import populate_python_libary from ros2pkg.api.create import populate_python_node +from ros2pkg.api.create import populate_rust_node from ros2pkg.verb import VerbExtension @@ -69,7 +71,7 @@ def add_arguments(self, parser, cli_name): parser.add_argument( '--build-type', default='ament_cmake', - choices=['cmake', 'ament_cmake', 'ament_python'], + choices=['cmake', 'ament_cmake', 'ament_cargo', 'ament_python'], help='The build type to process the package with') parser.add_argument( '--dependencies', @@ -199,6 +201,9 @@ def get_git_config(key: str) -> Optional[str]: if args.build_type == 'ament_cmake': populate_ament_cmake(package, package_directory, node_name, library_name) + if args.build_type == 'ament_cargo': + populate_ament_cargo(package, package_directory, node_name, library_name) + if args.build_type == 'ament_python': if not source_directory: return 'unable to create source folder in ' + args.destination_directory @@ -224,6 +229,14 @@ def get_git_config(key: str) -> Optional[str]: library_name ) + if args.build_type == 'ament_cargo': + populate_rust_node( + package, + source_directory, + include_directory, + library_name + ) + if args.license in available_licenses: with open(os.path.join(package_directory, 'LICENSE'), 'w') as outfp: for lic in available_licenses[args.license]: From ccbbdbc05e25048132a2337b9039758c1e5402a8 Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Wed, 8 Oct 2025 15:18:42 -0400 Subject: [PATCH 5/9] fix: populate_ament_cargo maintainer information - fix incorrect parsing for maintainer name and email - remove parameter for node name for ament_cargo and only pass library name Signed-off-by: Parth Patel --- ros2pkg/ros2pkg/api/create.py | 18 ++++++++---------- ros2pkg/ros2pkg/verb/create.py | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/ros2pkg/ros2pkg/api/create.py b/ros2pkg/ros2pkg/api/create.py index e29818cce..09a392b89 100644 --- a/ros2pkg/ros2pkg/api/create.py +++ b/ros2pkg/ros2pkg/api/create.py @@ -317,26 +317,24 @@ def populate_cpp_library(package, source_directory, include_directory, cpp_libra 'visibility_control.h', visibility_config) -def populate_ament_cargo(package, package_directory, cargo_node_name, cargo_library_name): - print("Cargo Package Make Pending") - exit(1) - cmakelists_config = { +def populate_ament_cargo(package, package_directory, cargo_library_name): + cargo_toml_config = { 'project_name': package.name, 'dependencies': [str(dep) for dep in package.build_depends], - 'cargo_node_name': cargo_node_name, 'cargo_library_name': cargo_library_name, + 'maintainer_email': package.maintainers[0].email, + 'maintainer_name': package.maintainers[0].name, } _create_template_file( - 'ament_cmake', - 'CMakeLists.txt.em', + 'ament_cargo', + 'Cargo.toml.em', package_directory, - 'CMakeLists.txt', - cmakelists_config) + 'Cargo.toml', + cargo_toml_config) def populate_rust_node(package, source_directory, cargo_node_name): print("Cargo Node Make Pending") - exit(1) cargo_node_config = { 'package_name': package.name, } diff --git a/ros2pkg/ros2pkg/verb/create.py b/ros2pkg/ros2pkg/verb/create.py index eb7c181d1..645b17f6d 100644 --- a/ros2pkg/ros2pkg/verb/create.py +++ b/ros2pkg/ros2pkg/verb/create.py @@ -202,7 +202,7 @@ def get_git_config(key: str) -> Optional[str]: populate_ament_cmake(package, package_directory, node_name, library_name) if args.build_type == 'ament_cargo': - populate_ament_cargo(package, package_directory, node_name, library_name) + populate_ament_cargo(package, package_directory, library_name) if args.build_type == 'ament_python': if not source_directory: From 485f77a43a8af79ecd5e2e1d35b0024049cfeab4 Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Wed, 8 Oct 2025 15:31:57 -0400 Subject: [PATCH 6/9] fix: populate_rust_node function to take in parameters correctly - use library_name as node_name - correct path for rust file resource - correctly generate rust package Signed-off-by: Parth Patel --- ros2pkg/ros2pkg/api/create.py | 12 ++++++++---- ros2pkg/ros2pkg/verb/create.py | 2 -- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ros2pkg/ros2pkg/api/create.py b/ros2pkg/ros2pkg/api/create.py index 09a392b89..93477828a 100644 --- a/ros2pkg/ros2pkg/api/create.py +++ b/ros2pkg/ros2pkg/api/create.py @@ -333,16 +333,20 @@ def populate_ament_cargo(package, package_directory, cargo_library_name): cargo_toml_config) -def populate_rust_node(package, source_directory, cargo_node_name): +def populate_rust_node(package, source_directory): print("Cargo Node Make Pending") cargo_node_config = { 'package_name': package.name, } + + print(f"Source Directory: {source_directory}") + print(f"Config: {cargo_node_config}") + _create_template_file( - 'cpp', - 'main.cpp.em', + 'rust', + 'main.rs.em', source_directory, - cargo_node_name + '.cpp', + 'main.rs', cargo_node_config) diff --git a/ros2pkg/ros2pkg/verb/create.py b/ros2pkg/ros2pkg/verb/create.py index 645b17f6d..f573193b4 100644 --- a/ros2pkg/ros2pkg/verb/create.py +++ b/ros2pkg/ros2pkg/verb/create.py @@ -233,8 +233,6 @@ def get_git_config(key: str) -> Optional[str]: populate_rust_node( package, source_directory, - include_directory, - library_name ) if args.license in available_licenses: From 1490759602de4bfd8ef617b2e620f370945f9d6e Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Wed, 8 Oct 2025 15:47:29 -0400 Subject: [PATCH 7/9] fix: add missing buildtool_depends and depend in package.xml Signed-off-by: Parth Patel --- .../ros2pkg/resource/ament_cargo/Cargo.toml.em | 1 - ros2pkg/ros2pkg/resource/rust/main.rs.em | 15 +++++++++++---- ros2pkg/ros2pkg/verb/create.py | 4 ++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ros2pkg/ros2pkg/resource/ament_cargo/Cargo.toml.em b/ros2pkg/ros2pkg/resource/ament_cargo/Cargo.toml.em index b64fa23a8..ff1f6ce6c 100644 --- a/ros2pkg/ros2pkg/resource/ament_cargo/Cargo.toml.em +++ b/ros2pkg/ros2pkg/resource/ament_cargo/Cargo.toml.em @@ -10,7 +10,6 @@ path = "src/main.rs" [dependencies] anyhow = {version = "1", features = ["backtrace"]} -rclrs = "0.5" rosidl_runtime_rs = "0.4" # This specific version is compatible with Rust 1.75 diff --git a/ros2pkg/ros2pkg/resource/rust/main.rs.em b/ros2pkg/ros2pkg/resource/rust/main.rs.em index b0df962d2..91304bfdd 100644 --- a/ros2pkg/ros2pkg/resource/rust/main.rs.em +++ b/ros2pkg/ros2pkg/resource/rust/main.rs.em @@ -1,8 +1,15 @@ -use anyhow::{Error, Result}; -use rclrs::*; +use anyhow::Result; +use rclrs::{Context, CreateBasicExecutor, RclrsErrorFilter, SpinOptions}; -fn main() -> Result<(), Error> { - println!("Hello world @(package_name) package\n"); +/// Creates a ROS 2 context and node, prints a hello message, +/// then spins until shutdown. +fn main() -> Result<()> { + let context: Context = Context::default_from_env()?; + let mut executor = context.create_basic_executor(); + let _node = executor.create_node("@(node_name)")?; + println!("Hello from @(package_name) package!"); + executor.spin(SpinOptions::default()).first_error()?; Ok(()) } + diff --git a/ros2pkg/ros2pkg/verb/create.py b/ros2pkg/ros2pkg/verb/create.py index f573193b4..586e413e8 100644 --- a/ros2pkg/ros2pkg/verb/create.py +++ b/ros2pkg/ros2pkg/verb/create.py @@ -143,6 +143,10 @@ def get_git_config(key: str) -> Optional[str]: else: buildtool_depends = ['ament_cmake'] + if args.build_type == 'ament_cargo': + buildtool_depends = ['ament_cargo'] + args.dependencies.append('rclrs') + test_dependencies = [] if args.build_type == 'ament_cmake': test_dependencies = ['ament_lint_auto', 'ament_lint_common'] From 93e214549a0620208d2346368bd042f37407346b Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Wed, 8 Oct 2025 15:53:54 -0400 Subject: [PATCH 8/9] feat: update populate_rust_node to take in node_name as optional parameter Signed-off-by: Parth Patel --- ros2pkg/ros2pkg/api/create.py | 10 ++++++---- ros2pkg/ros2pkg/resource/rust/main.rs.em | 2 -- ros2pkg/ros2pkg/verb/create.py | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ros2pkg/ros2pkg/api/create.py b/ros2pkg/ros2pkg/api/create.py index 93477828a..de1f973f3 100644 --- a/ros2pkg/ros2pkg/api/create.py +++ b/ros2pkg/ros2pkg/api/create.py @@ -333,15 +333,17 @@ def populate_ament_cargo(package, package_directory, cargo_library_name): cargo_toml_config) -def populate_rust_node(package, source_directory): +def populate_rust_node(package, source_directory, node_name): print("Cargo Node Make Pending") + + if node_name == None: + node_name = f"{package.name}_node" + cargo_node_config = { 'package_name': package.name, + 'node_name': node_name } - print(f"Source Directory: {source_directory}") - print(f"Config: {cargo_node_config}") - _create_template_file( 'rust', 'main.rs.em', diff --git a/ros2pkg/ros2pkg/resource/rust/main.rs.em b/ros2pkg/ros2pkg/resource/rust/main.rs.em index 91304bfdd..7ed0e7157 100644 --- a/ros2pkg/ros2pkg/resource/rust/main.rs.em +++ b/ros2pkg/ros2pkg/resource/rust/main.rs.em @@ -11,5 +11,3 @@ fn main() -> Result<()> { executor.spin(SpinOptions::default()).first_error()?; Ok(()) } - - diff --git a/ros2pkg/ros2pkg/verb/create.py b/ros2pkg/ros2pkg/verb/create.py index 586e413e8..e1bdb75f1 100644 --- a/ros2pkg/ros2pkg/verb/create.py +++ b/ros2pkg/ros2pkg/verb/create.py @@ -237,6 +237,7 @@ def get_git_config(key: str) -> Optional[str]: populate_rust_node( package, source_directory, + node_name ) if args.license in available_licenses: From d8cef94c7621448830453691291370a7f926945a Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Thu, 9 Oct 2025 19:47:40 -0400 Subject: [PATCH 9/9] style: fix flake8 errors/warning based on ci - CI Test Report: https://build.ros2.org/job/Rpr__ros2cli__ubuntu_noble_amd64/282/testReport/ros2pkg.ros2pkg.test/test_flake8/test_flake8/ Signed-off-by: Parth Patel --- ros2pkg/ros2pkg/api/create.py | 265 ++++++++++++++++----------------- ros2pkg/ros2pkg/verb/create.py | 2 +- 2 files changed, 132 insertions(+), 135 deletions(-) diff --git a/ros2pkg/ros2pkg/api/create.py b/ros2pkg/ros2pkg/api/create.py index de1f973f3..8126a6285 100644 --- a/ros2pkg/ros2pkg/api/create.py +++ b/ros2pkg/ros2pkg/api/create.py @@ -33,22 +33,22 @@ def _expand_template(template_file, data, output_file): output = StringIO() if em_has_configuration: config = Configuration( - defaultStdout=output, - deleteOnError=True, - rawErrors=True, - useProxy=True) + defaultStdout=output, + deleteOnError=True, + rawErrors=True, + useProxy=True) interpreter = em.Interpreter( - config=config, - dispatcher=False, - globals=data) + config=config, + dispatcher=False, + globals=data) else: interpreter = em.Interpreter( - output=output, - options={ - em.BUFFERED_OPT: True, - em.RAW_OPT: True, - }, - globals=data) + output=output, + options={ + em.BUFFERED_OPT: True, + em.RAW_OPT: True, + }, + globals=data) with open(template_file, 'r') as h: try: @@ -84,8 +84,8 @@ def _create_folder(folder_name, base_directory, exist_ok=True): def _create_template_file( - template_subdir, template_file_name, output_directory, output_file_name, template_config -): + template_subdir, template_file_name, output_directory, output_file_name, template_config + ): full_package = 'ros2pkg.resource.' + template_subdir with importlib_resources.path(full_package, template_file_name) as path: template_path = str(path) @@ -102,23 +102,23 @@ def create_package_environment(package, destination_directory): package_directory = _create_folder(package.name, destination_directory) package_xml_config = { - 'package_format': package.package_format, - 'package_name': package.name, - 'package_description': package.description, - 'maintainer_email': package.maintainers[0].email, - 'maintainer_name': package.maintainers[0].name, - 'package_license': package.licenses[0], - 'buildtool_dependencies': package.buildtool_depends, - 'dependencies': package.build_depends, - 'test_dependencies': package.test_depends, - 'exports': package.exports, - } + 'package_format': package.package_format, + 'package_name': package.name, + 'package_description': package.description, + 'maintainer_email': package.maintainers[0].email, + 'maintainer_name': package.maintainers[0].name, + 'package_license': package.licenses[0], + 'buildtool_dependencies': package.buildtool_depends, + 'dependencies': package.build_depends, + 'test_dependencies': package.test_depends, + 'exports': package.exports, + } _create_template_file( - 'package_environment', - 'package.xml.em', - package_directory, - 'package.xml', - package_xml_config) + 'package_environment', + 'package.xml.em', + package_directory, + 'package.xml', + package_xml_config) source_directory = None include_directory = None @@ -138,14 +138,14 @@ def create_package_environment(package, destination_directory): def populate_ament_python(package, package_directory, source_directory, python_node_name): setup_py_config = { - 'project_name': package.name, - 'maintainer_email': package.maintainers[0].email, - 'maintainer_name': package.maintainers[0].name, - 'package_license': package.licenses[0], - 'node_name': python_node_name, - 'test_dependencies': package.test_depends, - 'package_description': package.description - } + 'project_name': package.name, + 'maintainer_email': package.maintainers[0].email, + 'maintainer_name': package.maintainers[0].name, + 'package_license': package.licenses[0], + 'node_name': python_node_name, + 'test_dependencies': package.test_depends, + 'package_description': package.description + } _create_template_file('ament_python', 'setup.py.em', @@ -198,8 +198,8 @@ def populate_ament_python(package, package_directory, source_directory, python_n def populate_python_node(package, source_directory, python_node_name): main_py_config = { - 'project_name': package.name - } + 'project_name': package.name + } _create_template_file('ament_python', 'main.py.em', source_directory, @@ -218,137 +218,134 @@ def populate_python_libary(package, source_directory, python_library_name): def populate_cmake(package, package_directory, cpp_node_name, cpp_library_name): cmakelists_config = { - 'project_name': package.name, - 'dependencies': [str(dep) for dep in package.build_depends], - 'cpp_node_name': cpp_node_name, - 'cpp_library_name': cpp_library_name, - } + 'project_name': package.name, + 'dependencies': [str(dep) for dep in package.build_depends], + 'cpp_node_name': cpp_node_name, + 'cpp_library_name': cpp_library_name, + } _create_template_file( - 'cmake', - 'CMakeLists.txt.em', - package_directory, - 'CMakeLists.txt', - cmakelists_config) + 'cmake', + 'CMakeLists.txt.em', + package_directory, + 'CMakeLists.txt', + cmakelists_config) cmake_config = { - 'project_name': package.name, - 'cpp_library_name': cpp_library_name, - 'cpp_node_name': cpp_node_name, - } + 'project_name': package.name, + 'cpp_library_name': cpp_library_name, + 'cpp_node_name': cpp_node_name, + } _create_template_file( - 'cmake', - 'Config.cmake.in.em', - package_directory, - package.name + 'Config.cmake.in', - cmake_config) + 'cmake', + 'Config.cmake.in.em', + package_directory, + package.name + 'Config.cmake.in', + cmake_config) version_config = { - 'project_name': package.name, - } + 'project_name': package.name, + } _create_template_file( - 'cmake', - 'ConfigVersion.cmake.in.em', - package_directory, - package.name + 'ConfigVersion.cmake.in', - version_config) + 'cmake', + 'ConfigVersion.cmake.in.em', + package_directory, + package.name + 'ConfigVersion.cmake.in', + version_config) def populate_ament_cmake(package, package_directory, cpp_node_name, cpp_library_name): cmakelists_config = { - 'project_name': package.name, - 'dependencies': [str(dep) for dep in package.build_depends], - 'cpp_node_name': cpp_node_name, - 'cpp_library_name': cpp_library_name, - } + 'project_name': package.name, + 'dependencies': [str(dep) for dep in package.build_depends], + 'cpp_node_name': cpp_node_name, + 'cpp_library_name': cpp_library_name, + } _create_template_file( - 'ament_cmake', - 'CMakeLists.txt.em', - package_directory, - 'CMakeLists.txt', - cmakelists_config) + 'ament_cmake', + 'CMakeLists.txt.em', + package_directory, + 'CMakeLists.txt', + cmakelists_config) def populate_cpp_node(package, source_directory, cpp_node_name): cpp_node_config = { - 'package_name': package.name, - } + 'package_name': package.name, + } _create_template_file( - 'cpp', - 'main.cpp.em', - source_directory, - cpp_node_name + '.cpp', - cpp_node_config) + 'cpp', + 'main.cpp.em', + source_directory, + cpp_node_name + '.cpp', + cpp_node_config) def populate_cpp_library(package, source_directory, include_directory, cpp_library_name): class_name = cpp_library_name.replace('_', ' ').title() class_name = ''.join(x for x in class_name if not x.isspace()) cpp_header_config = { - 'package_name': package.name, - 'library_name': cpp_library_name, - 'class_name': class_name, - } + 'package_name': package.name, + 'library_name': cpp_library_name, + 'class_name': class_name, + } _create_template_file( - 'cpp', - 'header.hpp.em', - include_directory, - cpp_library_name + '.hpp', - cpp_header_config) + 'cpp', + 'header.hpp.em', + include_directory, + cpp_library_name + '.hpp', + cpp_header_config) cpp_library_config = { - 'package_name': package.name, - 'library_name': cpp_library_name, - 'class_name': class_name - } + 'package_name': package.name, + 'library_name': cpp_library_name, + 'class_name': class_name + } _create_template_file( - 'cpp', - 'library.cpp.em', - source_directory, - cpp_library_name + '.cpp', - cpp_library_config) + 'cpp', + 'library.cpp.em', + source_directory, + cpp_library_name + '.cpp', + cpp_library_config) visibility_config = { - 'package_name': package.name.upper(), - } + 'package_name': package.name.upper(), + } _create_template_file( - 'cpp', - 'visibility_control.h.em', - include_directory, - 'visibility_control.h', - visibility_config) + 'cpp', + 'visibility_control.h.em', + include_directory, + 'visibility_control.h', + visibility_config) + def populate_ament_cargo(package, package_directory, cargo_library_name): cargo_toml_config = { - 'project_name': package.name, - 'dependencies': [str(dep) for dep in package.build_depends], - 'cargo_library_name': cargo_library_name, - 'maintainer_email': package.maintainers[0].email, - 'maintainer_name': package.maintainers[0].name, - } + 'project_name': package.name, + 'dependencies': [str(dep) for dep in package.build_depends], + 'cargo_library_name': cargo_library_name, + 'maintainer_email': package.maintainers[0].email, + 'maintainer_name': package.maintainers[0].name, + } _create_template_file( - 'ament_cargo', - 'Cargo.toml.em', - package_directory, - 'Cargo.toml', - cargo_toml_config) + 'ament_cargo', + 'Cargo.toml.em', + package_directory, + 'Cargo.toml', + cargo_toml_config) def populate_rust_node(package, source_directory, node_name): - print("Cargo Node Make Pending") - - if node_name == None: - node_name = f"{package.name}_node" + if node_name is None: + node_name = f'{package.name}_node' cargo_node_config = { - 'package_name': package.name, - 'node_name': node_name - } + 'package_name': package.name, + 'node_name': node_name + } _create_template_file( - 'rust', - 'main.rs.em', - source_directory, - 'main.rs', - cargo_node_config) - - + 'rust', + 'main.rs.em', + source_directory, + 'main.rs', + cargo_node_config) diff --git a/ros2pkg/ros2pkg/verb/create.py b/ros2pkg/ros2pkg/verb/create.py index e1bdb75f1..7348b08d9 100644 --- a/ros2pkg/ros2pkg/verb/create.py +++ b/ros2pkg/ros2pkg/verb/create.py @@ -27,9 +27,9 @@ from catkin_pkg.package import Person from ros2pkg.api.create import create_package_environment +from ros2pkg.api.create import populate_ament_cargo from ros2pkg.api.create import populate_ament_cmake from ros2pkg.api.create import populate_ament_python -from ros2pkg.api.create import populate_ament_cargo from ros2pkg.api.create import populate_cmake from ros2pkg.api.create import populate_cpp_library from ros2pkg.api.create import populate_cpp_node