pub struct ProjectTemplateService { /* private fields */ }Expand description
Service for generating project template files
§Examples
use mecha10_cli::services::ProjectTemplateService;
let service = ProjectTemplateService::new();
// Generate all project files
service.create_readme(&project_path, "my-robot").await?;
service.create_cargo_toml(&project_path, "my-robot", false).await?;Implementations§
Source§impl ProjectTemplateService
impl ProjectTemplateService
Sourcepub async fn create_readme(&self, path: &Path, project_name: &str) -> Result<()>
pub async fn create_readme(&self, path: &Path, project_name: &str) -> Result<()>
Create README.md for the project
Sourcepub async fn create_gitignore(&self, path: &Path) -> Result<()>
pub async fn create_gitignore(&self, path: &Path) -> Result<()>
Create .gitignore for the project
Sourcepub async fn create_cargo_config(
&self,
path: &Path,
framework_path: &str,
) -> Result<()>
pub async fn create_cargo_config( &self, path: &Path, framework_path: &str, ) -> Result<()>
Create .cargo/config.toml for framework development
This patches all mecha10-* dependencies to use local paths instead of crates.io. Requires a framework_path pointing to the mecha10-monorepo root.
Sourcepub async fn create_cargo_toml(
&self,
path: &Path,
project_name: &str,
dev: bool,
) -> Result<()>
pub async fn create_cargo_toml( &self, path: &Path, project_name: &str, dev: bool, ) -> Result<()>
Create Cargo.toml for the project
§Arguments
path- Project root pathproject_name- Name of the projectdev- Whether this is for framework development (affects dependency resolution)
Sourcepub async fn create_main_rs(
&self,
path: &Path,
project_name: &str,
) -> Result<()>
pub async fn create_main_rs( &self, path: &Path, project_name: &str, ) -> Result<()>
Create src/main.rs for the project
Sourcepub async fn create_build_rs(&self, path: &Path) -> Result<()>
pub async fn create_build_rs(&self, path: &Path) -> Result<()>
Create build.rs for the project
This build script generates:
- node_registry.rs - Node dispatcher based on mecha10.json
- embedded.rs - Embedded asset accessors
Sourcepub async fn create_embedded_structure(&self, path: &Path) -> Result<()>
pub async fn create_embedded_structure(&self, path: &Path) -> Result<()>
Create embedded directory structure
Sourcepub async fn create_env_example(
&self,
path: &Path,
project_name: &str,
framework_path: Option<String>,
) -> Result<()>
pub async fn create_env_example( &self, path: &Path, project_name: &str, framework_path: Option<String>, ) -> Result<()>
Create .env.example for the project
§Arguments
path- Project root pathproject_name- Name of the projectframework_path- Optional framework path for development mode
Sourcepub async fn create_rustfmt_toml(&self, path: &Path) -> Result<()>
pub async fn create_rustfmt_toml(&self, path: &Path) -> Result<()>
Create rustfmt.toml for the project
Sourcepub async fn create_docker_compose(
&self,
path: &Path,
project_name: &str,
) -> Result<()>
pub async fn create_docker_compose( &self, path: &Path, project_name: &str, ) -> Result<()>
Create docker-compose.yml for the project
Generates a Docker Compose file with Redis and optional PostgreSQL services for local development and deployment.
§Arguments
path- Project root pathproject_name- Name of the project (used for container naming)
Sourcepub async fn create_package_json(
&self,
path: &Path,
project_name: &str,
) -> Result<()>
pub async fn create_package_json( &self, path: &Path, project_name: &str, ) -> Result<()>
Create package.json for npm dependencies
Includes @mecha10/simulation-models and @mecha10/simulation-environments dependencies. Resolution happens at runtime via MECHA10_FRAMEWORK_PATH env var:
- If set: Uses local monorepo packages
- If not set: Uses node_modules/@mecha10/* (requires npm install)
§Arguments
path- Project root pathproject_name- Name of the project
Sourcepub async fn create_requirements_txt(&self, path: &Path) -> Result<()>
pub async fn create_requirements_txt(&self, path: &Path) -> Result<()>
Create requirements.txt for Python dependencies
Includes Python packages needed for AI nodes (onnx, onnxruntime).
Install with: mecha10 setup or pip install -r requirements.txt
§Arguments
path- Project root path
Sourcepub async fn create_mecha10_json(
&self,
path: &Path,
project_name: &str,
template: &Option<String>,
) -> Result<()>
pub async fn create_mecha10_json( &self, path: &Path, project_name: &str, template: &Option<String>, ) -> Result<()>
Create mecha10.json configuration file
Generates the main project configuration file with robot identity, simulation settings, nodes, services, and Docker configuration.
§Arguments
path- Project root directoryproject_name- Name of the projecttemplate- Robot template (rover, humanoid, etc.)
Sourcepub async fn create_simulation_model_json(&self, path: &Path) -> Result<()>
pub async fn create_simulation_model_json(&self, path: &Path) -> Result<()>
Create simulation/models/model.json
Generates the rover robot physical model configuration for Godot simulation from embedded template.
§Arguments
path- Project root directory
Sourcepub async fn create_simulation_environment_json(
&self,
path: &Path,
) -> Result<()>
pub async fn create_simulation_environment_json( &self, path: &Path, ) -> Result<()>
Create simulation/environments/basic_arena/environment.json
Generates the basic arena environment configuration for Godot simulation from embedded template.
§Arguments
path- Project root directory
Sourcepub async fn create_node_configs(&self, path: &Path) -> Result<()>
pub async fn create_node_configs(&self, path: &Path) -> Result<()>
Create node configuration files from embedded configs
Writes node configs to configs/dev/nodes/{node}/config.json Configs are embedded from packages/nodes/*/configs/ at build time (single source of truth).
§Arguments
path- Project root directory
Sourcepub async fn create_simulation_configs(&self, path: &Path) -> Result<()>
pub async fn create_simulation_configs(&self, path: &Path) -> Result<()>
Create simulation config files from embedded configs
Writes simulation configs to configs/{env}/simulation/config.json. Configs are embedded from packages/simulation/configs/ at build time (single source of truth).
§Arguments
path- Project root directory
Sourcepub async fn create_simulation_assets(&self, path: &Path) -> Result<()>
pub async fn create_simulation_assets(&self, path: &Path) -> Result<()>
Create simulation image assets from embedded templates
Writes image assets to assets/images/ directory. This is used in standalone mode when framework path is not available. In framework dev mode, these are copied from the simulation package instead.
§Arguments
path- Project root directory
Sourcepub async fn create_behavior_templates(&self, path: &Path) -> Result<()>
pub async fn create_behavior_templates(&self, path: &Path) -> Result<()>
Create behavior tree templates from embedded files
Writes behavior tree JSON files to behaviors/ directory. This is used in standalone mode when framework path is not available. In framework dev mode, these are copied from behavior-runtime/seeds/ instead.
§Arguments
path- Project root directory
Sourcepub async fn create_simulation_docker_files(&self, path: &Path) -> Result<()>
pub async fn create_simulation_docker_files(&self, path: &Path) -> Result<()>
Create simulation Docker files from embedded templates
Writes Dockerfile, entrypoint.sh, and .dockerignore to simulation/ directory. This is used in standalone mode when framework path is not available. In framework dev mode, these are copied from packages/simulation/docker/ instead.
§Arguments
path- Project root directory
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ProjectTemplateService
impl RefUnwindSafe for ProjectTemplateService
impl Send for ProjectTemplateService
impl Sync for ProjectTemplateService
impl Unpin for ProjectTemplateService
impl UnwindSafe for ProjectTemplateService
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more