···55 path::PathBuf,
66};
7788-use crate::parser::{LogParser, ParsedArtist, ParsedTrack, ParserError};
88+use crate::{
99+ parser::{LogParser, ParserError},
1010+ record::{Artist, Play},
1111+};
9121013#[derive(Debug)]
1114pub struct AudioScrobblerParser {
···171174}
172175173176impl LogParser for AudioScrobblerParser {
174174- fn parse(log: PathBuf) -> Result<Vec<ParsedTrack>, ParserError> {
177177+ fn parse(log: PathBuf) -> Result<Vec<Play>, ParserError> {
175178 let file = File::open(log)?;
176179 let reader = BufReader::new(file);
177180 let log = Self::parse(reader)?;
···193196194197 let mut artists = Vec::new();
195198196196- let artist = ParsedArtist {
199199+ let artist = Artist {
197200 artist_name: entry.artist_name,
198201 artist_mb_id: None,
199202 };
200203201204 artists.push(artist);
202205203203- let track = ParsedTrack {
206206+ let track = Play {
204207 track_name: entry.track_name,
205208 duration: Some(entry.duration),
206209 played_time: Some(dt),
207207- client_id: log.client_id.clone(),
210210+ submission_client_agent: log.client_id.clone(),
208211 artists: Some(artists),
209212 release_name: entry.album_name,
210213 track_mb_id: entry.mb_track_id,
+8
src/parser/log_parser.rs
···11+use std::path::PathBuf;
22+33+use crate::{parser::ParserError, record::Play};
44+55+pub trait LogParser {
66+ /// Parse the given log file into a list of tracks
77+ fn parse(log: PathBuf) -> Result<Vec<Play>, ParserError>;
88+}
-29
src/parser/meta.rs
···11-use chrono::{DateTime, FixedOffset};
22-33-// See teal.fm lexicons for a description of most of these fields
44-#[derive(Debug)]
55-pub struct ParsedArtist {
66- pub artist_name: String,
77- pub artist_mb_id: Option<String>,
88-}
99-1010-// See teal.fm lexicons for a description of most of these fields
1111-#[derive(Debug)]
1212-pub struct ParsedTrack {
1313- pub track_name: String,
1414- pub track_mb_id: Option<String>,
1515- pub recording_mb_id: Option<String>,
1616- pub duration: Option<i64>,
1717- pub artist_names: Option<Vec<String>>,
1818- pub artist_mb_ids: Option<Vec<String>>,
1919- pub artists: Option<Vec<ParsedArtist>>,
2020- pub release_name: Option<String>,
2121- pub release_mb_id: Option<String>,
2222- pub isrc: Option<String>,
2323- pub origin_url: Option<String>,
2424- pub music_service_base_domain: Option<String>,
2525- pub client_id: Option<String>,
2626- pub played_time: Option<DateTime<FixedOffset>>,
2727- pub track_discriminant: Option<String>,
2828- pub release_discriminant: Option<String>,
2929-}
+2-4
src/parser/mod.rs
···11pub mod audio_scrobbler;
2233mod error;
44-mod meta;
55-mod parser;
44+mod log_parser;
6576pub use error::ParserError;
88-pub use meta::{ParsedArtist, ParsedTrack};
99-pub use parser::LogParser;
77+pub use log_parser::LogParser;
-8
src/parser/parser.rs
···11-use std::path::PathBuf;
22-33-use crate::parser::{ParsedTrack, ParserError};
44-55-pub trait LogParser {
66- /// Parse the given log file into a list of tracks
77- fn parse(log: PathBuf) -> Result<Vec<ParsedTrack>, ParserError>;
88-}