agy-superpowers 5.2.2 → 5.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/README.md +47 -150
  2. package/package.json +1 -1
  3. package/template/agent/rules/scratch-scripts.md +37 -0
  4. package/template/agent/rules/superpowers.md +4 -51
  5. package/template/agent/skills/ai-integrated-product/SKILL.md +0 -57
  6. package/template/agent/skills/analytics-setup/SKILL.md +0 -51
  7. package/template/agent/skills/api-design/SKILL.md +0 -193
  8. package/template/agent/skills/app-store-optimizer/SKILL.md +0 -127
  9. package/template/agent/skills/auth-and-identity/SKILL.md +0 -167
  10. package/template/agent/skills/backend-developer/SKILL.md +0 -148
  11. package/template/agent/skills/bootstrapper-finance/SKILL.md +0 -55
  12. package/template/agent/skills/chrome-extension-developer/SKILL.md +0 -53
  13. package/template/agent/skills/community-manager/SKILL.md +0 -115
  14. package/template/agent/skills/content-marketer/SKILL.md +0 -111
  15. package/template/agent/skills/conversion-optimizer/SKILL.md +0 -142
  16. package/template/agent/skills/cto-architect/SKILL.md +0 -133
  17. package/template/agent/skills/customer-success-manager/SKILL.md +0 -126
  18. package/template/agent/skills/data-analyst/SKILL.md +0 -147
  19. package/template/agent/skills/devops-engineer/SKILL.md +0 -117
  20. package/template/agent/skills/email-infrastructure/SKILL.md +0 -164
  21. package/template/agent/skills/game-design/SKILL.md +0 -194
  22. package/template/agent/skills/game-developer/SKILL.md +0 -175
  23. package/template/agent/skills/growth-hacker/SKILL.md +0 -122
  24. package/template/agent/skills/idea-validator/SKILL.md +0 -55
  25. package/template/agent/skills/indie-legal/SKILL.md +0 -53
  26. package/template/agent/skills/influencer-marketer/SKILL.md +0 -141
  27. package/template/agent/skills/landing-page-builder/SKILL.md +0 -59
  28. package/template/agent/skills/launch-strategist/SKILL.md +0 -62
  29. package/template/agent/skills/market-researcher/SKILL.md +0 -53
  30. package/template/agent/skills/micro-saas-builder/SKILL.md +0 -56
  31. package/template/agent/skills/monetization-strategist/SKILL.md +0 -119
  32. package/template/agent/skills/paid-acquisition-specialist/SKILL.md +0 -119
  33. package/template/agent/skills/pricing-psychologist/SKILL.md +0 -58
  34. package/template/agent/skills/real-time-features/SKILL.md +0 -194
  35. package/template/agent/skills/retention-specialist/SKILL.md +0 -123
  36. package/template/agent/skills/rust-developer/SKILL.md +0 -281
  37. package/template/agent/skills/rust-developer/references/rust-rules/_sections.md +0 -231
  38. package/template/agent/skills/rust-developer/references/rust-rules/anti-clone-excessive.md +0 -124
  39. package/template/agent/skills/rust-developer/references/rust-rules/anti-collect-intermediate.md +0 -131
  40. package/template/agent/skills/rust-developer/references/rust-rules/anti-empty-catch.md +0 -132
  41. package/template/agent/skills/rust-developer/references/rust-rules/anti-expect-lazy.md +0 -95
  42. package/template/agent/skills/rust-developer/references/rust-rules/anti-format-hot-path.md +0 -141
  43. package/template/agent/skills/rust-developer/references/rust-rules/anti-index-over-iter.md +0 -125
  44. package/template/agent/skills/rust-developer/references/rust-rules/anti-lock-across-await.md +0 -127
  45. package/template/agent/skills/rust-developer/references/rust-rules/anti-over-abstraction.md +0 -120
  46. package/template/agent/skills/rust-developer/references/rust-rules/anti-panic-expected.md +0 -131
  47. package/template/agent/skills/rust-developer/references/rust-rules/anti-premature-optimize.md +0 -156
  48. package/template/agent/skills/rust-developer/references/rust-rules/anti-string-for-str.md +0 -122
  49. package/template/agent/skills/rust-developer/references/rust-rules/anti-stringly-typed.md +0 -167
  50. package/template/agent/skills/rust-developer/references/rust-rules/anti-type-erasure.md +0 -134
  51. package/template/agent/skills/rust-developer/references/rust-rules/anti-unwrap-abuse.md +0 -143
  52. package/template/agent/skills/rust-developer/references/rust-rules/anti-vec-for-slice.md +0 -121
  53. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-must-use.md +0 -143
  54. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-pattern.md +0 -187
  55. package/template/agent/skills/rust-developer/references/rust-rules/api-common-traits.md +0 -165
  56. package/template/agent/skills/rust-developer/references/rust-rules/api-default-impl.md +0 -177
  57. package/template/agent/skills/rust-developer/references/rust-rules/api-extension-trait.md +0 -163
  58. package/template/agent/skills/rust-developer/references/rust-rules/api-from-not-into.md +0 -146
  59. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-asref.md +0 -142
  60. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-into.md +0 -160
  61. package/template/agent/skills/rust-developer/references/rust-rules/api-must-use.md +0 -125
  62. package/template/agent/skills/rust-developer/references/rust-rules/api-newtype-safety.md +0 -162
  63. package/template/agent/skills/rust-developer/references/rust-rules/api-non-exhaustive.md +0 -177
  64. package/template/agent/skills/rust-developer/references/rust-rules/api-parse-dont-validate.md +0 -184
  65. package/template/agent/skills/rust-developer/references/rust-rules/api-sealed-trait.md +0 -168
  66. package/template/agent/skills/rust-developer/references/rust-rules/api-serde-optional.md +0 -182
  67. package/template/agent/skills/rust-developer/references/rust-rules/api-typestate.md +0 -199
  68. package/template/agent/skills/rust-developer/references/rust-rules/async-bounded-channel.md +0 -175
  69. package/template/agent/skills/rust-developer/references/rust-rules/async-broadcast-pubsub.md +0 -185
  70. package/template/agent/skills/rust-developer/references/rust-rules/async-cancellation-token.md +0 -203
  71. package/template/agent/skills/rust-developer/references/rust-rules/async-clone-before-await.md +0 -171
  72. package/template/agent/skills/rust-developer/references/rust-rules/async-join-parallel.md +0 -158
  73. package/template/agent/skills/rust-developer/references/rust-rules/async-joinset-structured.md +0 -195
  74. package/template/agent/skills/rust-developer/references/rust-rules/async-mpsc-queue.md +0 -171
  75. package/template/agent/skills/rust-developer/references/rust-rules/async-no-lock-await.md +0 -156
  76. package/template/agent/skills/rust-developer/references/rust-rules/async-oneshot-response.md +0 -191
  77. package/template/agent/skills/rust-developer/references/rust-rules/async-select-racing.md +0 -198
  78. package/template/agent/skills/rust-developer/references/rust-rules/async-spawn-blocking.md +0 -154
  79. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-fs.md +0 -167
  80. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-runtime.md +0 -169
  81. package/template/agent/skills/rust-developer/references/rust-rules/async-try-join.md +0 -172
  82. package/template/agent/skills/rust-developer/references/rust-rules/async-watch-latest.md +0 -189
  83. package/template/agent/skills/rust-developer/references/rust-rules/doc-all-public.md +0 -113
  84. package/template/agent/skills/rust-developer/references/rust-rules/doc-cargo-metadata.md +0 -147
  85. package/template/agent/skills/rust-developer/references/rust-rules/doc-errors-section.md +0 -122
  86. package/template/agent/skills/rust-developer/references/rust-rules/doc-examples-section.md +0 -161
  87. package/template/agent/skills/rust-developer/references/rust-rules/doc-hidden-setup.md +0 -149
  88. package/template/agent/skills/rust-developer/references/rust-rules/doc-intra-links.md +0 -138
  89. package/template/agent/skills/rust-developer/references/rust-rules/doc-link-types.md +0 -169
  90. package/template/agent/skills/rust-developer/references/rust-rules/doc-module-inner.md +0 -116
  91. package/template/agent/skills/rust-developer/references/rust-rules/doc-panics-section.md +0 -128
  92. package/template/agent/skills/rust-developer/references/rust-rules/doc-question-mark.md +0 -136
  93. package/template/agent/skills/rust-developer/references/rust-rules/doc-safety-section.md +0 -131
  94. package/template/agent/skills/rust-developer/references/rust-rules/err-anyhow-app.md +0 -179
  95. package/template/agent/skills/rust-developer/references/rust-rules/err-context-chain.md +0 -144
  96. package/template/agent/skills/rust-developer/references/rust-rules/err-custom-type.md +0 -152
  97. package/template/agent/skills/rust-developer/references/rust-rules/err-doc-errors.md +0 -145
  98. package/template/agent/skills/rust-developer/references/rust-rules/err-expect-bugs-only.md +0 -133
  99. package/template/agent/skills/rust-developer/references/rust-rules/err-from-impl.md +0 -152
  100. package/template/agent/skills/rust-developer/references/rust-rules/err-lowercase-msg.md +0 -124
  101. package/template/agent/skills/rust-developer/references/rust-rules/err-no-unwrap-prod.md +0 -115
  102. package/template/agent/skills/rust-developer/references/rust-rules/err-question-mark.md +0 -151
  103. package/template/agent/skills/rust-developer/references/rust-rules/err-result-over-panic.md +0 -130
  104. package/template/agent/skills/rust-developer/references/rust-rules/err-source-chain.md +0 -155
  105. package/template/agent/skills/rust-developer/references/rust-rules/err-thiserror-lib.md +0 -171
  106. package/template/agent/skills/rust-developer/references/rust-rules/lint-cargo-metadata.md +0 -138
  107. package/template/agent/skills/rust-developer/references/rust-rules/lint-deny-correctness.md +0 -107
  108. package/template/agent/skills/rust-developer/references/rust-rules/lint-missing-docs.md +0 -154
  109. package/template/agent/skills/rust-developer/references/rust-rules/lint-pedantic-selective.md +0 -118
  110. package/template/agent/skills/rust-developer/references/rust-rules/lint-rustfmt-check.md +0 -157
  111. package/template/agent/skills/rust-developer/references/rust-rules/lint-unsafe-doc.md +0 -133
  112. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-complexity.md +0 -131
  113. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-perf.md +0 -136
  114. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-style.md +0 -135
  115. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-suspicious.md +0 -122
  116. package/template/agent/skills/rust-developer/references/rust-rules/lint-workspace-lints.md +0 -172
  117. package/template/agent/skills/rust-developer/references/rust-rules/mem-arena-allocator.md +0 -168
  118. package/template/agent/skills/rust-developer/references/rust-rules/mem-arrayvec.md +0 -142
  119. package/template/agent/skills/rust-developer/references/rust-rules/mem-assert-type-size.md +0 -168
  120. package/template/agent/skills/rust-developer/references/rust-rules/mem-avoid-format.md +0 -147
  121. package/template/agent/skills/rust-developer/references/rust-rules/mem-box-large-variant.md +0 -158
  122. package/template/agent/skills/rust-developer/references/rust-rules/mem-boxed-slice.md +0 -139
  123. package/template/agent/skills/rust-developer/references/rust-rules/mem-clone-from.md +0 -147
  124. package/template/agent/skills/rust-developer/references/rust-rules/mem-compact-string.md +0 -149
  125. package/template/agent/skills/rust-developer/references/rust-rules/mem-reuse-collections.md +0 -174
  126. package/template/agent/skills/rust-developer/references/rust-rules/mem-smaller-integers.md +0 -159
  127. package/template/agent/skills/rust-developer/references/rust-rules/mem-smallvec.md +0 -138
  128. package/template/agent/skills/rust-developer/references/rust-rules/mem-thinvec.md +0 -142
  129. package/template/agent/skills/rust-developer/references/rust-rules/mem-with-capacity.md +0 -156
  130. package/template/agent/skills/rust-developer/references/rust-rules/mem-write-over-format.md +0 -172
  131. package/template/agent/skills/rust-developer/references/rust-rules/mem-zero-copy.md +0 -164
  132. package/template/agent/skills/rust-developer/references/rust-rules/name-acronym-word.md +0 -99
  133. package/template/agent/skills/rust-developer/references/rust-rules/name-as-free.md +0 -104
  134. package/template/agent/skills/rust-developer/references/rust-rules/name-consts-screaming.md +0 -94
  135. package/template/agent/skills/rust-developer/references/rust-rules/name-crate-no-rs.md +0 -78
  136. package/template/agent/skills/rust-developer/references/rust-rules/name-funcs-snake.md +0 -76
  137. package/template/agent/skills/rust-developer/references/rust-rules/name-into-ownership.md +0 -123
  138. package/template/agent/skills/rust-developer/references/rust-rules/name-is-has-bool.md +0 -127
  139. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-convention.md +0 -129
  140. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-method.md +0 -131
  141. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-type-match.md +0 -142
  142. package/template/agent/skills/rust-developer/references/rust-rules/name-lifetime-short.md +0 -86
  143. package/template/agent/skills/rust-developer/references/rust-rules/name-no-get-prefix.md +0 -154
  144. package/template/agent/skills/rust-developer/references/rust-rules/name-to-expensive.md +0 -118
  145. package/template/agent/skills/rust-developer/references/rust-rules/name-type-param-single.md +0 -92
  146. package/template/agent/skills/rust-developer/references/rust-rules/name-types-camel.md +0 -65
  147. package/template/agent/skills/rust-developer/references/rust-rules/name-variants-camel.md +0 -101
  148. package/template/agent/skills/rust-developer/references/rust-rules/opt-bounds-check.md +0 -161
  149. package/template/agent/skills/rust-developer/references/rust-rules/opt-cache-friendly.md +0 -187
  150. package/template/agent/skills/rust-developer/references/rust-rules/opt-codegen-units.md +0 -142
  151. package/template/agent/skills/rust-developer/references/rust-rules/opt-cold-unlikely.md +0 -152
  152. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-always-rare.md +0 -141
  153. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-never-cold.md +0 -181
  154. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-small.md +0 -160
  155. package/template/agent/skills/rust-developer/references/rust-rules/opt-likely-hint.md +0 -171
  156. package/template/agent/skills/rust-developer/references/rust-rules/opt-lto-release.md +0 -130
  157. package/template/agent/skills/rust-developer/references/rust-rules/opt-pgo-profile.md +0 -167
  158. package/template/agent/skills/rust-developer/references/rust-rules/opt-simd-portable.md +0 -144
  159. package/template/agent/skills/rust-developer/references/rust-rules/opt-target-cpu.md +0 -154
  160. package/template/agent/skills/rust-developer/references/rust-rules/own-arc-shared.md +0 -141
  161. package/template/agent/skills/rust-developer/references/rust-rules/own-borrow-over-clone.md +0 -95
  162. package/template/agent/skills/rust-developer/references/rust-rules/own-clone-explicit.md +0 -135
  163. package/template/agent/skills/rust-developer/references/rust-rules/own-copy-small.md +0 -124
  164. package/template/agent/skills/rust-developer/references/rust-rules/own-cow-conditional.md +0 -135
  165. package/template/agent/skills/rust-developer/references/rust-rules/own-lifetime-elision.md +0 -134
  166. package/template/agent/skills/rust-developer/references/rust-rules/own-move-large.md +0 -134
  167. package/template/agent/skills/rust-developer/references/rust-rules/own-mutex-interior.md +0 -105
  168. package/template/agent/skills/rust-developer/references/rust-rules/own-rc-single-thread.md +0 -65
  169. package/template/agent/skills/rust-developer/references/rust-rules/own-refcell-interior.md +0 -97
  170. package/template/agent/skills/rust-developer/references/rust-rules/own-rwlock-readers.md +0 -122
  171. package/template/agent/skills/rust-developer/references/rust-rules/own-slice-over-vec.md +0 -119
  172. package/template/agent/skills/rust-developer/references/rust-rules/perf-black-box-bench.md +0 -153
  173. package/template/agent/skills/rust-developer/references/rust-rules/perf-chain-avoid.md +0 -136
  174. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-into.md +0 -133
  175. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-once.md +0 -120
  176. package/template/agent/skills/rust-developer/references/rust-rules/perf-drain-reuse.md +0 -137
  177. package/template/agent/skills/rust-developer/references/rust-rules/perf-entry-api.md +0 -134
  178. package/template/agent/skills/rust-developer/references/rust-rules/perf-extend-batch.md +0 -150
  179. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-lazy.md +0 -123
  180. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-over-index.md +0 -113
  181. package/template/agent/skills/rust-developer/references/rust-rules/perf-profile-first.md +0 -175
  182. package/template/agent/skills/rust-developer/references/rust-rules/perf-release-profile.md +0 -149
  183. package/template/agent/skills/rust-developer/references/rust-rules/proj-bin-dir.md +0 -142
  184. package/template/agent/skills/rust-developer/references/rust-rules/proj-flat-small.md +0 -133
  185. package/template/agent/skills/rust-developer/references/rust-rules/proj-lib-main-split.md +0 -148
  186. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-by-feature.md +0 -130
  187. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-rs-dir.md +0 -120
  188. package/template/agent/skills/rust-developer/references/rust-rules/proj-prelude-module.md +0 -155
  189. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-crate-internal.md +0 -139
  190. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-super-parent.md +0 -135
  191. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-use-reexport.md +0 -162
  192. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-deps.md +0 -186
  193. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-large.md +0 -162
  194. package/template/agent/skills/rust-developer/references/rust-rules/test-arrange-act-assert.md +0 -160
  195. package/template/agent/skills/rust-developer/references/rust-rules/test-cfg-test-module.md +0 -151
  196. package/template/agent/skills/rust-developer/references/rust-rules/test-criterion-bench.md +0 -171
  197. package/template/agent/skills/rust-developer/references/rust-rules/test-descriptive-names.md +0 -142
  198. package/template/agent/skills/rust-developer/references/rust-rules/test-doctest-examples.md +0 -168
  199. package/template/agent/skills/rust-developer/references/rust-rules/test-fixture-raii.md +0 -151
  200. package/template/agent/skills/rust-developer/references/rust-rules/test-integration-dir.md +0 -144
  201. package/template/agent/skills/rust-developer/references/rust-rules/test-mock-traits.md +0 -189
  202. package/template/agent/skills/rust-developer/references/rust-rules/test-mockall-mocking.md +0 -226
  203. package/template/agent/skills/rust-developer/references/rust-rules/test-proptest-properties.md +0 -161
  204. package/template/agent/skills/rust-developer/references/rust-rules/test-should-panic.md +0 -130
  205. package/template/agent/skills/rust-developer/references/rust-rules/test-tokio-async.md +0 -154
  206. package/template/agent/skills/rust-developer/references/rust-rules/test-use-super.md +0 -127
  207. package/template/agent/skills/rust-developer/references/rust-rules/type-enum-states.md +0 -154
  208. package/template/agent/skills/rust-developer/references/rust-rules/type-generic-bounds.md +0 -142
  209. package/template/agent/skills/rust-developer/references/rust-rules/type-never-diverge.md +0 -146
  210. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-ids.md +0 -160
  211. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-validated.md +0 -159
  212. package/template/agent/skills/rust-developer/references/rust-rules/type-no-stringly.md +0 -144
  213. package/template/agent/skills/rust-developer/references/rust-rules/type-option-nullable.md +0 -137
  214. package/template/agent/skills/rust-developer/references/rust-rules/type-phantom-marker.md +0 -188
  215. package/template/agent/skills/rust-developer/references/rust-rules/type-repr-transparent.md +0 -143
  216. package/template/agent/skills/rust-developer/references/rust-rules/type-result-fallible.md +0 -131
  217. package/template/agent/skills/saas-architect/SKILL.md +0 -139
  218. package/template/agent/skills/security-engineer/SKILL.md +0 -133
  219. package/template/agent/skills/seo-specialist/SKILL.md +0 -130
  220. package/template/agent/skills/solo-founder-ops/SKILL.md +0 -56
