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").await?;Implementations§
Source§impl ProjectTemplateService
impl ProjectTemplateService
Sourcepub fn new() -> ProjectTemplateService
pub fn new() -> ProjectTemplateService
Create a new ProjectTemplateService
Sourcepub async fn create_readme(
&self,
path: &Path,
project_name: &str,
) -> Result<(), Error>
pub async fn create_readme( &self, path: &Path, project_name: &str, ) -> Result<(), Error>
Create README.md for the project
Sourcepub async fn create_gitignore(&self, path: &Path) -> Result<(), Error>
pub async fn create_gitignore(&self, path: &Path) -> Result<(), Error>
Create .gitignore for the project
Sourcepub async fn create_cargo_toml(
&self,
path: &Path,
project_name: &str,
) -> Result<(), Error>
pub async fn create_cargo_toml( &self, path: &Path, project_name: &str, ) -> Result<(), Error>
Create Cargo.toml for the project
§Arguments
path- Project root pathproject_name- Name of the project
Sourcepub async fn create_main_rs(
&self,
path: &Path,
project_name: &str,
) -> Result<(), Error>
pub async fn create_main_rs( &self, path: &Path, project_name: &str, ) -> Result<(), Error>
Create src/main.rs for the project
Sourcepub async fn create_build_rs(&self, path: &Path) -> Result<(), Error>
pub async fn create_build_rs(&self, path: &Path) -> Result<(), Error>
Create build.rs for the project
This build script generates:
- node_registry.rs - Node dispatcher based on mecha10.json
Sourcepub async fn create_env_example(
&self,
path: &Path,
project_name: &str,
) -> Result<(), Error>
pub async fn create_env_example( &self, path: &Path, project_name: &str, ) -> Result<(), Error>
Create .env.example for the project
§Arguments
path- Project root pathproject_name- Name of the project
Sourcepub async fn create_rustfmt_toml(&self, path: &Path) -> Result<(), Error>
pub async fn create_rustfmt_toml(&self, path: &Path) -> Result<(), Error>
Create rustfmt.toml for the project
Sourcepub async fn create_docker_compose(
&self,
path: &Path,
project_name: &str,
) -> Result<(), Error>
pub async fn create_docker_compose( &self, path: &Path, project_name: &str, ) -> Result<(), Error>
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_remote_docker_files(&self, path: &Path) -> Result<(), Error>
pub async fn create_remote_docker_files(&self, path: &Path) -> Result<(), Error>
Create remote node Docker files
Creates docker-compose.remote.yml and Dockerfile.remote for running AI/ML nodes in containers. These are used when nodes are configured in targets.remote in mecha10.json.
§Arguments
path- Project root path
Sourcepub async fn create_rl_docker_files(&self, path: &Path) -> Result<(), Error>
pub async fn create_rl_docker_files(&self, path: &Path) -> Result<(), Error>
Create rl target Docker files
Creates docker-compose.rl.yml, Dockerfile.rl, and entrypoint-rl.sh for running a
trained RL policy in production. Modeled on create_remote_docker_files, but
deliberately excludes the simulator - see that method’s doc comment.
§Arguments
path- Project root path
Sourcepub async fn create_package_json(
&self,
path: &Path,
project_name: &str,
) -> Result<(), Error>
pub async fn create_package_json( &self, path: &Path, project_name: &str, ) -> Result<(), Error>
Create package.json for npm dependencies
Includes @mecha10/simulation-models and @mecha10/simulation-environments dependencies, resolved via 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<(), Error>
pub async fn create_requirements_txt(&self, path: &Path) -> Result<(), Error>
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_python_version(&self, path: &Path) -> Result<(), Error>
pub async fn create_python_version(&self, path: &Path) -> Result<(), Error>
Create .python-version, pinning the exact Python version mecha10 setup
should target for the RL/simulation venv.
§Arguments
path- Project root path
Sourcepub async fn create_rl_training_bundle(&self, path: &Path) -> Result<(), Error>
pub async fn create_rl_training_bundle(&self, path: &Path) -> Result<(), Error>
Create the standard RL training bundle (LAB-1743) for a rover template project
Bundles the Phase 2 rover env / ppo algorithm (packages/rl-trainer,
packages/rl-task-runner, registered via the mecha10_rl.envs/mecha10_rl.algorithms
entry-points registry, LAB-1732/1733) into two pieces:
configs/rl/jobs/- the standard job catalog; each job file is a complete training config (job identity plus everyPPOConfighyperparameter, LAB-2970) - there’s no more separateconfigs/rl/local.ymlsentinel-override config to layer onto.requirements.txt- appended with the two packages’ dependencies, since both already register their entry points in their ownpyproject.toml(nothing else to declare).
A project no longer gets its own kestra/ directory (LAB-2428) - a robot developer
shouldn’t need to know Kestra is involved; the canonical train/tune/tune-then-train/
train-from-tune/resume-run flows live solely in mecha10-rl, deployed via its own CI.
Callers should invoke create_requirements_txt first — this appends to that file rather
than creating it.
§Arguments
path- Project root path
Sourcepub async fn create_simulation_model_json(
&self,
path: &Path,
) -> Result<(), Error>
pub async fn create_simulation_model_json( &self, path: &Path, ) -> Result<(), Error>
Create configs/simulation/models/model.json
Generates the rover robot physical model configuration from embedded template.
§Arguments
path- Project root directory
Sourcepub async fn create_simulation_environment_json(
&self,
path: &Path,
) -> Result<(), Error>
pub async fn create_simulation_environment_json( &self, path: &Path, ) -> Result<(), Error>
Create configs/simulation/environments/basic_arena/environment.json
Generates the basic arena environment configuration from embedded template.
§Arguments
path- Project root directory
Sourcepub async fn create_simulation_cat_environment_json(
&self,
path: &Path,
) -> Result<(), Error>
pub async fn create_simulation_cat_environment_json( &self, path: &Path, ) -> Result<(), Error>
Create configs/simulation/environments/cat_environment/environment.json
mecha10.json’s default simulation.environment (see mecha10.json.template) - a
generic basic_arena plus two cat images, so mecha10 dev’s simulator preview has
something to detect out of the box. RL training (configs/rl/jobs/train.yml) still
targets plain basic_arena - the two environments are scaffolded independently.
§Arguments
path- Project root directory
Trait Implementations§
Source§impl Default for ProjectTemplateService
impl Default for ProjectTemplateService
Source§fn default() -> ProjectTemplateService
fn default() -> ProjectTemplateService
Auto Trait Implementations§
impl Freeze for ProjectTemplateService
impl RefUnwindSafe for ProjectTemplateService
impl Send for ProjectTemplateService
impl Sync for ProjectTemplateService
impl Unpin for ProjectTemplateService
impl UnsafeUnpin for ProjectTemplateService
impl UnwindSafe for ProjectTemplateService
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.