Compare commits

..

3 Commits

Author SHA1 Message Date
f0a716b243 Updated checkout in workflows
All checks were successful
Rust Build / Check (pull_request) Successful in 57s
Rust Build / Test Suite (pull_request) Successful in 35s
Release Tagging / release (pull_request) Successful in 1m51s
Rust Build / Rustfmt (pull_request) Successful in 33s
Rust Build / build (pull_request) Successful in 58s
Rust Build / Clippy (pull_request) Successful in 1m24s
2025-10-12 16:38:18 -04:00
93ca002dc0 Version bump
All checks were successful
Release Tagging / release (pull_request) Successful in 37s
Rust Build / Check (pull_request) Successful in 1m8s
Rust Build / Test Suite (pull_request) Successful in 1m4s
Rust Build / Rustfmt (pull_request) Successful in 33s
Rust Build / build (pull_request) Successful in 51s
Rust Build / Clippy (pull_request) Successful in 58s
2025-10-12 16:36:42 -04:00
daaa224eee Updated rust version in workflows and cargo 2025-10-12 16:35:52 -04:00
14 changed files with 134 additions and 239 deletions

View File

@@ -1,7 +1,7 @@
name: Release Tagging name: Release Tagging
on: on:
push: pull_request:
branches: branches:
- main - main
@@ -25,15 +25,12 @@ 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="${{ gitea.ref }}" BRANCH_REF="${GITHUB_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-111" PROJECT_TAG_RELEASE="v$VERSION-$BRANCH_NAME-$PROJECT_COMMIT_HASH"
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

@@ -60,3 +60,5 @@ jobs:
with: with:
toolchain: 1.90.0 toolchain: 1.90.0
- run: cargo build - run: cargo build

53
Cargo.lock generated
View File