@@ -1,142 +0,0 @@
1
- # proj-bin-dir
2
-
3
- > Put multiple binaries in src/bin/
4
-
5
- ## Why It Matters
6
-
7
- When a crate produces multiple binaries, placing them in `src/bin/` keeps the project organized. Each file becomes a separate binary target automatically, without manual `Cargo.toml` configuration.
8
-
9
- ## Bad
10
-
11
- ```
12
- my-project/
13
- ├── Cargo.toml # Complex [[bin]] sections for each binary
14
- ├── src/
15
- │ ├── main.rs # Which binary is this?
16
- │ ├── server.rs # Is this a module or binary?
17
- │ ├── cli.rs # Unclear
18
- │ └── lib.rs
19
- ```
20
-
21
- ```toml
22
- # Cargo.toml - verbose and error-prone
23
- [[bin]]
24
- name = "server"
25
- path = "src/server.rs"
26
-
27
- [[bin]]
28
- name = "cli"
29
- path = "src/cli.rs"
30
- ```
31
-
32
- ## Good
33
-
34
- ```
35
- my-project/
36
- ├── Cargo.toml # Clean, no [[bin]] needed
37
- ├── src/
38
- │ ├── lib.rs # Shared library code
39
- │ └── bin/
40
- │ ├── server.rs # Binary: my-project-server (or just server)
41
- │ └── cli.rs # Binary: my-project-cli (or just cli)
42
- ```
43
-
44
- Each file in `src/bin/` automatically becomes a binary named after the file.
45
-
46
- ## Running Binaries
47
-
48
- ```bash
49
- # Run specific binary
50
- cargo run --bin server
51
- cargo run --bin cli
52
-
53
- # Build specific binary
54
- cargo build --bin server
55
-
56
- # Build all binaries
57
- cargo build --bins
58
- ```
59
-
60
- ## Pattern: Binary with Multiple Files
61
-
62
- For complex binaries, use directories:
63
-
64
- ```
65
- src/
66
- ├── lib.rs
67
- └── bin/
68
- ├── server/
69
- │ ├── main.rs # Entry point
70
- │ ├── config.rs # Server-specific module
71
- │ └── handlers.rs
72
- └── cli/
73
- ├── main.rs
74
- └── commands.rs
75
- ```
76
-
77
- ## Pattern: Shared Library Code
78
-
79
- ```rust
80
- // src/lib.rs - Shared code
81
- pub mod config;
82
- pub mod database;
83
- pub mod models;
84
-
85
- // src/bin/server.rs - Server binary
86
- use my_project::{config, database, models};
87
-
88
- fn main() {
89
- let config = config::load();
90
- let db = database::connect(&config);
91
- // ...
92
- }
93
-
94
- // src/bin/cli.rs - CLI binary
95
- use my_project::{config, models};
96
-
97
- fn main() {
98
- let config = config::load();
99
- // CLI logic using shared code
100
- }
101
- ```
102
-
103
- ## Binary Naming
104
-
105
- | File Path | Binary Name |
106
- |-----------|-------------|
107
- | `src/main.rs` | `my-project` (crate name) |
108
- | `src/bin/server.rs` | `server` |
109
- | `src/bin/my-cli.rs` | `my-cli` |
110
- | `src/bin/server/main.rs` | `server` |
111
-
112
- ## Explicit Configuration
113
-
114
- When you need custom settings:
115
-
116
- ```toml
117
- [[bin]]
118
- name = "my-server"
119
- path = "src/bin/server.rs"
120
- required-features = ["server"]
121
-
122
- [[bin]]
123
- name = "my-cli"
124
- path = "src/bin/cli.rs"
125
- ```
126
-
127
- ## Pattern: Default Binary
128
-
129
- ```toml
130
- # src/main.rs is the default binary
131
- # Additional binaries in src/bin/
132
-
133
- [package]
134
- name = "my-tool"
135
- default-run = "my-tool" # Or specify another
136
- ```
137
-
138
- ## See Also
139
-
140
- - [proj-lib-main-split](./proj-lib-main-split.md) - Keep main.rs minimal
141
- - [proj-workspace-large](./proj-workspace-large.md) - Workspace for larger projects
142
- - [proj-flat-small](./proj-flat-small.md) - Simple project structure
@@ -1,133 +0,0 @@
1
- # proj-flat-small
2
-
3
- > Keep small projects flat
4
-
5
- ## Why It Matters
6
-
7
- Over-organizing small projects adds navigation overhead without benefit. A project with 5-10 files doesn't need nested directories. Start flat, add structure only when complexity demands it.
8
-
9
- ## Bad
10
-
11
- ```
12
- src/
13
- ├── core/
14
- │ └── mod.rs # Just re-exports
15
- ├── domain/
16
- │ ├── mod.rs
17
- │ └── models/
18
- │ ├── mod.rs
19
- │ └── user.rs # 50 lines
20
- ├── infrastructure/
21
- │ ├── mod.rs
22
- │ └── database/
23
- │ ├── mod.rs
24
- │ └── connection.rs # 30 lines
25
- ├── application/
26
- │ ├── mod.rs
27
- │ └── services/
28
- │ └── mod.rs # Empty
29
- └── main.rs
30
- ```
31
-
32
- ## Good
33
-
34
- ```
35
- src/
36
- ├── main.rs
37
- ├── lib.rs
38
- ├── config.rs
39
- ├── database.rs
40
- ├── user.rs
41
- └── error.rs
42
- ```
43
-
44
- ## When to Add Structure
45
-
46
- | File Count | Structure |
47
- |------------|-----------|
48
- | < 10 files | Flat in `src/` |
49
- | 10-20 files | Group by feature |
50
- | 20+ files | Feature folders with submodules |
51
-
52
- ## Progressive Structuring
53
-
54
- ### Stage 1: Flat
55
-
56
- ```
57
- src/
58
- ├── main.rs
59
- ├── config.rs
60
- ├── user.rs
61
- └── database.rs
62
- ```
63
-
64
- ### Stage 2: Logical Groups
65
-
66
- ```
67
- src/
68
- ├── main.rs
69
- ├── config.rs
70
- ├── user.rs
71
- ├── order.rs # Getting bigger
72
- ├── order_item.rs # Related to order
73
- └── database.rs
74
- ```
75
-
76
- ### Stage 3: Feature Folders
77
-
78
- ```
79
- src/
80
- ├── main.rs
81
- ├── config.rs
82
- ├── user.rs
83
- ├── order/ # Now complex enough
84
- │ ├── mod.rs
85
- │ ├── model.rs
86
- │ └── item.rs
87
- └── database.rs
88
- ```
89
-
90
- ## Signs You Need More Structure
91
-
92
- - Files exceed 300-500 lines
93
- - Related files are hard to identify
94
- - You're adding `_` prefixes for grouping (`user_model.rs`, `user_service.rs`)
95
- - New team members get lost
96
- - Same concepts repeated in file names
97
-
98
- ## Signs of Over-Structure
99
-
100
- - Folders with 1-2 files
101
- - `mod.rs` files that only re-export
102
- - Deep nesting for simple concepts
103
- - More lines in module declarations than code
104
-
105
- ## Example: CLI Tool
106
-
107
- ```
108
- src/
109
- ├── main.rs # Argument parsing, entry point
110
- ├── commands.rs # CLI subcommands
111
- ├── config.rs # Configuration loading
112
- └── output.rs # Formatting, printing
113
- ```
114
-
115
- Not:
116
-
117
- ```
118
- src/
119
- ├── cli/
120
- │ └── commands/
121
- │ └── mod.rs
122
- ├── config/
123
- │ └── mod.rs
124
- └── presentation/
125
- └── output/
126
- └── mod.rs
127
- ```
128
-
129
- ## See Also
130
-
131
- - [proj-mod-by-feature](./proj-mod-by-feature.md) - Feature organization
132
- - [proj-lib-main-split](./proj-lib-main-split.md) - Lib/main separation
133
- - [proj-mod-rs-dir](./proj-mod-rs-dir.md) - Multi-file modules
@@ -1,148 +0,0 @@
1
- # proj-lib-main-split
2
-
3
- > Keep `main.rs` minimal, logic in `lib.rs`
4
-
5
- ## Why It Matters
6
-
7
- Putting your logic in `lib.rs` makes it testable, reusable, and keeps `main.rs` as a thin entry point. Integration tests can only access your library crate, not binary code in `main.rs`.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // src/main.rs - everything here
13
- fn main() {
14
- let args = parse_args();
15
- let config = load_config(&args.config_path).unwrap();
16
- let db = connect_database(&config.db_url).unwrap();
17
-
18
- // Hundreds of lines of application logic...
19
- // All untestable from integration tests!
20
- }
21
-
22
- fn parse_args() -> Args { /* ... */ }
23
- fn load_config(path: &str) -> Result<Config, Error> { /* ... */ }
24
- fn connect_database(url: &str) -> Result<Db, Error> { /* ... */ }
25
- // ... more functions that can't be tested
26
- ```
27
-
28
- ## Good
29
-
30
- ```rust
31
- // src/main.rs - thin entry point
32
- use my_app::{run, Config};
33
-
34
- fn main() -> anyhow::Result<()> {
35
- let config = Config::from_env()?;
36
- run(config)
37
- }
38
-
39
- // src/lib.rs - all the logic
40
- pub mod config;
41
- pub mod database;
42
- pub mod handlers;
43
-
44
- pub use config::Config;
45
-
46
- pub fn run(config: Config) -> anyhow::Result<()> {
47
- let db = database::connect(&config.db_url)?;
48
- let app = handlers::build_app(db);
49
- app.run()
50
- }
51
- ```
52
-
53
- ## With CLI Arguments
54
-
55
- ```rust
56
- // src/main.rs
57
- use clap::Parser;
58
- use my_app::{run, Args};
59
-
60
- fn main() -> anyhow::Result<()> {
61
- let args = Args::parse();
62
- run(args)
63
- }
64
-
65
- // src/lib.rs
66
- use clap::Parser;
67
-
68
- #[derive(Parser, Debug)]
69
- #[command(name = "myapp", version, about)]
70
- pub struct Args {
71
- #[arg(short, long)]
72
- pub config: PathBuf,
73
-
74
- #[arg(short, long, default_value = "info")]
75
- pub log_level: String,
76
- }
77
-
78
- pub fn run(args: Args) -> anyhow::Result<()> {
79
- // All application logic here - testable!
80
- }
81
- ```
82
-
83
- ## Project Structure
84
-
85
- ```
86
- my_app/
87
- ├── Cargo.toml
88
- ├── src/
89
- │ ├── main.rs # Entry point only
90
- │ ├── lib.rs # Library root, re-exports
91
- │ ├── config.rs # Configuration
92
- │ ├── database.rs # Database connection
93
- │ └── handlers/ # Request handlers
94
- │ ├── mod.rs
95
- │ └── users.rs
96
- └── tests/
97
- └── integration.rs # Can access lib.rs!
98
- ```
99
-
100
- ## Testing Benefits
101
-
102
- ```rust
103
- // tests/integration.rs - can test everything!
104
- use my_app::{Config, run, database};
105
-
106
- #[test]
107
- fn test_database_connection() {
108
- let config = Config::test_config();
109
- let db = database::connect(&config.db_url).unwrap();
110
- assert!(db.is_connected());
111
- }
112
-
113
- #[test]
114
- fn test_full_workflow() {
115
- let config = Config::test_config();
116
- // Test the actual run function
117
- assert!(my_app::run(config).is_ok());
118
- }
119
- ```
120
-
121
- ## Multiple Binaries
122
-
123
- ```rust
124
- // src/lib.rs - shared code
125
- pub mod core;
126
- pub mod utils;
127
-
128
- // src/bin/server.rs
129
- use my_app::core::Server;
130
-
131
- fn main() -> anyhow::Result<()> {
132
- Server::new()?.run()
133
- }
134
-
135
- // src/bin/cli.rs
136
- use my_app::core::Client;
137
-
138
- fn main() -> anyhow::Result<()> {
139
- let client = Client::new()?;
140
- client.execute_command()
141
- }
142
- ```
143
-
144
- ## See Also
145
-
146
- - [proj-bin-dir](proj-bin-dir.md) - Put multiple binaries in src/bin/
147
- - [proj-mod-by-feature](proj-mod-by-feature.md) - Organize modules by feature
148
- - [test-integration-dir](test-integration-dir.md) - Integration tests in tests/
@@ -1,130 +0,0 @@
1
- # proj-mod-by-feature
2
-
3
- > Organize modules by feature, not type
4
-
5
- ## Why It Matters
6
-
7
- Feature-based organization keeps related code together, making navigation intuitive and changes localized. Type-based organization (all handlers in one folder, all models in another) scatters related code across the codebase, making features harder to understand and modify.
8
-
9
- ## Bad
10
-
11
- ```
12
- src/
13
- ├── controllers/
14
- │ ├── user_controller.rs
15
- │ ├── order_controller.rs
16
- │ └── product_controller.rs
17
- ├── models/
18
- │ ├── user.rs
19
- │ ├── order.rs
20
- │ └── product.rs
21
- ├── services/
22
- │ ├── user_service.rs
23
- │ ├── order_service.rs
24
- │ └── product_service.rs
25
- └── repositories/
26
- ├── user_repository.rs
27
- ├── order_repository.rs
28
- └── product_repository.rs
29
- ```
30
-
31
- ## Good
32
-
33
- ```
34
- src/
35
- ├── user/
36
- │ ├── mod.rs # Re-exports public items
37
- │ ├── model.rs # User struct, types
38
- │ ├── repository.rs # Database operations
39
- │ ├── service.rs # Business logic
40
- │ └── handler.rs # HTTP handlers
41
- ├── order/
42
- │ ├── mod.rs
43
- │ ├── model.rs
44
- │ ├── repository.rs
45
- │ ├── service.rs
46
- │ └── handler.rs
47
- ├── product/
48
- │ ├── mod.rs
49
- │ ├── model.rs
50
- │ ├── repository.rs
51
- │ └── handler.rs
52
- └── lib.rs
53
- ```
54
-
55
- ## Benefits
56
-
57
- | Aspect | Type-Based | Feature-Based |
58
- |--------|------------|---------------|
59
- | Finding code | Search across folders | One folder per feature |
60
- | Adding feature | Touch 4+ folders | Create one folder |
61
- | Understanding feature | Jump between folders | Everything in one place |
62
- | Deleting feature | Hunt through codebase | Delete one folder |
63
- | Code ownership | Unclear | Clear feature owners |
64
-
65
- ## Module Structure
66
-
67
- ```rust
68
- // src/user/mod.rs
69
- mod model;
70
- mod repository;
71
- mod service;
72
- mod handler;
73
-
74
- // Re-export public API
75
- pub use model::{User, UserId, CreateUserRequest};
76
- pub use handler::router;
77
- pub(crate) use service::UserService;
78
- ```
79
-
80
- ## Shared Code
81
-
82
- ```
83
- src/
84
- ├── user/
85
- ├── order/
86
- ├── shared/ # Cross-cutting concerns
87
- │ ├── mod.rs
88
- │ ├── database.rs # Connection pool
89
- │ ├── error.rs # Common error types
90
- │ └── middleware.rs # Auth, logging
91
- └── lib.rs
92
- ```
93
-
94
- ## When to Flatten
95
-
96
- Small modules don't need deep nesting:
97
-
98
- ```
99
- src/
100
- ├── user/
101
- │ ├── mod.rs # Contains User struct + simple functions
102
- │ └── repository.rs # Only if complex enough
103
- ├── config.rs # Simple enough for single file
104
- └── lib.rs
105
- ```
106
-
107
- ## Hybrid Approach
108
-
109
- For larger features, nest further by concern:
110
-
111
- ```
112
- src/
113
- ├── billing/
114
- │ ├── mod.rs
115
- │ ├── invoice/
116
- │ │ ├── mod.rs
117
- │ │ ├── model.rs
118
- │ │ └── service.rs
119
- │ ├── payment/
120
- │ │ ├── mod.rs
121
- │ │ ├── model.rs
122
- │ │ └── processor.rs
123
- │ └── shared.rs
124
- ```
125
-
126
- ## See Also
127
-
128
- - [proj-flat-small](./proj-flat-small.md) - Keep small projects flat
129
- - [proj-pub-use-reexport](./proj-pub-use-reexport.md) - Clean public API
130
- - [proj-lib-main-split](./proj-lib-main-split.md) - Lib/main separation
@@ -1,120 +0,0 @@
1
- # proj-mod-rs-dir
2
-
3
- > Use mod.rs for multi-file modules
4
-
5
- ## Why It Matters
6
-
7
- Rust offers two styles for multi-file modules. The `mod.rs` style is clearer for larger modules and aligns with how most Rust projects are structured. Choose one style consistently.
8
-
9
- ## Two Styles
10
-
11
- ### Style 1: mod.rs (Recommended for larger modules)
12
-
13
- ```
14
- src/
15
- ├── user/
16
- │ ├── mod.rs # Module root
17
- │ ├── model.rs
18
- │ └── repository.rs
19
- └── lib.rs
20
- ```
21
-
22
- ```rust
23
- // src/lib.rs
24
- mod user; // Looks for user/mod.rs or user.rs
25
-
26
- // src/user/mod.rs
27
- mod model;
28
- mod repository;
29
- pub use model::User;
30
- ```
31
-
32
- ### Style 2: Adjacent file (Recommended for smaller modules)
33
-
34
- ```
35
- src/
36
- ├── user.rs # Module root
37
- ├── user/
38
- │ ├── model.rs
39
- │ └── repository.rs
40
- └── lib.rs
41
- ```
42
-
43
- ```rust
44
- // src/lib.rs
45
- mod user; // Looks for user.rs, then user/ for submodules
46
-
47
- // src/user.rs
48
- mod model;
49
- mod repository;
50
- pub use model::User;
51
- ```
52
-
53
- ## When to Use Each
54
-
55
- | Scenario | Recommendation |
56
- |----------|----------------|
57
- | Simple module (1-3 submodules) | Adjacent file (`user.rs` + `user/`) |
58
- | Complex module (4+ submodules) | `mod.rs` style (`user/mod.rs`) |
59
- | Deep nesting | `mod.rs` at each level |
60
- | Library with public modules | Consistent style throughout |
61
-
62
- ## mod.rs Benefits
63
-
64
- - Clear that `user/` is a module directory
65
- - All module code inside the folder
66
- - Easier to move/rename entire modules
67
- - Common in large codebases (tokio, serde)
68
-
69
- ## Adjacent File Benefits
70
-
71
- - Module declaration outside directory
72
- - Can see module's interface without entering folder
73
- - Matches Rust 2018+ default lint preference
74
- - Good for small modules with few submodules
75
-
76
- ## Example: Complex Module
77
-
78
- ```
79
- src/
80
- ├── database/
81
- │ ├── mod.rs # Main module, re-exports
82
- │ ├── connection.rs # Connection pool
83
- │ ├── migrations.rs # Schema migrations
84
- │ ├── queries/ # Sub-module for queries
85
- │ │ ├── mod.rs
86
- │ │ ├── user.rs
87
- │ │ └── order.rs
88
- │ └── error.rs
89
- └── lib.rs
90
- ```
91
-
92
- ```rust
93
- // src/database/mod.rs
94
- mod connection;
95
- mod migrations;
96
- mod queries;
97
- mod error;
98
-
99
- pub use connection::Pool;
100
- pub use error::DatabaseError;
101
- pub use queries::{UserQueries, OrderQueries};
102
- ```
103
-
104
- ## Consistency Rule
105
-
106
- Pick one style for your project and stick with it:
107
-
108
- ```rust
109
- // Cargo.toml or clippy.toml
110
- [lints.clippy]
111
- mod_module_files = "warn" # Enforces mod.rs style
112
- # OR
113
- self_named_module_files = "warn" # Enforces adjacent style
114
- ```
115
-
116
- ## See Also
117
-
118
- - [proj-flat-small](./proj-flat-small.md) - Keep small projects flat
119
- - [proj-mod-by-feature](./proj-mod-by-feature.md) - Feature organization
120
- - [proj-pub-use-reexport](./proj-pub-use-reexport.md) - Re-export patterns