All checks were successful
Release Tagging / release (push) Successful in 29s
Rust Build / Check (push) Successful in 26s
Rust Build / Test Suite (push) Successful in 26s
Rust Build / Rustfmt (push) Successful in 33s
Rust Build / Clippy (push) Successful in 30s
Rust Build / build (push) Successful in 28s
Reviewed-on: #23 Co-authored-by: phoenix <kundeng94@gmail.com> Co-committed-by: phoenix <kundeng94@gmail.com>
44 lines
1.2 KiB
Rust
44 lines
1.2 KiB
Rust
pub mod collection {
|
|
use serde::{Deserialize, Serialize};
|
|
use std::default::Default;
|
|
|
|
use std::fs::File;
|
|
use std::io::BufReader;
|
|
|
|
use crate::init;
|
|
|
|
pub fn parse_album(filepath: &String) -> Result<Album, serde_json::Error> {
|
|
let file = File::open(filepath).expect("Failed to open file");
|
|
let reader = BufReader::new(file);
|
|
|
|
serde_json::from_reader(reader)
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
|
pub struct Album {
|
|
#[serde(skip_serializing_if = "String::is_empty")]
|
|
#[serde(alias = "album")]
|
|
pub title: String,
|
|
#[serde(skip_serializing_if = "String::is_empty")]
|
|
#[serde(alias = "album_artist")]
|
|
pub artist: String,
|
|
pub genre: String,
|
|
pub year: i32,
|
|
pub track_count: i32,
|
|
#[serde(skip_serializing_if = "init::is_set")]
|
|
pub disc_count: i32,
|
|
#[serde(skip_serializing_if = "Vec::is_empty")]
|
|
pub tracks: Vec<Track>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
|
pub struct Track {
|
|
pub title: String,
|
|
pub artist: String,
|
|
pub disc: i32,
|
|
pub track: i32,
|
|
// In seconds
|
|
pub duration: f64,
|
|
}
|
|
}
|