diff --git a/scripts/rename-project.sh b/scripts/rename-project.sh new file mode 100755 index 0000000..cbde85e --- /dev/null +++ b/scripts/rename-project.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# Renames the "rust_template" placeholder throughout the project to a +# real crate name. Run from anywhere; it locates the repo root itself. +set -euo pipefail + +old_name="rust_template" + +usage() { + echo "Usage: $0 " >&2 + echo " must be a valid snake_case Rust crate name (e.g. my_project)" >&2 + exit 1 +} + +[[ $# -eq 1 ]] || usage +new_name="$1" + +if ! [[ "$new_name" =~ ^[a-z][a-z0-9_]*$ ]]; then + echo "error: '$new_name' is not a valid snake_case crate name" >&2 + exit 1 +fi + +if [[ "$new_name" == "$old_name" ]]; then + echo "already named '$old_name', nothing to do" + exit 0 +fi + +root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$root" + +files=( + Cargo.toml + flake.nix + nix/rust.nix + src/main.rs + benches/greet.rs + tests/greet.rs +) + +for f in "${files[@]}"; do + [[ -f "$f" ]] || continue + sed -i.bak "s/${old_name}/${new_name}/g" "$f" + rm -f "${f}.bak" +done + +if command -v cargo >/dev/null 2>&1; then + cargo generate-lockfile +else + echo "warning: cargo not on PATH — run 'cargo generate-lockfile' yourself (e.g. inside 'nix develop')" >&2 +fi + +echo "Renamed '${old_name}' -> '${new_name}'." +echo +echo "Review the diff (git diff), then optionally rename the project directory:" +echo " cd .. && mv $(basename "$root") ${new_name}" diff --git a/tests/greet.rs b/tests/greet.rs new file mode 100644 index 0000000..321d1fe --- /dev/null +++ b/tests/greet.rs @@ -0,0 +1,6 @@ +use rust_template::greet; + +#[test] +fn greets_by_name() { + assert_eq!(greet("integration"), "Hello, integration!"); +}