{"id":23364468,"url":"https://github.com/fission-codes/rust-template","last_synced_at":"2025-04-10T12:52:58.537Z","repository":{"id":62836747,"uuid":"558897909","full_name":"fission-codes/rust-template","owner":"fission-codes","description":"Fission-focused Rust and Rust+Wasm project templates","archived":false,"fork":false,"pushed_at":"2025-02-28T12:36:43.000Z","size":1076,"stargazers_count":42,"open_issues_count":23,"forks_count":6,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-03T04:56:18.326Z","etag":null,"topics":["cargo","cargo-generate","nix","release-please","rust","template","template-generator","template-project","wasm"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fission-codes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"open_collective":"fission"}},"created_at":"2022-10-28T14:45:17.000Z","updated_at":"2025-03-03T19:28:46.000Z","dependencies_parsed_at":"2025-01-27T14:21:11.395Z","dependency_job_id":"27c8c317-dbbb-490f-b7b2-2b51a23b6bce","html_url":"https://github.com/fission-codes/rust-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fission-codes%2Frust-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fission-codes%2Frust-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fission-codes%2Frust-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fission-codes%2Frust-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fission-codes","download_url":"https://codeload.github.com/fission-codes/rust-template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248133067,"owners_count":21053160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cargo","cargo-generate","nix","release-please","rust","template","template-generator","template-project","wasm"],"created_at":"2024-12-21T13:16:22.826Z","updated_at":"2025-04-10T12:52:58.518Z","avatar_url":"https://github.com/fission-codes.png","language":"Rust","funding_links":["https://opencollective.com/fission"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/fission-codes/rust-template\" target=\"_blank\"\u003e\n    \u003cimg src=\"./assets/logo.png\" alt=\"rust-template Logo\" width=\"100\"\u003e\u003c/img\u003e\n  \u003c/a\u003e\n\n  \u003ch1 align=\"center\"\u003erust-template\u003c/h1\u003e\n\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/fission-codes/rust-template/actions?query=\"\u003e\n      \u003cimg src=\"https://github.com/fission-codes/rust-template/actions/workflows/build.yml/badge.svg\" alt=\"Build Status\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"./LICENSE-APACHE\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-blue.svg\" alt=\"License-Apache\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"./LICENSE-MIT\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"License-MIT\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://discord.gg/AunfpqKUHU\"\u003e\n      \u003cimg src=\"https://img.shields.io/static/v1?label=Discord\u0026message=join%20us!\u0026color=mediumslateblue\" alt=\"Discord\"\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n##\n\nThis template repository is [Fission's][fission] opinionated [Rust][rust],\nRust [web framework][axum], and [Rust][rust]+[WebAssembly][wasm] (Wasm) project\ngenerator, which uses the [cargo-generate][cargo-generate] tool.\n\nThese templates provide various features for getting-up and running with Rust or\nRust *and* Wasm, including:\n\n* README standardization, code of conduct, contribuing guidelines, and\n  a consistent project layout\n* GitHub issue and pull-request templates\n* A highly-opinionated [axum][axum] middleware-extensive webserver, focused heavily on\n  observability and flexibility\n* Some choice default Rust dependencies (particularly for Wasm) including\n  [`wasm-bindgen`][wasm-bindgen]\n* [`cargo-bench`][cargo-bench] scaffolding (*optional*)\n* Release GitHub Action workflow(s) using the\n  [release-please-action][release-please-action] and the\n  [release-please][release-please] deploy strategy (*optional*)\n  * For Wasm libraries, this includes publishing to npm with\n    [wasm-pack][wasm-pack], reliant on the Cargo version for the Wasm package.\n* Test, lint, audit, and code coverage (via [Codecov][codecov]) GitHub Action\n  workflows (*optional*)\n* Cross-compile-compatible (`arm64`, `amd64`), [buildx][buildx]-focused\n  [Dockerfiles][dockerfile]—pick a `musl` or `glibc` build—for binary\n  executables (*right now*), as well as an associated GitHub Action for building\n  and pushing to [GitHub Packages Registry][gh-registry] and\n  [Docker Hub][dockerhub].\n* [Pre-commit][pre-commit] and [rustfmt][rustfmt] opinionated defaults\n* [Dependabot][dependabot] support (*optional*)\n* [Nix flake][nix-flake] support (*optional*)\n* A choice of an [Apache][apache], [MIT][mit], or a dual Apache/MIT license\n\n## Outline\n\n- [Project Templates](#project-templates)\n- [Getting Started](#getting-started)\n- [Contributing](#contributing)\n- [Template References](#template-references)\n- [Thanks](#thanks)\n- [License](#license)\n\n## Project Templates\n\nThis repository contains two sub-templates:\n\n* `rust`: for generating a rust-only library, webserver, or binary/executable\n  project.\n* `rust+wasm` for generating a [cargo workspace][cargo-workspace]\n  with a rust-only crate of the project (library or binary) and another crate\n  for wasm-bindings (library-only), meant for execution in [Node.js][node-js]\n  or running in modern browsers and/or with bundlers like [webpack][webpack].\n\n## Getting Started\n\nFirst, install [cargo-generate][cargo-generate] via `cargo install cargo-generate`.\nMore installation options are available [here][cargo-generate-install].\n\nThe experience running through the experience should look something like this:\n\n![cargo-generate Rust Binary Application Screenshot](./assets/screenshot.png)\n\n### Generating a Rust-Only Project\n\nThe `rust` template is designed for generating a rust binary or application\nlibrary.\n\n- Generate a binary project, for example an [axum][axum] webserver:\n\n  ``` console\n  cargo generate --bin --git https://github.com/fission-codes/rust-template\n  ```\n*Note on binary crate types*: If using the `--bin` flag, this template will\ngenerate a Rust binary project scaffolding with both a `src/main.rs` and a\n`src/lib.rs`. This allows for better support for\n[integration testing][integration-testing] and helps with\n[separation of concerns][sep-of-concerns].\n\n- Generate an application library project:\n\n  ``` console\n  cargo generate --lib --git https://github.com/fission-codes/rust-template\n  ```\n\n- Generate a project from src, locally:\n\n  ``` console\n  cargo generate --lib --path fission-codes/rust-template/\n  ```\n\n*Note on SSH-Keys*: When genearting a project/repository, please be aware\nthat RSA keys used with SHA-1 signatures are [no longer supported by\nGitHub][github-rsa]. There is currently [an issue][cargo-generate-issue] in the\n`cargo-generate` repository involving an `id_rsa` default. If you run into an\nassociated error using the template, please specify your private key when\ngenerating a project/repository like so:\n\n```console\ncargo generate -i ~/.ssh/id_ed25519 https://github.com/fission-codes/rust-template\n```\n\n#### 🔋 Batteries Included\n\n- [`anyhow`][anyhow] as a ergonomic and idiomatic alternative for handling\n  errors in applications, and [`thiserror`][thiserror] for designing\n  dedicated error type(s) in libraries so that on failures the caller gets\n  exactly the information chosen.\n- [`proptest`][proptest] and [`criterion`][criterion] for generating inputs and\n  running benchmarks (*optional*).\n- [`tracing`][tracing] for instrumenting Rust programs to collect structured,\n  event-based diagnostic information, going beyond just logging-style\n  diagnostics.\n- [`tracing-subscriber`][tracing-subscriber] for Rust binary applications\n  to collect trace data, such as by logging it to standard output, and\n  consume messages emitted by log-instrumented libraries and modules.\n- An option to generate a highly opiniated [`axum`][axum] web application stack.\n\n#### 🔋 Batteries Included Web Framework\n\nIf you choose to run a webserver with [`axum`][axum] (choosing `true` at the\nprompt), you'll be given an extensive web framework to work from, heavily\ninfluenced by [*Composing an observable Rust application*][composing-rust],\namong other sources.\n\n- [`anyhow`][anyhow] as a ergonomic and idiomatic alternative for handling\n  errors in applications.\n- [`axum`][axum] as the fundamenal, already-🔋's included web framework that\n  serves as our foundation, which includes high-level features like:\n  * Routing requests to handlers with a macro free API\n  * Declaratively parsing requests using extractors.\n  * Subscribing to a simple and predictable error handling model, which we\n    further simplify in our generated template.\n  * Generating responses with minimal boilerplate.\n  * Taking full advantage of the [tower][tower] and [tower-http][tower-http]\n    ecosystem of middleware, services, and utilities.\n- Template-specific extensions to `axum`, including\n  * An enhanced [Json][axum-json] extractor for better handling of\n    [`Unprocessable Entity`][422] responses.\n  * A generic `AppError` type for encoding [JSONAPI error object responses][json-error].\n  * A macro for generating [typed HTTP headers][typed-headers], for example\n\n    ``` rust\n    header!(XDummyId, XDUMMY_ID, \"x-dummy-id\");\n\n    fn test_dummy_header() {\n        let s = \"18312349-3139-498C-84B6-87326BF1F2A7\";\n        let dummy_id = test_decode::\u003cXDummyId\u003e(\u0026[s]).unwrap();\n        let headers = test_encode(dummy_id);\n        assert_eq!(headers[\"x-dummy-id\"], s);\n    }\n    ```\n  * Built-in `healthcheck`, `ping` *GET* route handlers, as well as a\n    [fallback route handler][axum-fallback] and decorated layers for\n    [catching panics][tower-catch-panic], handling server timeouts,\n    setting [ulid][ulid] request-ids per request, and marking sensitive\n    headers on both requests and responses.\n  * Graceful shutdown of server when `Ctrl-c`'ed or terminated.\n- [`config-rs`][config-rs] for layered configuration settings and using\n  `APP` prefixed environment variables for (overrding) configuration.\n\n   We provide a default for application settings (*note*: metrics and server\n   ports are provided through `cargo generate` prompts):\n\n   ```toml\n   [monitoring]\n   process_collector_interval = 10\n\n   [otel]\n   exporter_otlp_endpoint = \"http://localhost:4317\"\n\n   [server]\n   environment = \"local\"\n   metrics_port = 4000\n   port = 3000\n   timeout_ms = 30000\n   ```\n- [`metrics-rs`][metrics-rs] for application instrumentation, including counters,\n  gauges, histograms, and more.\n- [`opentelemetry-rust`][otel-rust] and [`axum-tracing-opentelemetry`][otel-axum]\n  for integrating `axum` and `tracing` with [opentelemetry][otel], the\n  well-known observability framework and specification for capturing telemetry\n  data and supporting distributed tracing context propagation. Here's an example set of\n  logs displaying `OTEL` spec fields, among other contextual information:\n\n  ```console\n  level=INFO span_name=\"HTTP request\" span=2251799813685249 span_event=new_span timestamp=2023-01-29T15:06:42.188395Z http.method=GET http.client_ip=127.0.0.1:59965 http.host=localhost:3000 trace_id=fa9754fa3142db2c100a8c47f6dd391d http.route=/ping\n  level=INFO subject=request category=http.request msg=\"started processing request\" request_path=/ping authorization=null target=\"project::middleware::logging\" location=\"project/src/middleware/logging.rs:123\" timestamp=2023-01-29T15:06:42.188933Z span=2251799813685249 otel.name=\"GET /ping\" http.method=GET http.scheme=HTTP http.client_ip=127.0.0.1:59965 http.flavor=1.1 otel.kind=server http.user_agent=curl/7.85.0 http.host=localhost:3000 trace_id=fa9754fa3142db2c100a8c47f6dd391d http.target=/ping http.route=/ping\n  level=INFO span_name=\"HTTP request\" span=2251799813685249 span_event=close_span timestamp=2023-01-29T15:06:42.192221Z http.method=GET latency_ms=3 http.client_ip=127.0.0.1:59965 http.host=localhost:3000 trace_id=fa9754fa3142db2c100a8c47f6dd391d http.route=/ping\n  ```\n- [`proptest`][proptest] and [`criterion`][criterion] for generating inputs and\n  running benchmarks (*optional*).\n- [`reqwest`][reqwest] as the default HTTP client library and\n  [`reqwest-middleware`][reqwest-middleware] as a wrapper around `reqwest` for\n  client middleware chaining, giving us retries and tracing out of the box.\n- [`sysinfo`][sysinfo] for monitoring process information like memory, disk\n  usage, etc. This information is automatically represented and tracked as\n  [gauges][metrics-gauge] for [Prometheus][prom] scraping/export for example.\n- [`tracing`][tracing] for instrumenting Rust programs to collect structured,\n  event-based diagnostic information, going beyond just logging-style\n  diagnostics.\n- [`tracing-subscriber`][tracing-subscriber] for Rust binary applications\n  to collect trace data, such as by logging it to standard output, and to\n  consume messages emitted by log-instrumented libraries and modules.\n\n  For `axum` projects, we include a compositon of tracing subscribers from\n  smaller units of behavior, called [layers][tracing-layers], for collecting,\n  augmenting, and logging (as structured logs) trace data. These layers tap into\n  hooks triggered throughout a [span’s lifecycle][tracing-span-life]. You can\n  find them [here](./rust/src.axum/tracing_layers).\n\n  Event logs are formatted in [`logfmt`][logfmt], as a series of key/value\n  pairs. The implementation of the log generation is inspired by\n  [influxdata's (Influx DB's) version][influx-logfmt].\n- [`utoipa`][utoipa] for compile-time, auto-generated [OpenAPI][openapi]\n  documentation and serving it via [Swagger UI][swagger]. This works\n  as a [Procedural `attribute macro`][proc-attr-macro], for example:\n\n  ```rust\n  #[utoipa::path(\n      get,\n      path = \"/ping\",\n      responses(\n          (status = 200, description = \"Ping successful\"),\n          (status = 500, description = \"Ping not successful\", body=AppError)\n      )\n  )]\n  pub async fn get() -\u003e AppResult\u003cStatusCode\u003e {\n      Ok(StatusCode::OK)\n  }\n  ```\n- [`wiremock-rs`][wiremock-rs] to provide HTTP mocking to perform black-box\n  testing of Rust applications that interact with third-party client APIs. This is\n  exemplified through the given [integration test](./rust/tests/integration_test.axum.rs)\n  when choosing `axum` as a prompt.\n\n\n### Generating a Rust+Wasm Workspace Project\n\nThe `rust+wasm` template is designed for generating a [workspace][cargo-workspace]\ncontaining both rust-native library or binary code, as well a library for\ncompilation to Wasm and leveraging [wasm-pack][wasm-pack]. We don't currently\nsupport any Javascript examples or frameworks that can use Wasm npm package\nexplicitly, but this is on our radar. Additionally, when using the `--bin` flag\nyou have the option to generate our [axum][axum] template with\nall the 🔋's [mentioned above](#-batteries-included-web-framework).\n\nGenerate a project just like before and choose the `rust+wasm` template:\n\n```console\ncargo generate --lib --git https://github.com/fission-codes/rust-template\n```\n\n*Note*: Currently, `wasm-pack` [does not support building binary\n crates][no-binary], so even with the `--bin` flag specified, a library\nwill still be generated.\n\n#### 🔋 Batteries Included\n\n- [`wasm-bindgen`][wasm-bindgen] for communicating\n  between WebAssembly and JavaScript.\n- [`wasm-bindgen-futures`][wasm-bindgen-futures] for converting between\n  Javascript Promises and Rust futures.\n- [`console_error_panic_hook`][console-hook]\n  for logging panic messages to the developer console.\n- [`js-sys`][js-sys] for bindings to Javascript's standard, built-in\n  objects.\n- [`web-sys`][web-sys] for bindings to Web APIs like `window.fetch`, WebGL,\n  WebAudio, etc. (*optional*, via feature-flag).\n\n### Generation in an existing project\n\nThe generator is also designed for templating within an existing project and\nprompts with this in mind. To generate in an existing project, run this command\nin the project root:\n\n  ``` console\n  cargo generate --git https://github.com/fission-codes/rust-template --init\n  ```\n\nWhen taking this approach, please be aware that some of the generated code,\ne.g. benches, READMEs, etc., rely on dependencies or contain text that may\nnot be set in or follow the layout of your existing Rust codebase, so please\nmake the appropriate changes where needed.\n\nIf the generator detects a conflict, it will not alter your project in any way,\nfailing with an error. **We can't cover all the cases when extending an existing\nproject**. If you run into problems, open an [issue][gh-issues].\n\n### Notes for Post-Project Generation\n\n- If using `nix` via [Nix flake][nix-flake], please install [nix][nix] and\n  [direnv][direnv] to get started. Then, make sure to run `direnv allow`\n  and add your files via `git add`.\n\n- If [Codecov][codecov] upload is enabled through GitHub Actions make\n  sure to sync your project and gather tokens/badges. Read more\n  [here][codecov-quick].\n\n- There are stock integration tests available for all templates, including\n  a [wasm-bindgen][wasm-bindgen] decorated test, `#[wasm_bindgen_test]`, that\n  can be tested with [wasm-pack][wasm-pack].\n\n- For CI/CD purposes, be aware there's [some secrets you'll need to configure\n  in Github][gh-secrets], including:\n  * `CODECOV_TOKEN` if you choose to use coverage via [Codecov][codecov]\n  * `CARGO_REGISTRY_TOKEN` for publshing Rust packages to [crates.io][crates-io]\n  * `NPM_TOKEN` for publishing a Wasm project to [npm][npm]\n  * `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN` for pushing containers to Docker\n    Hub.\n\n## Contributing\n\n:balloon: We're thankful for any feedback and help in improving our template\ngenerator! We have a [contributing guide](./CONTRIBUTING.md) to help you get\ninvolved. We also adhere to Fission's [Code of Conduct](./CODE_OF_CONDUCT.md).\n\n### Pre-commit Hook\n\nThis repository recommends using [pre-commit][pre-commit] for running pre-commit\nhooks. Please run this before every commit and/or push.\n\n- Once installed, Run `pre-commit install` and `pre-commit install --hook-type commit-msg`\n  to setup the pre-commit hooks locally. This will reduce failed CI builds.\n- If you are doing interim commits locally, and for some reason if you _don't_\n  want pre-commit hooks to fire, you can run\n  `git commit -a -m \"Your message here\" --no-verify`.\n\n## Template References\n\n- [bevy-template-rs][bevy-template]\n- [rust-nix-template][rust-nix-template]\n- [wasm-pack-template][wasm-pack-template]\n\n## Thanks\n\nMajor shout-outs to the various contributors of this work, including:\n\n- [@bgins](https://github.com/bgins)\n- [@BoisterousCoder](https://github.com/BoisterousCoder)\n- [@QuinnWilton](https://github.com/QuinnWilton)\n- [@expede](https://github.com/expede)\n- [@pauljamescleary](https://github.com/pauljamescleary)\n- [@drunkirishcoder](https://github.com/drunkirishcoder)\n- [@jaredmorrow](https://github.com/jaredmorrow)\n- [@glitchy](https://github.com/glitchy)\n- [@jwhittle933](https://github.com/jwhittle933)\n- [@walkah](https://github.com/walkah)\n\n## License\nThis project is licensed under either of\n\n- Apache License, Version 2.0, ([LICENSE-APACHE](./LICENSE-APACHE) or\n  [http://www.apache.org/licenses/LICENSE-2.0][apache])\n- MIT license ([LICENSE-MIT](./LICENSE-MIT) or\n  [http://opensource.org/licenses/MIT][mit])\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally\nsubmitted for inclusion in the work by you, as defined in the Apache-2.0\nlicense, shall be dual licensed as above, without any additional terms or\nconditions.\n\n[422]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422\n[apache]: https://www.apache.org/licenses/LICENSE-2.0\n[anyhow]: https://github.com/dtolnay/anyhow\n[axum]: https://docs.rs/axum/latest/axum/\n[axum-fallback]: https://docs.rs/axum/latest/axum/routing/struct.Router.html#method.fallback\n[axum-json]: https://docs.rs/axum/latest/axum/struct.Json.html\n[buildx]: https://github.com/docker/buildx\n[bevy-template]: https://github.com/taurr/bevy-template-rs\n[cargo-bench]: https://doc.rust-lang.org/cargo/commands/cargo-bench.html\n[cargo-generate]: https://github.com/cargo-generate/cargo-generate\n[cargo-generate-init]: https://cargo-generate.github.io/cargo-generate/usage.html#generating-into-current-dir\n[cargo-generate-install]: https://github.com/cargo-generate/cargo-generate#installation\n[cargo-generate-issue]: https://github.com/cargo-generate/cargo-generate/issues/384\n[cargo-workspace]: https://doc.rust-lang.org/cargo/reference/workspaces.html\n[codecov]: https://about.codecov.io/\n[codecov-quick]: https://docs.codecov.com/docs/quick-start\n[composing-rust]: https://blog.logrocket.com/composing-underpinnings-observable-rust-application/\n[config-rs]: https://github.com/mehcode/config-rs\n[console-hook]: https://github.com/rustwasm/console_error_panic_hook\n[crates-io]: https://crates.io/\n[criterion]: https://github.com/bheisler/criterion.rs\n[dependabot]: https://github.com/dependabot\n[direnv]:https://direnv.net/\n[dockerfile]: https://docs.docker.com/engine/reference/builder/\n[dockerhub]: https://hub.docker.com/\n[fission]: https://fission.codes/\n[gh-issues]: https://github.com/fission-codes/rust-template/issues\n[gh-registry]: https://github.com/features/packages\n[github-rsa]: https://github.blog/2021-09-01-improving-git-protocol-security-github/\n[gh-secrets]: https://docs.github.com/en/rest/actions/secrets\n[influx-logfmt]: https://github.com/influxdata/influxdb_iox/tree/main/logfmt\n[integration-testing]: https://doc.rust-lang.org/book/ch11-03-test-organization.html#integration-tests-for-binary-crates\n[json-error]: https://jsonapi.org/examples/#error-objects\n[js-sys]: https://docs.rs/js-sys/latest/js_sys/\n[logfmt]: https://brandur.org/logfmt\n[metrics-gauge]: https://docs.rs/metrics/latest/metrics/macro.gauge.html\n[metrics-rs]: https://github.com/metrics-rs/metrics\n[mit]: http://opensource.org/licenses/MIT\n[nix]:https://nixos.org/download.html\n[nix-flake]: https://nixos.wiki/wiki/Flakes\n[node-js]: https://nodejs.dev/en/\n[no-binary]: https://github.com/rustwasm/wasm-pack/issues/734\n[npm]: https://www.npmjs.com/\n[openapi]: https://swagger.io/specification/\n[otel]: https://opentelemetry.io/docs/\n[otel-axum]: https://github.com/davidB/axum-tracing-opentelemetry\n[otel-rust]: https://docs.rs/opentelemetry/latest/opentelemetry/\n[pre-commit]: https://pre-commit.com/\n[proc-attr-macro]: https://doc.rust-lang.org/reference/procedural-macros.html#attribute-macros\n[prom]: https://prometheus.io/\n[proptest]: https://github.com/proptest-rs/proptest\n[release-please]: https://github.com/googleapis/release-please\n[release-please-action]: https://github.com/google-github-actions/release-please-action\n[reqwest]: https://github.com/seanmonstar/reqwest\n[reqwest-middleware]: https://github.com/TrueLayer/reqwest-middleware\n[rust]: https://www.rust-lang.org/\n[rust-nix-template]: https://github.com/nerosnm/rust-nix-template\n[rustfmt]: https://github.com/rust-lang/rustfmt\n[sep-of-concerns]: https://doc.rust-lang.org/stable/book/ch12-03-improving-error-handling-and-modularity.html#separation-of-concerns-for-binary-projects\n[sysinfo]: https://github.com/GuillaumeGomez/sysinfo\n[swagger]: https://swagger.io/tools/swagger-ui/\n[thiserror]: https://github.com/dtolnay/thiserror\n[tower]: https://crates.io/crates/tower\n[tower-catch-panic]: https://docs.rs/tower-http/latest/tower_http/catch_panic/struct.CatchPanic.html\n[tower-http]: https://crates.io/crates/tower-http\n[tracing]: https://github.com/tokio-rs/tracing\n[tracing-layers]: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/layer/index.html\n[tracing-span-life]: https://docs.rs/tracing/latest/tracing/span/index.html#the-span-lifecycle\n[tracing-subscriber]: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/index.html\n[typed-headers]: https://docs.rs/headers/0.3.8/headers/index.html\n[ulid]: https://github.com/ulid/spec\n[utoipa]: https://github.com/juhaku/utoipa\n[wasm]: https://webassembly.org/\n[wasm-bindgen]: https://github.com/rustwasm/wasm-bindgen\n[wasm-bindgen-futures]: https://rustwasm.github.io/wasm-bindgen/api/wasm_bindgen_futures/\n[wasm-pack]: https://rustwasm.github.io/docs/wasm-pack/\n[wasm-pack-template]: https://github.com/rustwasm/wasm-pack-template\n[webpack]: https://webpack.js.org/\n[web-sys]: https://rustwasm.github.io/wasm-bindgen/api/web_sys/\n[wiremock-rs]: https://github.com/LukeMathWalker/wiremock-rs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffission-codes%2Frust-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffission-codes%2Frust-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffission-codes%2Frust-template/lists"}