@@ -31,9 +31,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "2.10.0" version = "2.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
@@ -53,9 +53,9 @@ dependencies = [
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "1.0.4" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
[[package]] [[package]]
name = "crc32fast" name = "crc32fast"
@@ -131,14 +131,14 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.3.4" version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"r-efi", "r-efi",
"wasip2", "wasi",
] ]
[[package]] [[package]]
@@ -149,7 +149,7 @@ checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
[[package]] [[package]]
name = "icarus_models" name = "icarus_models"
version = "0.8.4" version = "0.7.0"
dependencies = [ dependencies = [
"josekit", "josekit",
"rand", "rand",
@@ -163,9 +163,9 @@ dependencies = [
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.12.0" version = "2.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown",
@@ -254,9 +254,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]] [[package]]
name = "openssl" name = "openssl"
version = "0.10.74" version = "0.10.73"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cfg-if", "cfg-if",
@@ -280,9 +280,9 @@ dependencies = [
[[package]] [[package]]
name = "openssl-sys" name = "openssl-sys"
version = "0.9.110" version = "0.9.109"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
dependencies = [ dependencies = [
"cc", "cc",
"libc", "libc",
@@ -366,9 +366,9 @@ dependencies = [
[[package]] [[package]]
name = "regex" name = "regex"
version = "1.12.2" version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" checksum = "4a52d8d02cacdb176ef4678de6c052efb4b3da14b78e4db683a4252762be5433"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
@@ -378,9 +378,9 @@ dependencies = [
[[package]] [[package]]
name = "regex-automata" name = "regex-automata"
version = "0.4.13" version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" checksum = "722166aa0d7438abbaa4d5cc2c649dac844e8c56d82fb3d33e9c34b5cd268fc6"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
@@ -389,9 +389,9 @@ dependencies = [
[[package]] [[package]]
name = "regex-syntax" name = "regex-syntax"
version = "0.8.8" version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" checksum = "c3160422bbd54dd5ecfdca71e5fd59b7b8fe2b1697ab2baf64f6d05dcc66d298"
[[package]] [[package]]
name = "rustix" name = "rustix"
@@ -476,9 +476,9 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.107" version = "2.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -597,6 +597,15 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "wasi"
version = "0.14.7+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
dependencies = [
"wasip2",
]
[[package]] [[package]]
name = "wasip2" name = "wasip2"
version = "1.0.1+wasi-0.2.4" version = "1.0.1+wasi-0.2.4"

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "icarus_models" name = "icarus_models"
version = "0.8.4" version = "0.7.0"
edition = "2024" edition = "2024"
rust-version = "1.90" rust-version = "1.90"
description = "models used for the icarus project" description = "models used for the icarus project"

View File

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

View File

@@ -12,9 +12,3 @@ 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,28 +1,28 @@
use std::io::Write; use std::io::Write;
use rand::Rng; use serde::{Deserialize, Serialize};
const FILENAME_LENGTH: i32 = 16; #[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)]
#[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 directory: String, pub path: String,
pub filename: 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 {
/// Initializes the CoverArt with just the directory and filename use crate::coverart::CoverArt;
pub fn init_coverart_dir_and_filename(directory: &str, filename: &str) -> super::CoverArt {
super::CoverArt { pub fn init_coverart_only_path(path: String) -> CoverArt {
directory: String::from(directory), CoverArt {
filename: String::from(filename), id: uuid::Uuid::nil(),
..Default::default() title: String::new(),
path: path.clone(),
data: Vec::new(),
song_id: uuid::Uuid::nil(),
} }
} }
} }
@@ -30,23 +30,18 @@ pub mod init {
impl CoverArt { impl CoverArt {
/// Saves the coverart to the filesystem /// Saves the coverart to the filesystem
pub fn save_to_filesystem(&self) -> Result<(), std::io::Error> { pub fn save_to_filesystem(&self) -> Result<(), std::io::Error> {
match self.get_path() { match std::fs::File::create(&self.path) {
Ok(path) => match std::fs::File::create(&path) {
Ok(mut file) => match file.write_all(&self.data) { Ok(mut file) => match file.write_all(&self.data) {
Ok(_) => Ok(()), Ok(_) => Ok(()),
Err(err) => Err(err), Err(err) => Err(err),
}, },
Err(err) => Err(err), Err(err) => Err(err),
},
Err(err) => Err(err),
} }
} }
/// Removes the coverart from the filesystem /// Removes the coverart from the filesystem
pub fn remove_from_filesystem(&self) -> Result<(), std::io::Error> { pub fn remove_from_filesystem(&self) -> Result<(), std::io::Error> {
match self.get_path() { let p = std::path::Path::new(&self.path);
Ok(path) => {
let p = std::path::Path::new(&path);
if p.exists() { if p.exists() {
match std::fs::remove_file(p) { match std::fs::remove_file(p) {
Ok(_) => Ok(()), Ok(_) => Ok(()),
@@ -58,72 +53,6 @@ impl CoverArt {
)) ))
} }
} }
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::CoverArtTypes,
randomize: bool,
) -> Result<String, std::io::Error> {
let file_extension = match typ {
crate::types::CoverArtTypes::PngExtension => {
String::from(crate::constants::file_extensions::image::PNGEXTENSION)
}
crate::types::CoverArtTypes::JpegExtension => {
String::from(crate::constants::file_extensions::image::JPEGEXTENSION)
}
crate::types::CoverArtTypes::JpgExtension => {
String::from(crate::constants::file_extensions::image::JPGEXTENSION)
}
crate::types::CoverArtTypes::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 { pub mod io {
@@ -131,8 +60,7 @@ pub mod io {
/// Gets the raw data of the cover art /// Gets the raw data of the cover art
pub fn to_data(coverart: &super::CoverArt) -> Result<Vec<u8>, std::io::Error> { pub fn to_data(coverart: &super::CoverArt) -> Result<Vec<u8>, std::io::Error> {
match coverart.get_path() { let path: &String = &coverart.path;
Ok(path) => {
let mut file = std::fs::File::open(path)?; let mut file = std::fs::File::open(path)?;
let mut buffer = Vec::new(); let mut buffer = Vec::new();
match file.read_to_end(&mut buffer) { match file.read_to_end(&mut buffer) {
@@ -140,9 +68,6 @@ pub mod io {
Err(err) => Err(err), Err(err) => Err(err),
} }
} }
Err(err) => Err(err),
}
}
} }
#[cfg(test)] #[cfg(test)]
@@ -151,11 +76,9 @@ mod tests {
#[test] #[test]
fn test_cover_art_image() { fn test_cover_art_image() {
let dir = String::from("./"); let path: String = String::from("somepath");
let filename = String::from("CoverArt.png"); let coverart = coverart::init::init_coverart_only_path(path.clone());
let coverart = coverart::init::init_coverart_dir_and_filename(&dir, &filename);
assert_eq!(dir, coverart.directory); assert_eq!(path, coverart.path);
assert_eq!(filename, coverart.filename);
} }
} }

View File

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

View File

@@ -39,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(with = "time::serde::rfc3339::option")] #[serde(skip_serializing_if = "String::is_empty")]
pub date_created: Option<time::OffsetDateTime>, pub date_created: String,
#[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")]
@@ -69,24 +69,27 @@ 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( return Err(std::io::Error::other("Directory does not exist"));
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;
match crate::util::concatenate_path(directory, &self.filename, last_index) { if let Some(character) = directory.chars().nth(last_index) {
Ok(path) => Ok(path), if character != '/' {
Err(err) => Err(err), buffer += "/";
}
buffer += &self.filename.clone();
Ok(buffer)
} else {
Err(std::io::Error::other(
"Could not access last character of directory",
))
} }
} }
@@ -125,15 +128,14 @@ impl Song {
} }
} }
/// Generates a filename. In order to save a song to the filesystem /// Generates a filename. In order to save a song to the filesystem, the song must have
pub fn generate_filename( /// a directory and filename
typ: types::MusicTypes, pub fn generate_filename(typ: types::MusicTypes, randomize: bool) -> String {
randomize: bool,
) -> Result<String, std::io::Error> {
let file_extension = match typ { let file_extension = match typ {
types::MusicTypes::DefaultMusicExtension => { types::MusicTypes::DefaultMusicExtension => {
String::from(constants::file_extensions::audio::DEFAULTMUSICEXTENSION) String::from(constants::file_extensions::audio::DEFAULTMUSICEXTENSION)
} }
types::MusicTypes::WavExtension => { types::MusicTypes::WavExtension => {
String::from(constants::file_extensions::audio::WAVEXTENSION) String::from(constants::file_extensions::audio::WAVEXTENSION)
} }
@@ -143,29 +145,25 @@ pub fn generate_filename(
types::MusicTypes::MPThreeExtension => { types::MusicTypes::MPThreeExtension => {
String::from(constants::file_extensions::audio::MPTHREEEXTENSION) String::from(constants::file_extensions::audio::MPTHREEEXTENSION)
} }
types::MusicTypes::None => return Err(std::io::Error::other("Unsupported MusicTypes")),
}; };
let filename: String = if randomize { if randomize {
let mut filename: String = String::from("track-"); let mut filename: String = String::new();
let some_chars: String = String::from("abcdefghij0123456789"); let some_chars: String = String::from("abcdefghij0123456789");
let some_chars_length = some_chars.len();
let mut rng = rand::rng(); let mut rng = rand::rng();
for _ in 0..FILENAME_LENGTH { for _ in 0..FILENAME_LENGTH {
let index = rng.random_range(0..=some_chars_length); let index = rng.random_range(0..=19);
let rando_char = some_chars.chars().nth(index); let rando_char = some_chars.chars().nth(index);
if let Some(c) = rando_char { if let Some(c) = rando_char {
filename.push(c); filename.push(c);
} }
} }
format!("{filename}{file_extension}") filename + &file_extension
} else { } else {
format!("track-output{file_extension}") "track-output".to_string() + &file_extension
}; }
Ok(filename)
} }
/// I/O operations for songs /// I/O operations for songs

View File

@@ -2,7 +2,7 @@ use std::default::Default;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)] #[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Token { pub struct Token {
pub scope: String, pub scope: String,
pub expiration: i64, pub expiration: i64,
@@ -27,16 +27,23 @@ pub struct AccessToken {
pub message: String, pub message: String,
} }
impl AccessToken { impl Default for Token {
/// Get the token fit for Bearer authentication fn default() -> Self {
pub fn bearer_token(&self) -> String { Token {
format!("Bearer {}", self.token) scope: String::new(),
expiration: -1,
audience: String::new(),
issuer: String::new(),
issued: -1,
}
}
} }
pub fn token_expired(&self) -> bool { impl AccessToken {
let current_time = time::OffsetDateTime::now_utc(); pub fn bearer_token(&self) -> String {
let expired = time::OffsetDateTime::from_unix_timestamp(self.expiration).unwrap(); let mut token: String = String::from("Bearer ");
current_time > expired token += &self.token.clone();
token
} }
} }
@@ -45,10 +52,9 @@ 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 {
let current_time = time::OffsetDateTime::now_utc(); false
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 {

View File

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

View File

@@ -1,19 +0,0 @@
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

@@ -107,21 +107,12 @@ mod song_tests {
}; };
assert_eq!(song.directory.is_empty(), false); assert_eq!(song.directory.is_empty(), false);
match song::generate_filename(types::MusicTypes::FlacExtension, true) { song_cpy.filename = song::generate_filename(types::MusicTypes::FlacExtension, true);
Ok(filename) => {
song_cpy.filename = filename;
}
Err(err) => {
assert!(false, "Error generatig filename: {err:?}");
}
};
println!("Directory: {:?}", song_cpy.directory); println!("Directory: {:?}", song_cpy.directory);
println!("File to be created: {:?}", song_cpy.filename); println!("File to be created: {:?}", song_cpy.filename);
match song::io::copy_song(&song, &mut song_cpy) { match song::io::copy_song(&song, &mut song_cpy) {
Ok(_) => { Ok(_) => {}
println!("Song copied");
}
Err(err) => { Err(err) => {
assert!(false, "Error copying song: Error: {err:?}") assert!(false, "Error copying song: Error: {err:?}")
} }