loco 0.13.1

Loco new app generator
Documentation
// =====================
// Base Files
// =====================
// Copy core project structure files and directories that are fundamental
// to the Rust environment, GitHub actions, and formatting settings.

gen.copy_dirs([".cargo", ".github"]);
gen.copy_files([".gitignore", ".rustfmt.toml", "README.md"]);

// =====================
// Core Source Files
// =====================
gen.copy_template("src/controllers/mod.rs.t");      // Main controller module template
gen.copy_template("src/views/mod.rs.t");            // Main views module template
gen.copy_template("src/tasks/mod.rs.t");            // Main tasks module template

gen.copy_template("src/initializers/mod.rs.t");     // initializer module

// Main application and library templates
gen.copy_template("src/app.rs.t");                  // App root file
gen.copy_template("src/lib.rs.t");                  // Library entry file
gen.copy_template("Cargo.toml.t");                  // Project’s cargo configuration
gen.copy_template_dir("src/bin");                   // Copies binary directory with templates


// =====================
// Test Files
// =====================
// Generates and organizes tests modules and templates for different areas of the application.

gen.copy_template("tests/mod.rs.t");                // Main tests module template
gen.copy_template("tests/requests/mod.rs.t");       // HTTP requests tests module
gen.copy_template("tests/tasks/mod.rs.t");          // Tasks tests module


// =====================
// App Configuration
// =====================
gen.copy_template("config/development.yaml.t");     // Development config template
gen.copy_template("config/test.yaml.t");            // Test config template
gen.copy_file("config/production.yaml");            // Production config

// =====================
// Database-Related Files
// =====================
if db {
   gen.copy_dir("migration");                       // Database migrations directory
   gen.copy_dir("src/models");                      // Models directory, copied if background enabled
   gen.copy_file("src/tasks/seed.rs");              // Task to seed database
   gen.copy_dir("src/fixtures");                    // Database fixtures directory
   gen.copy_template("examples/playground.rs.t");   // Example playground template with DB setup

   // Test modules related to database models
   gen.copy_file("tests/models/mod.rs");            // Models tests root
   gen.copy_dir("tests/models/snapshots");          // Test snapshots for models
   gen.copy_template("tests/models/users.rs.t");    // User model test template
   gen.copy_template("tests/tasks/seed.rs.t");      // Seed tasks test template
   gen.copy_template("tests/requests/prepare_data.rs.t"); // Data preparation template
}

// =====================
// Initializers Support
// =====================
if initializers {
   gen.copy_file("src/initializers/view_engine.rs"); // Template for view engine initializer
}

// =====================
// Authentication Setup
// =====================
if settings.auth {
   gen.copy_file("src/controllers/auth.rs");        // Auth controller
   gen.copy_file("src/views/auth.rs");              // Auth views

   gen.copy_template("tests/requests/auth.rs.t");   // Auth tests template
   gen.copy_dir("tests/requests/snapshots");        // Snapshots directory for auth tests
} 
else {
   gen.copy_file("src/controllers/home.rs");        // Home controller if auth not enabled
   gen.copy_file("src/views/home.rs");              // Home views
   gen.copy_template("tests/requests/home.rs.t");   // Home tests template
}

// =====================
// Mailer Setup
// =====================
if settings.mailer {
    gen.copy_dir("src/mailers");                    // Mailers directory, copied if enabled
}

// =====================
// Background Processing
// =====================
if background {
    gen.copy_template("src/workers/mod.rs.t");       // Workers directory
    gen.copy_dir("tests/workers");                   // Workers test directory
    gen.copy_file("src/workers/downloader.rs");
}

// =====================
// Asset Management
// =====================
// Adds asset directory if assets are configured in the app.

if asset {
    gen.copy_dir("assets");                         // Static assets directory
}


// =====================
// Client side
// =====================

if settings.clientside {
   gen.copy_dir("frontend");
   gen.create_file("frontend/dist/index.html", "this is a placeholder. please run your frontend build (npm build)");
}