Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version: 2
updates:
- package-ecosystem: cargo
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 5
groups:
# One PR for routine patch/minor bumps; majors still arrive individually so
# they get read properly. reqwest 0.12 -> 0.13 sat unnoticed for eight months.
minor-and-patch:
update-types: [minor, patch]
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
30 changes: 29 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,32 @@ jobs:
components: rustfmt, clippy
- run: cargo fmt --all -- --check
- run: cargo clippy --all-targets --all-features -- -D warnings
Comment thread
OpenSauce marked this conversation as resolved.
- run: cargo test --all-features
- run: cargo test --all-features --locked

docs:
# docs.rs builds with the same lints. A broken intra-doc link is a hard error there,
# so without this job a bad link ships as a red "build failed" page on the release.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo doc --no-deps --all-features
env:
RUSTDOCFLAGS: -D warnings

package:
# Catch packaging breakage on the PR rather than on release day.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo publish --dry-run --locked

msrv:
# Only `cargo check` on the library: dev-dependencies (wiremock 0.6) need 1.88, and
# they are not part of what a consumer compiles.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.86
- run: cargo check --all-features --locked
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# Rust
/target
Cargo.lock

# Design / brainstorming notes (working docs, not part of the published crate)
/DESIGN.md
Expand Down
42 changes: 42 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Changelog

All notable changes to this crate are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project follows
[Semantic Versioning](https://semver.org/spec/v2.0.0.html) — while on `0.x`, breaking
changes land in minor releases.

## [Unreleased]

## [0.1.0] - 2026-08-12

First release.

### Added

- Tone browse and search via a fluent `client.tones()` builder — the same endpoint serves
both, so omitting the query browses. Filters for gear, format, size, tag, make, creator,
architecture, sort and pagination.
- `client.tone(id)` for tone detail, `client.created()` and `client.favorited()` for the
authenticated user's tones, `client.models(tone_id)` and `client.model(id)` for models,
`client.user()` and `client.users()` for profiles and the public directory.
- Model downloads: `download_model`, `download_model_json`, and `download_model_to` for
streaming to any `AsyncWrite`, plus `download_url`/`download_url_to` for a stored URL.
- OAuth 2.0 + PKCE: `pkce::generate`, `oauth::authorize_url`, `Client::exchange_code` and
`Client::refresh`, with optional proactive refresh, one retry on a 401, and an
`on_tokens_changed` callback. The app owns the redirect transport.
- Typed models with lenient deserialization, open enums carrying an `Other(String)` for
values this version does not know, and `Page<T>` with `has_next()`/`has_prev()`.
- Three runnable examples: `oauth_desktop`, `search_and_download`, `play_with_nam_rs`.

### Notes

- Every endpoint requires an end-user OAuth access token; there is no anonymous access.
- `client.models(id)` returns one architecture at a time — the API defaults to v1 and has
no "all" option.
- `Tone::models_count` means the cross-architecture total in search results and the v1
count in tone detail.
- Not yet covered: `/tones/trending`, `/tones/latest`, `/tones/downloaded`, `/makes`,
`/tags`, and the API's deprecation headers. See issues #9–#12.

[Unreleased]: https://github.com/OpenSauce/tone3000-rs/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/OpenSauce/tone3000-rs/releases/tag/v0.1.0
Loading
Loading