Compare commits

...

46 Commits

Author SHA1 Message Date
9955c22468 workflow syntax fix
All checks were successful
Release Tagging / release (pull_request) Successful in 29s
Rust Build / Check (pull_request) Successful in 47s
Rust Build / Test Suite (pull_request) Successful in 57s
Rust Build / Rustfmt (pull_request) Successful in 29s
Rust Build / Clippy (pull_request) Successful in 32s
Rust Build / build (pull_request) Successful in 31s
2026-03-22 22:07:41 -04:00
c6682ae69a Fixing tag release workflow
Some checks failed
Release Tagging / release (pull_request) Failing after 1s
Rust Build / Test Suite (pull_request) Successful in 40s
Rust Build / Check (pull_request) Successful in 41s
Rust Build / Rustfmt (pull_request) Successful in 36s
Rust Build / Clippy (pull_request) Successful in 56s
Rust Build / build (pull_request) Successful in 47s
2026-03-22 22:05:49 -04:00
0e86fb0cef cargo update
Some checks failed
Release Tagging / release (pull_request) Failing after 0s
Rust Build / Check (pull_request) Successful in 48s
Rust Build / Test Suite (pull_request) Successful in 48s
Rust Build / Rustfmt (pull_request) Successful in 32s
Rust Build / Clippy (pull_request) Successful in 1m2s
Rust Build / build (pull_request) Successful in 56s
2026-03-22 22:01:36 -04:00
368590c3a2 Updated rust version in workflow
Some checks failed
Release Tagging / release (pull_request) Failing after 0s
Rust Build / Check (pull_request) Successful in 55s
Rust Build / Test Suite (pull_request) Successful in 58s
Rust Build / Rustfmt (pull_request) Successful in 46s
Rust Build / Clippy (pull_request) Successful in 1m0s
Rust Build / build (pull_request) Successful in 47s
2026-03-22 21:59:34 -04:00
0552561851 tsk-90: Add UserClaims (#91)
All checks were successful
Release Tagging / release (push) Successful in 32s
Rust Build / Check (push) Successful in 32s
Rust Build / Test Suite (push) Successful in 34s
Rust Build / Rustfmt (push) Successful in 32s
Rust Build / Clippy (push) Successful in 33s
Rust Build / build (push) Successful in 34s
Release Tagging / release (pull_request) Successful in 45s
Rust Build / Check (pull_request) Successful in 1m5s
Rust Build / Rustfmt (pull_request) Successful in 32s
Rust Build / Test Suite (pull_request) Successful in 53s
Rust Build / Clippy (pull_request) Successful in 53s
Rust Build / build (pull_request) Successful in 58s
Closes #90

Reviewed-on: #91
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-30 19:24:37 +00:00
678d2c2b3d tsk-85: Add file_type to CoverArt (#89)
All checks were successful
Release Tagging / release (push) Successful in 32s
Rust Build / Check (push) Successful in 32s
Rust Build / Test Suite (push) Successful in 33s
Rust Build / Rustfmt (push) Successful in 1m1s
Rust Build / Clippy (push) Successful in 33s
Rust Build / build (push) Successful in 32s
Closes #85

Reviewed-on: #89
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-29 18:14:23 +00:00
b5429f80b0 tsk-86: Make MusicTypes and CoverArtTypes singular (#88)
All checks were successful
Release Tagging / release (push) Successful in 34s
Rust Build / Check (push) Successful in 32s
Rust Build / Test Suite (push) Successful in 33s
Rust Build / Rustfmt (push) Successful in 30s
Rust Build / Clippy (push) Successful in 34s
Rust Build / build (push) Successful in 32s
Closes #86

Reviewed-on: #88
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-29 18:00:56 +00:00
432078e3c2 tsk-83: Add None value for MusicTypes and CoverArtTypes (#87)
All checks were successful
Release Tagging / release (push) Successful in 33s
Rust Build / Check (push) Successful in 34s
Rust Build / Test Suite (push) Successful in 32s
Rust Build / Rustfmt (push) Successful in 32s
Rust Build / Clippy (push) Successful in 32s
Rust Build / build (push) Successful in 32s
Closes #83

Reviewed-on: #87
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-28 17:05:13 +00:00
0a27b8ccb1 filename generation fix (#82)
All checks were successful
Rust Build / Check (push) Successful in 31s
Release Tagging / release (push) Successful in 35s
Rust Build / Test Suite (push) Successful in 42s
Rust Build / Rustfmt (push) Successful in 25s
Rust Build / Clippy (push) Successful in 35s
Rust Build / build (push) Successful in 42s
Reviewed-on: #82
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-24 17:21:07 +00:00
afc4ca21a2 tsk-76: Improve getting path of Song or CoverArt (#81)
All checks were successful
Rust Build / Test Suite (push) Successful in 28s
Release Tagging / release (push) Successful in 36s
Rust Build / Check (push) Successful in 43s
Rust Build / Rustfmt (push) Successful in 24s
Rust Build / build (push) Successful in 26s
Rust Build / Clippy (push) Successful in 35s
Closes #76

Reviewed-on: #81
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-24 16:51:08 +00:00
02b6157e0d tsk-79: Create function to generate CoverArt filename (#80)
All checks were successful
Release Tagging / release (push) Successful in 31s
Rust Build / Check (push) Successful in 34s
Rust Build / Test Suite (push) Successful in 50s
Rust Build / Rustfmt (push) Successful in 23s
Rust Build / Clippy (push) Successful in 33s
Rust Build / build (push) Successful in 43s
Closes #79

Reviewed-on: #80
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-24 16:19:38 +00:00
860d684e7b Merge pull request 'v0.8 Changes' (#75) from next-v0.8 into main
All checks were successful
Release Tagging / release (push) Successful in 1m0s
Rust Build / Rustfmt (push) Successful in 54s
Rust Build / build (push) Successful in 1m14s
Rust Build / Test Suite (push) Successful in 1m42s
Rust Build / Clippy (push) Successful in 1m39s
Rust Build / Check (push) Successful in 1m13s
Reviewed-on: #75
2025-10-20 01:47:05 +00:00
97783568e9 cargo update
All checks were successful
Rust Build / build (pull_request) Successful in 1m2s
Rust Build / Clippy (pull_request) Successful in 1m6s
Rust Build / Check (pull_request) Successful in 50s
Rust Build / Rustfmt (pull_request) Successful in 44s
Rust Build / Test Suite (pull_request) Successful in 1m12s
2025-10-19 21:25:30 -04:00
5a8118726b Version bump
All checks were successful
Rust Build / Check (pull_request) Successful in 43s
Rust Build / Test Suite (pull_request) Successful in 48s
Rust Build / Clippy (pull_request) Successful in 33s
Rust Build / Rustfmt (pull_request) Successful in 1m8s
Rust Build / build (pull_request) Successful in 39s
2025-10-19 21:23:32 -04:00
9dcf46ec0a Updated workflows
All checks were successful
Rust Build / Rustfmt (pull_request) Successful in 1m36s
Rust Build / Clippy (pull_request) Successful in 52s
Rust Build / build (pull_request) Successful in 54s
Rust Build / Check (pull_request) Successful in 1m16s
Rust Build / Test Suite (pull_request) Successful in 1m32s
2025-10-19 21:08:08 -04:00
44d08cdb1f tsk-71: Add token expiration checks (#78)
All checks were successful
Rust Build / Check (pull_request) Successful in 58s
Rust Build / Test Suite (pull_request) Successful in 45s
Rust Build / build (pull_request) Successful in 38s
Release Tagging / release (push) Successful in 36s
Rust Build / Rustfmt (pull_request) Successful in 1m3s
Rust Build / Clippy (pull_request) Successful in 36s
Closes #71

Reviewed-on: #78
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-19 02:18:29 +00:00
51c8b5c7b3 tsk-73: Change data type of song from string to date (#77)
All checks were successful
Release Tagging / release (push) Successful in 42s
Release Tagging / release (pull_request) Successful in 1m4s
Rust Build / Check (pull_request) Successful in 34s
Rust Build / Clippy (pull_request) Successful in 31s
Rust Build / Test Suite (pull_request) Successful in 58s
Rust Build / Rustfmt (pull_request) Successful in 1m2s
Rust Build / build (pull_request) Successful in 35s
Closes #73

Reviewed-on: #77
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-19 01:45:35 +00:00
8041dc6ff5 tsk-72: Separating directory and filename from path in coverart (#74)
All checks were successful
Rust Build / Check (pull_request) Successful in 46s
Rust Build / Test Suite (pull_request) Successful in 36s
Rust Build / Clippy (pull_request) Successful in 40s
Rust Build / Rustfmt (pull_request) Successful in 1m13s
Rust Build / build (pull_request) Successful in 37s
Release Tagging / release (pull_request) Successful in 44s
This will be a breaking change

Closes #72

Reviewed-on: #74
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-19 00:48:49 +00:00
11e5b1745c tsk-59 (#70)
All checks were successful
Rust Build / Check (push) Successful in 33s
Rust Build / Rustfmt (push) Successful in 34s
Rust Build / Test Suite (push) Successful in 1m19s
Rust Build / Clippy (push) Successful in 36s
Rust Build / build (push) Successful in 1m31s
Release Tagging / release (pull_request) Successful in 1m10s
Rust Build / Check (pull_request) Successful in 38s
Rust Build / Rustfmt (pull_request) Successful in 33s
Rust Build / Test Suite (pull_request) Successful in 1m25s
Rust Build / build (pull_request) Successful in 39s
Rust Build / Clippy (pull_request) Successful in 32s
Closes #59

Reviewed-on: #70
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-12 20:44:23 +00:00
4e649fa390 Dependency update (#69)
All checks were successful
Rust Build / Check (push) Successful in 33s
Rust Build / Rustfmt (push) Successful in 32s
Rust Build / Test Suite (push) Successful in 1m13s
Rust Build / Clippy (push) Successful in 40s
Rust Build / build (push) Successful in 50s
Reviewed-on: #69
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-12 20:34:46 +00:00
668d371f7f Merge pull request 'Coverart changes' (#65) from coverart_changes into main
All checks were successful
Rust Build / Check (push) Successful in 32s
Rust Build / Rustfmt (push) Successful in 32s
Rust Build / Clippy (push) Successful in 31s
Rust Build / build (push) Successful in 31s
Rust Build / Test Suite (push) Successful in 33s
Release Tagging / release (pull_request) Successful in 31s
Rust Build / Check (pull_request) Successful in 30s
Rust Build / Test Suite (pull_request) Successful in 12m55s
Rust Build / Rustfmt (pull_request) Successful in 26m11s
Rust Build / Clippy (pull_request) Successful in 36s
Rust Build / build (pull_request) Successful in 35s
Reviewed-on: #65
2025-10-11 22:18:24 +00:00
eac7562b80 Coverart remove file (#68)
All checks were successful
Release Tagging / release (pull_request) Successful in 31s
Rust Build / Check (pull_request) Successful in 31s
Rust Build / Test Suite (pull_request) Successful in 34s
Rust Build / Rustfmt (pull_request) Successful in 32s
Rust Build / Clippy (pull_request) Successful in 33s
Rust Build / build (pull_request) Successful in 31s
Reviewed-on: #68
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-11 22:14:10 +00:00
e3ca2c5781 Coverart save to filesystem (#67)
All checks were successful
Release Tagging / release (pull_request) Successful in 36s
Rust Build / Check (pull_request) Successful in 41s
Rust Build / Test Suite (pull_request) Successful in 43s
Rust Build / Rustfmt (pull_request) Successful in 32s
Rust Build / Clippy (pull_request) Successful in 2m12s
Rust Build / build (pull_request) Successful in 2m18s
Reviewed-on: #67
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-11 20:30:39 +00:00
440caca7c2 Moved to_data (#66)
Some checks failed
Rust Build / Check (pull_request) Successful in 33s
Release Tagging / release (pull_request) Successful in 36s
Rust Build / Test Suite (pull_request) Successful in 45s
Rust Build / Rustfmt (pull_request) Successful in 33s
Rust Build / Clippy (pull_request) Failing after 44s
Rust Build / build (pull_request) Successful in 1m7s
Reviewed-on: #66
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-11 20:11:39 +00:00
0c0b4ba7ca Merge pull request 'Song changes' (#60) from song_changes into main
Some checks failed
Rust Build / Check (push) Successful in 30s
Rust Build / Rustfmt (push) Successful in 33s
Rust Build / Test Suite (push) Successful in 39s
Rust Build / Clippy (push) Failing after 36s
Rust Build / build (push) Successful in 35s
Rust Build / Check (pull_request) Successful in 32s
Release Tagging / release (pull_request) Failing after 36s
Rust Build / Test Suite (pull_request) Successful in 34s
Rust Build / Rustfmt (pull_request) Successful in 32s
Rust Build / build (pull_request) Successful in 31s
Rust Build / Clippy (pull_request) Failing after 34s
Reviewed-on: #60
2025-10-11 19:49:52 +00:00
c263cedf28 Remove song (#64)
Some checks failed
Release Tagging / release (pull_request) Successful in 33s
Rust Build / Check (pull_request) Successful in 43s
Rust Build / Test Suite (pull_request) Successful in 44s
Rust Build / Rustfmt (pull_request) Successful in 32s
Rust Build / Clippy (pull_request) Failing after 32s
Rust Build / build (pull_request) Successful in 38s
Reviewed-on: #64
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-11 19:46:00 +00:00
0637a9432e Changes to how song filenames are generated (#63)
Some checks failed
Rust Build / Test Suite (pull_request) Successful in 35s
Rust Build / Check (pull_request) Successful in 38s
Release Tagging / release (pull_request) Successful in 48s
Rust Build / Rustfmt (pull_request) Failing after 33s
Rust Build / Clippy (pull_request) Successful in 34s
Rust Build / build (pull_request) Successful in 35s
Reviewed-on: #63
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-11 19:20:57 +00:00
d7c078d95a Song to_data change (#62)
All checks were successful
Rust Build / Check (pull_request) Successful in 35s
Release Tagging / release (pull_request) Successful in 43s
Rust Build / Test Suite (pull_request) Successful in 46s
Rust Build / Rustfmt (pull_request) Successful in 33s
Rust Build / build (pull_request) Successful in 33s
Rust Build / Clippy (pull_request) Successful in 50s
Reviewed-on: #62
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-11 19:02:01 +00:00
00cada74e2 Copy song (#61)
Some checks failed
Rust Build / Check (pull_request) Successful in 42s
Release Tagging / release (pull_request) Successful in 44s
Rust Build / Test Suite (pull_request) Failing after 1m2s
Rust Build / Rustfmt (pull_request) Successful in 30s
Rust Build / Clippy (pull_request) Successful in 36s
Rust Build / build (pull_request) Successful in 50s
Reviewed-on: #61
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-11 18:53:13 +00:00
9436c9033a Added todo
All checks were successful
Release Tagging / release (pull_request) Successful in 44s
Rust Build / Test Suite (pull_request) Successful in 49s
Rust Build / Check (pull_request) Successful in 57s
Rust Build / Rustfmt (pull_request) Successful in 29s
Rust Build / Clippy (pull_request) Successful in 47s
Rust Build / build (pull_request) Successful in 59s
2025-10-11 14:23:23 -04:00
85d8f839f1 Code formatting
All checks were successful
Rust Build / Test Suite (pull_request) Successful in 1m38s
Rust Build / Rustfmt (pull_request) Successful in 32s
Release Tagging / release (pull_request) Successful in 2m17s
Rust Build / Check (pull_request) Successful in 2m30s
Rust Build / Clippy (pull_request) Successful in 57s
Rust Build / build (pull_request) Successful in 1m1s
2025-10-11 14:19:45 -04:00
16f633d563 Added test 2025-10-11 14:19:30 -04:00
0b53eb8208 Added more todos 2025-10-11 14:19:21 -04:00
73c8fd2634 Tweaked some changes 2025-10-11 14:17:32 -04:00
fa8643e73a Added function to save song to the filesystem 2025-10-11 14:08:20 -04:00
2d6b550ae6 tsk-57: Adding derive Schema to models (#58)
All checks were successful
Rust Build / Check (push) Successful in 31s
Rust Build / Test Suite (push) Successful in 1m0s
Rust Build / Rustfmt (push) Successful in 31s
Rust Build / Clippy (push) Successful in 37s
Rust Build / build (push) Successful in 46s
Closes #57

Reviewed-on: #58
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-08-24 23:42:04 +00:00
f43bcaa314 Merge pull request 'Release' (#50) from devel into main
All checks were successful
Rust Build / Test Suite (push) Successful in 35s
Rust Build / Rustfmt (push) Successful in 1s
Rust Build / Check (push) Successful in 14s
Rust Build / build (push) Successful in 9s
Rust Build / Clippy (push) Successful in 52s
Reviewed-on: #50
2025-08-17 18:36:04 +00:00
a6ef7d8a62 Removed devel branch references (#56)
All checks were successful
Release Tagging / release (pull_request) Successful in 10s
Rust Build / Check (pull_request) Successful in 12s
Rust Build / Test Suite (pull_request) Successful in 1m3s
Rust Build / Rustfmt (pull_request) Successful in -6s
Rust Build / Clippy (pull_request) Successful in 9s
Rust Build / build (pull_request) Successful in 53s
Reviewed-on: #56
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-08-17 18:31:05 +00:00
bd793db08e Add Id to token (#55)
All checks were successful
Release Tagging / release (push) Successful in 39s
Rust Build / Check (push) Successful in 41s
Rust Build / Rustfmt (push) Successful in 36s
Rust Build / Test Suite (push) Successful in 37s
Rust Build / Clippy (push) Successful in 33s
Rust Build / build (push) Successful in 34s
Rust Build / Test Suite (pull_request) Successful in 31s
Rust Build / Check (pull_request) Successful in 33s
Rust Build / Clippy (pull_request) Successful in 31s
Rust Build / Rustfmt (pull_request) Successful in 32s
Rust Build / build (pull_request) Successful in 41s
Reviewed-on: #55
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-08-06 22:45:32 +00:00
569fb632e5 Merge pull request 'v0.5.X release' (#41) from devel into main
All checks were successful
Rust Build / Check (push) Successful in 26s
Rust Build / Test Suite (push) Successful in 30s
Rust Build / Rustfmt (push) Successful in 30s
Rust Build / Clippy (push) Successful in 31s
Rust Build / build (push) Successful in 27s
Reviewed-on: #41
2025-07-23 21:59:40 +00:00
6aa4c3d741 Merge pull request 'Next release' (#38) from devel into main
All checks were successful
Release Tagging / release (push) Successful in 42s
Rust Build / Check (push) Successful in 33s
Rust Build / Test Suite (push) Successful in 39s
Rust Build / Rustfmt (push) Successful in 31s
Rust Build / Clippy (push) Successful in 37s
Rust Build / build (push) Successful in 30s
Rust Build / Check (pull_request) Successful in 27s
Rust Build / Test Suite (pull_request) Successful in 25s
Rust Build / Rustfmt (pull_request) Successful in 25s
Rust Build / Clippy (pull_request) Successful in 27s
Rust Build / build (pull_request) Successful in 26s
Reviewed-on: #38
2025-04-10 23:49:19 +00:00
97853a42c1 Merge pull request 'workflow_tag_fix (#33)' (#34) from devel into main
All checks were successful
Release Tagging / release (push) Successful in 32s
Rust Build / Check (push) Successful in 28s
Rust Build / Test Suite (push) Successful in 32s
Rust Build / Rustfmt (push) Successful in 32s
Rust Build / Clippy (push) Successful in 30s
Rust Build / build (push) Successful in 33s
Reviewed-on: #34
2025-04-07 01:09:43 +00:00
fdae8056b1 Merge pull request 'Next release' (#30) from devel into main
All checks were successful
Rust Build / Check (push) Successful in 30s
Rust Build / Test Suite (push) Successful in 35s
Rust Build / Rustfmt (push) Successful in 29s
Rust Build / Clippy (push) Successful in 30s
Rust Build / build (push) Successful in 30s
Release Tagging / release (push) Successful in 34s
Reviewed-on: #30
2025-04-05 18:38:37 +00:00
24aa60cb48 Merge pull request 'Next release' (#25) from devel into main
All checks were successful
Rust Build / Check (push) Successful in 28s
Rust Build / Test Suite (push) Successful in 35s
Rust Build / Rustfmt (push) Successful in 28s
Rust Build / Clippy (push) Successful in 31s
Rust Build / build (push) Successful in 30s
Release Tagging / release (push) Successful in 34s
Reviewed-on: #25
2025-04-04 04:08:03 +00:00
d8eadb8187 Merge pull request 'v0.2.0 Release' (#20) from devel into main
Some checks failed
Rust Build / Check (push) Successful in 28s
Rust Build / Test Suite (push) Successful in 31s
Rust Build / Rustfmt (push) Successful in 31s
Rust Build / Clippy (push) Successful in 28s
Rust Build / build (push) Successful in 27s
Release Tagging / release (push) Failing after 34s
Reviewed-on: phoenix/icarus-models#20
2025-03-30 17:21:27 +00:00
2b2e96c02d Merge pull request 'devel' (#16) from devel into main
All checks were successful
Rust Build / Check (push) Successful in 26s
Rust Build / Test Suite (push) Successful in 26s
Rust Build / Rustfmt (push) Successful in 26s
Rust Build / Clippy (push) Successful in 26s
Rust Build / build (push) Successful in 26s
Release Tagging / release (push) Successful in 28s
Reviewed-on: phoenix/icarus-models#16
2025-03-22 21:24:15 +00:00
16 changed files with 859 additions and 407 deletions

View File

@@ -3,21 +3,24 @@ name: Release Tagging
on: on:
push: push:
branches: branches:
- devel - main
pull_request:
branches:
- main
jobs: jobs:
release: release:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v5
with: with:
fetch-depth: 0 # Important for git describe --tags fetch-depth: 0 # Important for git describe --tags
- name: Install Rust - name: Install Rust
uses: actions-rs/toolchain@v1 uses: actions-rs/toolchain@v1
with: with:
toolchain: 1.88.0 toolchain: 1.94
components: cargo components: cargo
- name: Extract Version from Cargo.toml - name: Extract Version from Cargo.toml
@@ -25,12 +28,15 @@ jobs:
run: | run: |
VERSION=$(grep '^version = "' Cargo.toml | sed -E 's/version = "([^"]+)"/\1/') VERSION=$(grep '^version = "' Cargo.toml | sed -E 's/version = "([^"]+)"/\1/')
PROJECT_COMMIT_HASH=$(git rev-parse HEAD | cut -c 1-10) PROJECT_COMMIT_HASH=$(git rev-parse HEAD | cut -c 1-10)
BRANCH_REF="${GITHUB_REF}" BRANCH_REF="${{ gitea.ref }}"
BRANCH_NAME=$(echo "$BRANCH_REF" | cut -d '/' -f 3) BRANCH_NAME=$(echo "$BRANCH_REF" | cut -d '/' -f 3)
PROJECT_TAG_RELEASE="v$VERSION-$BRANCH_NAME-$PROJECT_COMMIT_HASH" PROJECT_TAG_RELEASE="v$VERSION-$BRANCH_NAME-$PROJECT_COMMIT_HASH-111"
echo "::set-output name=project_tag_release::$PROJECT_TAG_RELEASE-111"
echo "::set-output name=project_tag_release::$PROJECT_TAG_RELEASE"
echo "Version: $VERSION" echo "Version: $VERSION"
echo "Hash: $PROJECT_COMMIT_HASH" echo "Hash: $PROJECT_COMMIT_HASH"
echo "Branh ref: $BRANCH_REF"
echo "Branch: $BRANCH_NAME" echo "Branch: $BRANCH_NAME"
echo "Tag Release: $PROJECT_TAG_RELEASE" echo "Tag Release: $PROJECT_TAG_RELEASE"

View File

@@ -4,41 +4,39 @@ on:
push: push:
branches: branches:
- main - main
- devel
pull_request: pull_request:
branches: branches:
- main - main
- devel
jobs: jobs:
check: check:
name: Check name: Check
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1 - uses: actions-rust-lang/setup-rust-toolchain@v1
with: with:
toolchain: 1.88.0 toolchain: 1.94
- run: cargo check - run: cargo check
test: test:
name: Test Suite name: Test Suite
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1 - uses: actions-rust-lang/setup-rust-toolchain@v1
with: with:
toolchain: 1.88.0 toolchain: 1.94
- run: cargo test - run: cargo test
fmt: fmt:
name: Rustfmt name: Rustfmt
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1 - uses: actions-rust-lang/setup-rust-toolchain@v1
with: with:
toolchain: 1.88.0 toolchain: 1.94
- run: rustup component add rustfmt - run: rustup component add rustfmt
- run: cargo fmt --all -- --check - run: cargo fmt --all -- --check
@@ -46,10 +44,10 @@ jobs:
name: Clippy name: Clippy
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1 - uses: actions-rust-lang/setup-rust-toolchain@v1
with: with:
toolchain: 1.88.0 toolchain: 1.94
- run: rustup component add clippy - run: rustup component add clippy
- run: cargo clippy -- -D warnings - run: cargo clippy -- -D warnings
@@ -57,10 +55,8 @@ jobs:
name: build name: build
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1 - uses: actions-rust-lang/setup-rust-toolchain@v1
with: with:
toolchain: 1.88.0 toolchain: 1.94
- run: cargo build - run: cargo build

583
Cargo.lock generated
View File

@@ -10,18 +10,18 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]] [[package]]
name = "aho-corasick" name = "aho-corasick"
version = "1.1.3" version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.98" version = "1.0.102"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]] [[package]]
name = "base64" name = "base64"
@@ -31,30 +31,31 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "2.9.0" version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
version = "3.19.0" version = "3.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.2.30" version = "1.2.57"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423"
dependencies = [ dependencies = [
"find-msvc-tools",
"shlex", "shlex",
] ]
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "1.0.0" version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]] [[package]]
name = "crc32fast" name = "crc32fast"
@@ -67,12 +68,12 @@ dependencies = [
[[package]] [[package]]
name = "deranged" name = "deranged"
version = "0.4.0" version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
dependencies = [ dependencies = [
"powerfmt", "powerfmt",
"serde", "serde_core",
] ]
[[package]] [[package]]
@@ -83,9 +84,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]] [[package]]
name = "errno" name = "errno"
version = "0.3.10" version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [ dependencies = [
"libc", "libc",
"windows-sys", "windows-sys",
@@ -98,15 +99,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]] [[package]]
name = "flate2" name = "find-msvc-tools"
version = "1.1.2" version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
[[package]]
name = "flate2"
version = "1.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
dependencies = [ dependencies = [
"crc32fast", "crc32fast",
"miniz_oxide", "miniz_oxide",
] ]
[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]] [[package]]
name = "foreign-types" name = "foreign-types"
version = "0.3.2" version = "0.3.2"
@@ -124,25 +137,53 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.3.2" version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"r-efi", "r-efi 5.3.0",
"wasi", "wasip2",
]
[[package]]
name = "getrandom"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
dependencies = [
"cfg-if",
"libc",
"r-efi 6.0.0",
"wasip2",
"wasip3",
] ]
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.15.4" version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
"foldhash",
]
[[package]]
name = "hashbrown"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]] [[package]]
name = "icarus_models" name = "icarus_models"
version = "0.5.4" version = "0.9.2"
dependencies = [ dependencies = [
"josekit", "josekit",
"rand", "rand",
@@ -150,24 +191,33 @@ dependencies = [
"serde_json", "serde_json",
"tempfile", "tempfile",
"time", "time",
"utoipa",
"uuid", "uuid",
] ]
[[package]] [[package]]
name = "indexmap" name = "id-arena"
version = "2.10.0" version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
[[package]]
name = "indexmap"
version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown 0.16.1",
"serde",
"serde_core",
] ]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.15" version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]] [[package]]
name = "josekit" name = "josekit"
@@ -188,37 +238,43 @@ dependencies = [
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.77" version = "0.3.91"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]] [[package]]
name = "libc" name = "leb128fmt"
version = "0.2.171" version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "libc"
version = "0.2.183"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
[[package]] [[package]]
name = "linux-raw-sys" name = "linux-raw-sys"
version = "0.9.3" version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.27" version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.7.4" version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]] [[package]]
name = "miniz_oxide" name = "miniz_oxide"
@@ -227,25 +283,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
dependencies = [ dependencies = [
"adler2", "adler2",
"simd-adler32",
] ]
[[package]] [[package]]
name = "num-conv" name = "num-conv"
version = "0.1.0" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050"
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.21.3" version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]] [[package]]
name = "openssl" name = "openssl"
version = "0.10.73" version = "0.10.76"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cfg-if", "cfg-if",
@@ -269,9 +326,9 @@ dependencies = [
[[package]] [[package]]
name = "openssl-sys" name = "openssl-sys"
version = "0.9.109" version = "0.9.112"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb"
dependencies = [ dependencies = [
"cc", "cc",
"libc", "libc",
@@ -301,34 +358,50 @@ dependencies = [
] ]
[[package]] [[package]]
name = "proc-macro2" name = "prettyplease"
version = "1.0.94" version = "0.2.37"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [
"proc-macro2",
"syn",
]
[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.40" version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "r-efi" name = "r-efi"
version = "5.2.0" version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "r-efi"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]] [[package]]
name = "rand" name = "rand"
version = "0.9.1" version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [ dependencies = [
"rand_chacha", "rand_chacha",
"rand_core", "rand_core",
@@ -346,18 +419,18 @@ dependencies = [
[[package]] [[package]]
name = "rand_core" name = "rand_core"
version = "0.9.3" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
dependencies = [ dependencies = [
"getrandom", "getrandom 0.3.4",
] ]
[[package]] [[package]]
name = "regex" name = "regex"
version = "1.11.1" version = "1.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
@@ -367,9 +440,9 @@ dependencies = [
[[package]] [[package]]
name = "regex-automata" name = "regex-automata"
version = "0.4.9" version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
@@ -378,15 +451,15 @@ dependencies = [
[[package]] [[package]]
name = "regex-syntax" name = "regex-syntax"
version = "0.8.5" version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
[[package]] [[package]]
name = "rustix" name = "rustix"
version = "1.0.3" version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"errno", "errno",
@@ -397,30 +470,40 @@ dependencies = [
[[package]] [[package]]
name = "rustversion" name = "rustversion"
version = "1.0.21" version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]] [[package]]
name = "ryu" name = "semver"
version = "1.0.20" version = "1.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.219" version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
dependencies = [
"serde_core",
"serde_derive",
]
[[package]]
name = "serde_core"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.219" version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -429,15 +512,16 @@ dependencies = [
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.140" version = "1.0.149"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"itoa", "itoa",
"memchr", "memchr",
"ryu",
"serde", "serde",
"serde_core",
"zmij",
] ]
[[package]] [[package]]
@@ -447,10 +531,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]] [[package]]
name = "syn" name = "simd-adler32"
version = "2.0.100" version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
[[package]]
name = "syn"
version = "2.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -459,12 +549,12 @@ dependencies = [
[[package]] [[package]]
name = "tempfile" name = "tempfile"
version = "3.20.0" version = "3.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
dependencies = [ dependencies = [
"fastrand", "fastrand",
"getrandom", "getrandom 0.4.2",
"once_cell", "once_cell",
"rustix", "rustix",
"windows-sys", "windows-sys",
@@ -472,18 +562,18 @@ dependencies = [
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "2.0.12" version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl",
] ]
[[package]] [[package]]
name = "thiserror-impl" name = "thiserror-impl"
version = "2.0.12" version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -492,30 +582,30 @@ dependencies = [
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.41" version = "0.3.47"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
dependencies = [ dependencies = [
"deranged", "deranged",
"itoa", "itoa",
"num-conv", "num-conv",
"powerfmt", "powerfmt",
"serde", "serde_core",
"time-core", "time-core",
"time-macros", "time-macros",
] ]
[[package]] [[package]]
name = "time-core" name = "time-core"
version = "0.1.4" version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
[[package]] [[package]]
name = "time-macros" name = "time-macros"
version = "0.2.22" version = "0.2.27"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
dependencies = [ dependencies = [
"num-conv", "num-conv",
"time-core", "time-core",
@@ -523,19 +613,49 @@ dependencies = [
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.18" version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "unicode-xid"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "utoipa"
version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993"
dependencies = [
"indexmap",
"serde",
"serde_json",
"utoipa-gen",
]
[[package]]
name = "utoipa-gen"
version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b"
dependencies = [
"proc-macro2",
"quote",
"syn",
"uuid",
]
[[package]] [[package]]
name = "uuid" name = "uuid"
version = "1.17.0" version = "1.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37"
dependencies = [ dependencies = [
"getrandom", "getrandom 0.4.2",
"js-sys", "js-sys",
"serde", "serde_core",
"wasm-bindgen", "wasm-bindgen",
] ]
@@ -546,45 +666,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]] [[package]]
name = "wasi" name = "wasip2"
version = "0.14.2+wasi-0.2.4" version = "1.0.2+wasi-0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
dependencies = [ dependencies = [
"wit-bindgen-rt", "wit-bindgen",
]
[[package]]
name = "wasip3"
version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
dependencies = [
"wit-bindgen",
] ]
[[package]] [[package]]
name = "wasm-bindgen" name = "wasm-bindgen"
version = "0.2.100" version = "0.2.114"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"once_cell", "once_cell",
"rustversion", "rustversion",
"wasm-bindgen-macro", "wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
dependencies = [
"bumpalo",
"log",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
[[package]] [[package]]
name = "wasm-bindgen-macro" name = "wasm-bindgen-macro"
version = "0.2.100" version = "0.2.114"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6"
dependencies = [ dependencies = [
"quote", "quote",
"wasm-bindgen-macro-support", "wasm-bindgen-macro-support",
@@ -592,124 +708,185 @@ dependencies = [
[[package]] [[package]]
name = "wasm-bindgen-macro-support" name = "wasm-bindgen-macro-support"
version = "0.2.100" version = "0.2.114"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3"
dependencies = [ dependencies = [
"bumpalo",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
[[package]] [[package]]
name = "wasm-bindgen-shared" name = "wasm-bindgen-shared"
version = "0.2.100" version = "0.2.114"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]] [[package]]
name = "windows-sys" name = "wasm-encoder"
version = "0.59.0" version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
dependencies = [ dependencies = [
"windows-targets", "leb128fmt",
"wasmparser",
] ]
[[package]] [[package]]
name = "windows-targets" name = "wasm-metadata"
version = "0.52.6" version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
dependencies = [ dependencies = [
"windows_aarch64_gnullvm", "anyhow",
"windows_aarch64_msvc", "indexmap",
"windows_i686_gnu", "wasm-encoder",
"windows_i686_gnullvm", "wasmparser",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
] ]
[[package]] [[package]]
name = "windows_aarch64_gnullvm" name = "wasmparser"
version = "0.52.6" version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "wit-bindgen-rt"
version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"hashbrown 0.15.5",
"indexmap",
"semver",
]
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
"windows-link",
]
[[package]]
name = "wit-bindgen"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
dependencies = [
"wit-bindgen-rust-macro",
]
[[package]]
name = "wit-bindgen-core"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
dependencies = [
"anyhow",
"heck",
"wit-parser",
]
[[package]]
name = "wit-bindgen-rust"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
dependencies = [
"anyhow",
"heck",
"indexmap",
"prettyplease",
"syn",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
]
[[package]]
name = "wit-bindgen-rust-macro"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
dependencies = [
"anyhow",
"prettyplease",
"proc-macro2",
"quote",
"syn",
"wit-bindgen-core",
"wit-bindgen-rust",
]
[[package]]
name = "wit-component"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
dependencies = [
"anyhow",
"bitflags",
"indexmap",
"log",
"serde",
"serde_derive",
"serde_json",
"wasm-encoder",
"wasm-metadata",
"wasmparser",
"wit-parser",
]
[[package]]
name = "wit-parser"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
dependencies = [
"anyhow",
"id-arena",
"indexmap",
"log",
"semver",
"serde",
"serde_derive",
"serde_json",
"unicode-xid",
"wasmparser",
] ]
[[package]] [[package]]
name = "zerocopy" name = "zerocopy"
version = "0.8.24" version = "0.8.47"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87"
dependencies = [ dependencies = [
"zerocopy-derive", "zerocopy-derive",
] ]
[[package]] [[package]]
name = "zerocopy-derive" name = "zerocopy-derive"
version = "0.8.24" version = "0.8.47"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn",
] ]
[[package]]
name = "zmij"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"

View File

@@ -1,18 +1,19 @@
[package] [package]
name = "icarus_models" name = "icarus_models"
version = "0.5.4" version = "0.9.2"
edition = "2024" edition = "2024"
rust-version = "1.88" rust-version = "1.90"
description = "models used for the icarus project" description = "models used for the icarus project"
license = "MIT" license = "MIT"
[dependencies] [dependencies]
serde = { version = "1.0.219", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] }
serde_json = { version = "1.0.140" } serde_json = { version = "1.0.145" }
rand = { version = "0.9.1" } rand = { version = "0.9.2" }
time = { version = "0.3.41", features = ["formatting", "macros", "parsing", "serde"] } time = { version = "0.3.44", features = ["formatting", "macros", "parsing", "serde"] }
uuid = { version = "1.17.0", features = ["v4", "serde"] } uuid = { version = "1.18.1", features = ["v4", "serde"] }
josekit = { version = "0.10.3" } josekit = { version = "0.10.3" }
utoipa = { version = "5.4.0", features = ["uuid", "time"] }
[dev-dependencies] [dev-dependencies]
tempfile = { version = "3.20.0" } tempfile = { version = "3.23.0" }

View File

@@ -1,2 +1,3 @@
A library containing commonly used models and functions that is used throughout A library containing commonly used structs, functions, enums, constants and other code
icarus projects. This reduces the amount of duplicated code without a benefit. that is used throughout the icarus projects. Code from this library serves as the model
for other projects in the icarus project.

View File

@@ -2,7 +2,7 @@ use std::default::Default;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Deserialize, Serialize, utoipa::ToSchema)]
pub struct AccessLevel { pub struct AccessLevel {
pub id: uuid::Uuid, pub id: uuid::Uuid,
pub level: String, pub level: String,

View File

@@ -12,3 +12,9 @@ pub mod file_extensions {
pub const PNGEXTENSION: &str = ".png"; pub const PNGEXTENSION: &str = ".png";
} }
} }
pub mod error {
pub const DIRECTORY_NOT_INITIALIZED: &str = "Directory has not been initialized";
pub const FILENAME_NOT_INITIALIZED: &str = "Filename has not bee initialized";
pub const LAST_CHARACTER_IN_DIRECTORY: &str = "Could not access last character of directory";
}

View File

@@ -1,39 +1,146 @@
use std::io::Read; use std::io::Write;
use serde::{Deserialize, Serialize}; use rand::Rng;
#[derive(Clone, Debug, Default, Deserialize, Serialize)] const FILENAME_LENGTH: i32 = 16;
#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize, utoipa::ToSchema)]
pub struct CoverArt { pub struct CoverArt {
pub id: uuid::Uuid, pub id: uuid::Uuid,
pub title: String, pub title: String,
#[serde(skip)] #[serde(skip)]
pub path: String, pub directory: String,
pub filename: String,
pub file_type: String,
#[serde(skip)] #[serde(skip)]
pub data: Vec<u8>, pub data: Vec<u8>,
pub song_id: uuid::Uuid, pub song_id: uuid::Uuid,
} }
pub mod init { pub mod init {
use crate::coverart::CoverArt; /// Initializes the CoverArt with just the directory and filename
pub fn init_coverart_dir_and_filename(directory: &str, filename: &str) -> super::CoverArt {
pub fn init_coverart_only_path(path: String) -> CoverArt { super::CoverArt {
CoverArt { directory: String::from(directory),
id: uuid::Uuid::nil(), filename: String::from(filename),
title: String::new(), ..Default::default()
path: path.clone(),
data: Vec::new(),
song_id: uuid::Uuid::nil(),
} }
} }
} }
impl CoverArt { impl CoverArt {
pub fn to_data(&self) -> Result<Vec<u8>, std::io::Error> { /// Saves the coverart to the filesystem
let path: &String = &self.path; pub fn save_to_filesystem(&self) -> Result<(), std::io::Error> {
let mut file = std::fs::File::open(path)?; match self.get_path() {
let mut buffer = Vec::new(); Ok(path) => match std::fs::File::create(&path) {
match file.read_to_end(&mut buffer) { Ok(mut file) => match file.write_all(&self.data) {
Ok(_) => Ok(buffer), Ok(_) => Ok(()),
Err(err) => Err(err),
},
Err(err) => Err(err),
},
Err(err) => Err(err),
}
}
/// Removes the coverart from the filesystem
pub fn remove_from_filesystem(&self) -> Result<(), std::io::Error> {
match self.get_path() {
Ok(path) => {
let p = std::path::Path::new(&path);
if p.exists() {
match std::fs::remove_file(p) {
Ok(_) => Ok(()),
Err(err) => Err(err),
}
} else {
Err(std::io::Error::other(
"Cannot delete file that does not exist",
))
}
}
Err(err) => Err(err),
}
}
/// Gets the path of the CoverArt
pub fn get_path(&self) -> Result<String, std::io::Error> {
if self.directory.is_empty() {
return Err(std::io::Error::other(
crate::constants::error::DIRECTORY_NOT_INITIALIZED,
));
} else if self.filename.is_empty() {
return Err(std::io::Error::other(
crate::constants::error::FILENAME_NOT_INITIALIZED,
));
}
let directory = &self.directory;
let last_index = directory.len() - 1;
match crate::util::concatenate_path(directory, &self.filename, last_index) {
Ok(path) => Ok(path),
Err(err) => Err(err),
}
}
}
/// Generates filename for a CoverArt
pub fn generate_filename(
typ: crate::types::CoverArtType,
randomize: bool,
) -> Result<String, std::io::Error> {
let file_extension = match typ {
crate::types::CoverArtType::PngExtension => {
String::from(crate::constants::file_extensions::image::PNGEXTENSION)
}
crate::types::CoverArtType::JpegExtension => {
String::from(crate::constants::file_extensions::image::JPEGEXTENSION)
}
crate::types::CoverArtType::JpgExtension => {
String::from(crate::constants::file_extensions::image::JPGEXTENSION)
}
crate::types::CoverArtType::None => {
return Err(std::io::Error::other("Unsupported CoverArtTypes"));
}
};
let filename: String = if randomize {
let mut filename: String = String::from("coverart-");
let some_chars: String = String::from("abcdefghij0123456789");
let some_chars_length = some_chars.len();
let mut rng = rand::rng();
for _ in 0..FILENAME_LENGTH {
let index = rng.random_range(0..=some_chars_length);
let rando_char = some_chars.chars().nth(index);
if let Some(c) = rando_char {
filename.push(c);
}
}
format!("{filename}{file_extension}")
} else {
format!("coverart-output{file_extension}")
};
Ok(filename)
}
pub mod io {
use std::io::Read;
/// Gets the raw data of the cover art
pub fn to_data(coverart: &super::CoverArt) -> Result<Vec<u8>, std::io::Error> {
match coverart.get_path() {
Ok(path) => {
let mut file = std::fs::File::open(path)?;
let mut buffer = Vec::new();
match file.read_to_end(&mut buffer) {
Ok(_) => Ok(buffer),
Err(err) => Err(err),
}
}
Err(err) => Err(err), Err(err) => Err(err),
} }
} }
@@ -45,9 +152,11 @@ mod tests {
#[test] #[test]
fn test_cover_art_image() { fn test_cover_art_image() {
let path: String = String::from("somepath"); let dir = String::from("./");
let coverart = coverart::init::init_coverart_only_path(path.clone()); let filename = String::from("CoverArt.png");
let coverart = coverart::init::init_coverart_dir_and_filename(&dir, &filename);
assert_eq!(path, coverart.path); assert_eq!(dir, coverart.directory);
assert_eq!(filename, coverart.filename);
} }
} }

View File

@@ -7,6 +7,7 @@ pub mod song;
pub mod token; pub mod token;
pub mod types; pub mod types;
pub mod user; pub mod user;
pub mod util;
pub mod init { pub mod init {
pub fn is_id_valid(num: &i32) -> bool { pub fn is_id_valid(num: &i32) -> bool {

View File

@@ -2,7 +2,7 @@ use std::default::Default;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)]
pub struct LoginResult { pub struct LoginResult {
pub id: uuid::Uuid, pub id: uuid::Uuid,
pub username: String, pub username: String,
@@ -12,20 +12,14 @@ pub struct LoginResult {
pub expiration: i64, pub expiration: i64,
} }
impl Default for LoginResult {
fn default() -> Self {
LoginResult {
id: uuid::Uuid::nil(),
username: String::new(),
token: String::new(),
token_type: String::new(),
expiration: -1,
}
}
}
impl LoginResult { impl LoginResult {
pub fn _to_json(&self) -> Result<String, serde_json::Error> { pub fn to_json(&self) -> Result<String, serde_json::Error> {
serde_json::to_string_pretty(&self) serde_json::to_string_pretty(&self)
} }
pub fn token_expired(&self) -> bool {
let current_time = time::OffsetDateTime::now_utc();
let expired = time::OffsetDateTime::from_unix_timestamp(self.expiration).unwrap();
current_time > expired
}
} }

View File

@@ -1,13 +1,16 @@
use std::io::Read; use std::io::Write;
use rand::Rng;
use serde::{Deserialize, Serialize};
use crate::constants; use crate::constants;
use crate::init; use crate::init;
use crate::types; use crate::types;
use rand::Rng; /// Length of characters of a filename to be generated
use serde::{Deserialize, Serialize}; const FILENAME_LENGTH: i32 = 16;
#[derive(Clone, Debug, Default, Deserialize, Serialize)] #[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)]
pub struct Song { pub struct Song {
#[serde(skip_serializing_if = "init::is_uuid_nil")] #[serde(skip_serializing_if = "init::is_uuid_nil")]
#[serde(alias = "id")] #[serde(alias = "id")]
@@ -36,8 +39,8 @@ pub struct Song {
pub track_count: i32, pub track_count: i32,
#[serde(skip_serializing_if = "String::is_empty")] #[serde(skip_serializing_if = "String::is_empty")]
pub audio_type: String, pub audio_type: String,
#[serde(skip_serializing_if = "String::is_empty")] #[serde(with = "time::serde::rfc3339::option")]
pub date_created: String, pub date_created: Option<time::OffsetDateTime>,
#[serde(skip_serializing_if = "String::is_empty")] #[serde(skip_serializing_if = "String::is_empty")]
pub filename: String, pub filename: String,
#[serde(skip_serializing_if = "init::is_uuid_nil")] #[serde(skip_serializing_if = "init::is_uuid_nil")]
@@ -66,34 +69,139 @@ impl Song {
} }
} }
/// Gets the path of a Song
pub fn song_path(&self) -> Result<String, std::io::Error> { pub fn song_path(&self) -> Result<String, std::io::Error> {
if self.directory.is_empty() { if self.directory.is_empty() {
return Err(std::io::Error::other("Directory does not exist")); return Err(std::io::Error::other(
crate::constants::error::DIRECTORY_NOT_INITIALIZED,
));
} else if self.filename.is_empty() {
return Err(std::io::Error::other(
crate::constants::error::FILENAME_NOT_INITIALIZED,
));
} }
let directory = &self.directory; let directory = &self.directory;
let mut buffer: String = directory.clone();
let last_index = directory.len() - 1; let last_index = directory.len() - 1;
if let Some(character) = directory.chars().nth(last_index) { match crate::util::concatenate_path(directory, &self.filename, last_index) {
if character != '/' { Ok(path) => Ok(path),
buffer += "/"; Err(err) => Err(err),
}
buffer += &self.filename.clone();
Ok(buffer)
} else {
Err(std::io::Error::other(
"Could not access last character of directory",
))
} }
} }
pub fn to_data(&self) -> Result<Vec<u8>, std::io::Error> { /// Saves the song to the filesystem using the song's data
let path_result = self.song_path(); pub fn save_to_filesystem(&self) -> Result<(), std::io::Error> {
match self.song_path() {
Ok(song_path) => match std::fs::File::create(&song_path) {
Ok(mut file) => match file.write_all(&self.data) {
Ok(_res) => Ok(()),
Err(err) => Err(err),
},
Err(err) => Err(err),
},
Err(err) => Err(err),
}
}
match path_result { /// Removes the song from the filesystem
pub fn remove_from_filesystem(&self) -> Result<(), std::io::Error> {
match self.song_path() {
Ok(song_path) => {
let p = std::path::Path::new(&song_path);
if p.exists() {
match std::fs::remove_file(p) {
Ok(_) => Ok(()),
Err(err) => Err(err),
}
} else {
Err(std::io::Error::other(
"Cannot delete file that does not exist",
))
}
}
Err(err) => Err(err),
}
}
}
/// Generates a filename. In order to save a song to the filesystem
pub fn generate_filename(typ: types::MusicType, randomize: bool) -> Result<String, std::io::Error> {
let file_extension = match typ {
types::MusicType::DefaultMusicExtension => {
String::from(constants::file_extensions::audio::DEFAULTMUSICEXTENSION)
}
types::MusicType::WavExtension => {
String::from(constants::file_extensions::audio::WAVEXTENSION)
}
types::MusicType::FlacExtension => {
String::from(constants::file_extensions::audio::FLACEXTENSION)
}
types::MusicType::MPThreeExtension => {
String::from(constants::file_extensions::audio::MPTHREEEXTENSION)
}
types::MusicType::None => return Err(std::io::Error::other("Unsupported MusicTypes")),
};
let filename: String = if randomize {
let mut filename: String = String::from("track-");
let some_chars: String = String::from("abcdefghij0123456789");
let some_chars_length = some_chars.len();
let mut rng = rand::rng();
for _ in 0..FILENAME_LENGTH {
let index = rng.random_range(0..=some_chars_length);
let rando_char = some_chars.chars().nth(index);
if let Some(c) = rando_char {
filename.push(c);
}
}
format!("{filename}{file_extension}")
} else {
format!("track-output{file_extension}")
};
Ok(filename)
}
/// I/O operations for songs
pub mod io {
use std::io::Read;
/// Copies a song using the source song's data
pub fn copy_song(
song_source: &super::Song,
song_target: &mut super::Song,
) -> Result<(), std::io::Error> {
match song_target.song_path() {
Ok(songpath) => {
let p = std::path::Path::new(&songpath);
if p.exists() {
Err(std::io::Error::other(
"Cannot copy song over to one that already exists",
))
} else {
if song_target.data.is_empty() {
song_target.data = song_source.data.clone();
} else {
song_target.data.clear();
song_target.data = song_source.data.clone();
}
match song_target.save_to_filesystem() {
Ok(_) => Ok(()),
Err(err) => Err(err),
}
}
}
Err(err) => Err(err),
}
}
/// Gets the raw file data of a song from the filesystem
pub fn to_data(song: &super::Song) -> Result<Vec<u8>, std::io::Error> {
match song.song_path() {
Ok(path) => { Ok(path) => {
let mut file = std::fs::File::open(path)?; let mut file = std::fs::File::open(path)?;
let mut buffer: Vec<u8> = Vec::new(); let mut buffer: Vec<u8> = Vec::new();
@@ -108,46 +216,4 @@ impl Song {
Err(er) => Err(er), Err(er) => Err(er),
} }
} }
pub fn generate_filename(&self, typ: types::MusicTypes, randomize: bool) -> String {
let mut filename: String = String::new();
let filename_len = 10;
let file_extension = match typ {
types::MusicTypes::DefaultMusicExtension => {
String::from(constants::file_extensions::audio::DEFAULTMUSICEXTENSION)
}
types::MusicTypes::WavExtension => {
String::from(constants::file_extensions::audio::WAVEXTENSION)
}
types::MusicTypes::FlacExtension => {
String::from(constants::file_extensions::audio::FLACEXTENSION)
}
types::MusicTypes::MPThreeExtension => {
String::from(constants::file_extensions::audio::MPTHREEEXTENSION)
}
};
if randomize {
let some_chars: String = String::from("abcdefghij0123456789");
let mut rng = rand::rng();
for _i in 0..filename_len {
let random_number: i32 = rng.random_range(0..=19);
let index = random_number as usize;
let rando_char = some_chars.chars().nth(index);
if let Some(c) = rando_char {
filename.push(c);
}
}
} else {
filename += "track-output";
}
filename += &file_extension;
filename
}
} }

View File

@@ -1,8 +1,8 @@
use std::default::Default; use std::default::Default;
use serde::{Deserialize, Serialize}; use serde::Deserialize;
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Default, Deserialize, serde::Serialize)]
pub struct Token { pub struct Token {
pub scope: String, pub scope: String,
pub expiration: i64, pub expiration: i64,
@@ -11,7 +11,7 @@ pub struct Token {
pub issued: i64, pub issued: i64,
} }
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Deserialize, serde::Serialize)]
pub struct AccessToken { pub struct AccessToken {
#[serde(alias = "init::is_uuid_nil")] #[serde(alias = "init::is_uuid_nil")]
pub user_id: uuid::Uuid, pub user_id: uuid::Uuid,
@@ -27,23 +27,31 @@ pub struct AccessToken {
pub message: String, pub message: String,
} }
impl Default for Token { #[derive(Clone, Debug, serde::Serialize, Deserialize)]
fn default() -> Self { pub struct UserClaims {
Token { pub iss: String,
scope: String::new(), pub aud: String, // Audience
expiration: -1, pub sub: String, // Subject (user ID)
audience: String::new(), #[serde(deserialize_with = "deserialize_i64_from_f64")]
issuer: String::new(), pub exp: i64, // Expiration time (UTC timestamp)
issued: -1, #[serde(deserialize_with = "deserialize_i64_from_f64")]
} pub iat: i64, // Issued at (UTC timestamp)
} // pub azp: String,
// pub gty: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub roles: Option<Vec<String>>, // Optional roles
} }
impl AccessToken { impl AccessToken {
/// Get the token fit for Bearer authentication
pub fn bearer_token(&self) -> String { pub fn bearer_token(&self) -> String {
let mut token: String = String::from("Bearer "); format!("Bearer {}", self.token)
token += &self.token.clone(); }
token
pub fn token_expired(&self) -> bool {
let current_time = time::OffsetDateTime::now_utc();
let expired = time::OffsetDateTime::from_unix_timestamp(self.expiration).unwrap();
current_time > expired
} }
} }
@@ -52,9 +60,10 @@ impl Token {
serde_json::to_string_pretty(&self) serde_json::to_string_pretty(&self)
} }
// TODO: Implement
pub fn token_expired(&self) -> bool { pub fn token_expired(&self) -> bool {
false let current_time = time::OffsetDateTime::now_utc();
let expired = time::OffsetDateTime::from_unix_timestamp(self.expiration).unwrap();
current_time > expired
} }
pub fn contains_scope(&self, des_scope: &String) -> bool { pub fn contains_scope(&self, des_scope: &String) -> bool {
@@ -62,6 +71,25 @@ impl Token {
} }
} }
fn deserialize_i64_from_f64<'de, D>(deserializer: D) -> Result<i64, D::Error>
where
D: serde::Deserializer<'de>,
{
let val = f64::deserialize(deserializer)?;
// Handle NaN and infinity cases
if val.is_nan() || val.is_infinite() {
return Err(serde::de::Error::custom("invalid float value"));
}
// Round to nearest integer and convert
let rounded = val.round();
// Check if the rounded value can fit in i64
if rounded < (i64::MIN as f64) || rounded > (i64::MAX as f64) {
Err(serde::de::Error::custom("float out of i64 range"))
} else {
Ok(rounded as i64)
}
}
pub fn get_issued() -> time::Result<time::OffsetDateTime> { pub fn get_issued() -> time::Result<time::OffsetDateTime> {
Ok(time::OffsetDateTime::now_utc()) Ok(time::OffsetDateTime::now_utc())
} }
@@ -80,6 +108,7 @@ pub struct TokenResource {
pub message: String, pub message: String,
pub issuer: String, pub issuer: String,
pub audiences: Vec<String>, pub audiences: Vec<String>,
pub id: uuid::Uuid,
} }
pub const TOKEN_TYPE: &str = "JWT"; pub const TOKEN_TYPE: &str = "JWT";
@@ -99,6 +128,14 @@ pub fn create_token(
payload.set_subject(message); payload.set_subject(message);
payload.set_issuer(issuer); payload.set_issuer(issuer);
payload.set_audience(audiences.clone()); payload.set_audience(audiences.clone());
if !token_resource.id.is_nil() {
match payload.set_claim("id", Some(serde_json::json!(token_resource.id))) {
Ok(_) => {}
Err(err) => {
return Err(err);
}
}
}
match get_issued() { match get_issued() {
Ok(issued) => { Ok(issued) => {
let expire = issued + duration; let expire = issued + duration;
@@ -121,6 +158,19 @@ pub fn create_token(
mod tests { mod tests {
use super::*; use super::*;
fn test_key() -> String {
String::from("c3092urmc2219ix320i40m293ic29IM09IN0u879Y8B98YB8yb86TN7B55R4yv4RCVU6Bi8YO8U")
}
fn test_resource() -> TokenResource {
TokenResource {
issuer: String::from("icarus_auth_test"),
message: String::from("Authorization"),
audiences: vec![String::from("icarus_test")],
id: uuid::Uuid::nil(),
}
}
#[test] #[test]
fn test_token_scope_check() { fn test_token_scope_check() {
let mut token = Token::default(); let mut token = Token::default();
@@ -138,14 +188,29 @@ mod tests {
#[test] #[test]
fn test_token_creation() { fn test_token_creation() {
let key = String::from( let key = test_key();
"c3092urmc2219ix320i40m293ic29IM09IN0u879Y8B98YB8yb86TN7B55R4yv4RCVU6Bi8YO8U", let test_token_resource = test_resource();
); let token_expiration_duration = time::Duration::hours(2);
let test_token_resource = TokenResource {
issuer: String::from("icarus_auth_test"), match create_token(&key, &test_token_resource, token_expiration_duration) {
message: String::from("Authorization"), Ok((token, expire_duration)) => {
audiences: vec![String::from("icarus_test")], assert_eq!(false, token.is_empty(), "Error: Token is empty");
}; assert!(
expire_duration > 0,
"Token expire duration is invalid {expire_duration:?}"
);
}
Err(err) => {
assert!(false, "Error: {err:?}");
}
}
}
#[test]
fn test_token_creation_with_id() {
let key = test_key();
let mut test_token_resource = test_resource();
test_token_resource.id = uuid::Uuid::new_v4();
let token_expiration_duration = time::Duration::hours(2); let token_expiration_duration = time::Duration::hours(2);
match create_token(&key, &test_token_resource, token_expiration_duration) { match create_token(&key, &test_token_resource, token_expiration_duration) {

View File

@@ -1,6 +1,16 @@
pub enum MusicTypes { #[derive(Debug)]
pub enum MusicType {
DefaultMusicExtension, DefaultMusicExtension,
WavExtension, WavExtension,
FlacExtension, FlacExtension,
MPThreeExtension, MPThreeExtension,
None,
}
#[derive(Debug)]
pub enum CoverArtType {
PngExtension,
JpegExtension,
JpgExtension,
None,
} }

View File

@@ -4,7 +4,7 @@ use crate::init;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Deserialize, Serialize, utoipa::ToSchema)]
pub struct User { pub struct User {
#[serde(skip_serializing_if = "init::is_uuid_nil")] #[serde(skip_serializing_if = "init::is_uuid_nil")]
pub id: uuid::Uuid, pub id: uuid::Uuid,

19
src/util/mod.rs Normal file
View File

@@ -0,0 +1,19 @@
pub fn concatenate_path(
directory: &str,
filename: &str,
last_index: usize,
) -> Result<String, std::io::Error> {
if let Some(character) = directory.chars().nth(last_index) {
let buffer: String = if character != '/' {
format!("{directory}/")
} else {
String::from(directory)
};
Ok(format!("{buffer}{filename}"))
} else {
Err(std::io::Error::other(
crate::constants::error::LAST_CHARACTER_IN_DIRECTORY,
))
}
}

View File

@@ -30,16 +30,12 @@ mod utils {
#[cfg(test)] #[cfg(test)]
mod song_tests { mod song_tests {
use std::fs::File;
use std::io::Write;
use tempfile::tempdir; use tempfile::tempdir;
use crate::utils;
use icarus_models::song; use icarus_models::song;
use icarus_models::types; use icarus_models::types;
use crate::utils;
#[test] #[test]
fn test_song_to_data() { fn test_song_to_data() {
println!("Test"); println!("Test");
@@ -65,7 +61,7 @@ mod song_tests {
Ok(buffer) => { Ok(buffer) => {
assert_eq!(buffer.is_empty(), false); assert_eq!(buffer.is_empty(), false);
match song.to_data() { match song::io::to_data(&song) {
Ok(song_data) => { Ok(song_data) => {
println!("Both files match"); println!("Both files match");
assert_eq!(buffer, song_data); assert_eq!(buffer, song_data);
@@ -103,50 +99,56 @@ mod song_tests {
song.directory = utils::get_tests_directory(); song.directory = utils::get_tests_directory();
song.filename = String::from("track01.flac"); song.filename = String::from("track01.flac");
match song.song_path() { let mut song_cpy = song.clone();
Ok(songpath) => match utils::extract_data_from_file(&songpath) { let temp_dir = tempdir().expect("Failed to create temp dir");
Ok(buffer) => { song_cpy.directory = match temp_dir.path().to_str() {
let mut song_cpy = song.clone(); Some(s) => String::from(s),
let temp_dir = tempdir().expect("Failed to create temp dir"); None => String::new(),
song_cpy.directory = match temp_dir.path().to_str() { };
Some(s) => String::from(s),
None => String::new(),
};
assert_eq!(song.directory.is_empty(), false); assert_eq!(song.directory.is_empty(), false);
song_cpy.filename = match song::generate_filename(types::MusicType::FlacExtension, true) {
song.generate_filename(types::MusicTypes::FlacExtension, true); Ok(filename) => {
println!("Directory: {:?}", song_cpy.directory); song_cpy.filename = filename;
println!("File to be created: {:?}", song_cpy.filename); }
Err(err) => {
assert!(false, "Error generatig filename: {err:?}");
}
};
println!("Directory: {:?}", song_cpy.directory);
println!("File to be created: {:?}", song_cpy.filename);
let path = match song_cpy.song_path() { match song::io::copy_song(&song, &mut song_cpy) {
Ok(s_path) => s_path, Ok(_) => {
Err(err) => { println!("Song copied");
assert!(false, "Error: {:?}", err); }
String::new() Err(err) => {
} assert!(false, "Error copying song: Error: {err:?}")
}; }
}
}
match File::create(path) { #[test]
Ok(mut file_cpy) => match file_cpy.write_all(&buffer) { fn test_save_song_to_filesystem_and_remove() {
Ok(success) => { let mut song = song::Song::default();
println!("Success: {:?}", success); song.directory = utils::get_tests_directory();
} song.filename = String::from("track02.flac");
Err(err) => {
assert!(false, "Error saving file: {:?}", err); let mut copied_song = song::Song {
} directory: utils::get_tests_directory(),
}, filename: String::from("track02-coppied.flac"),
Err(err) => { ..Default::default()
assert!(false, "Error: {:?}", err); };
}
}; match song::io::copy_song(&song, &mut copied_song) {
} Ok(_) => match copied_song.remove_from_filesystem() {
Ok(_) => {}
Err(err) => { Err(err) => {
assert!(false, "Error: {:?}", err); assert!(false, "Error: {err:?}")
} }
}, },
Err(err) => { Err(err) => {
assert!(false, "Error extracting song data: {:?}", err); assert!(false, "Error: {err:?}")
} }
} }
} }
@@ -154,7 +156,6 @@ mod song_tests {
#[cfg(test)] #[cfg(test)]
mod album_tests { mod album_tests {
use crate::utils; use crate::utils;
use icarus_models::album; use icarus_models::album;