# Contributing
Thanks for your interest in contributing to this SDK! This document provides guidelines for contributing to the project.
## Getting Started
### Prerequisites
- Rust (latest stable)
- Cargo
### Installation
Install the project dependencies:
```bash
cargo build
```
### Building
Build the project:
```bash
cargo build
```
### Testing
Run the test suite:
```bash
cargo test
```
### Linting
Run the linter:
```bash
cargo clippy
```
### Formatting
Check code formatting:
```bash
cargo fmt --check
```
Fix code formatting issues:
```bash
cargo fmt
```
## About Generated Code
**Important**: Most files in this SDK are automatically generated by [Fern](https://buildwithfern.com) from the API definition. Direct modifications to generated files will be overwritten the next time the SDK is generated.
### Generated Files
The following directories contain generated code:
- `src/` - API client modules and types
- Most Rust files in the project
### How to Customize
If you need to customize the SDK, you have two options:
#### Option 1: Use `.fernignore`
For custom code that should persist across SDK regenerations:
1. Create a `.fernignore` file in the project root
2. Add file patterns for files you want to preserve (similar to `.gitignore` syntax)
3. Add your custom code to those files
Files listed in `.fernignore` will not be overwritten when the SDK is regenerated.
For more information, see the [Fern documentation on custom code](https://buildwithfern.com/learn/sdks/overview/custom-code).
#### Option 2: Contribute to the Generator
If you want to change how code is generated for all users of this SDK:
1. The Rust SDK generator lives in the [Fern repository](https://github.com/fern-api/fern)
2. Generator code is located at `generators/rust/`
3. Follow the [Fern contributing guidelines](https://github.com/fern-api/fern/blob/main/CONTRIBUTING.md)
4. Submit a pull request with your changes to the generator
This approach is best for:
- Bug fixes in generated code
- New features that would benefit all users
- Improvements to code generation patterns
## Making Changes
### Workflow
1. Create a new branch for your changes
2. Make your modifications
3. Run tests to ensure nothing breaks: `cargo test`
4. Run the linter: `cargo clippy`
5. Run formatting: `cargo fmt`
6. Build the project: `cargo build`
7. Commit your changes with a clear commit message
8. Push your branch and create a pull request
### Commit Messages
Write clear, descriptive commit messages that explain what changed and why.
### Code Style
This project uses automated code formatting. Run `cargo fmt` before committing to ensure your code meets the project's style guidelines.
## Questions or Issues?
If you have questions or run into issues:
1. Check the [Fern documentation](https://buildwithfern.com)
2. Search existing [GitHub issues](https://github.com/fern-api/fern/issues)
3. Open a new issue if your question hasn't been addressed
## License
By contributing to this project, you agree that your contributions will be licensed under the same license as the project.