diff --git a/src/bin/musichoard-edit.rs b/src/bin/musichoard-edit.rs index e534e28..636c8a8 100644 --- a/src/bin/musichoard-edit.rs +++ b/src/bin/musichoard-edit.rs @@ -1,10 +1,12 @@ -use paste::paste; use std::path::PathBuf; + +use paste::paste; use structopt::{clap::AppSettings, StructOpt}; use musichoard::{ + collection::artist::ArtistId, database::json::{backend::JsonDatabaseFileBackend, JsonDatabase}, - ArtistId, MusicHoard, MusicHoardBuilder, NoLibrary, + MusicHoard, MusicHoardBuilder, NoLibrary, }; type MH = MusicHoard>; diff --git a/src/core/collection/album.rs b/src/core/collection/album.rs index 76801ab..5eb412e 100644 --- a/src/core/collection/album.rs +++ b/src/core/collection/album.rs @@ -1,9 +1,11 @@ -use core::mem; +use std::mem; use serde::{Deserialize, Serialize}; -use super::merge::{Merge, MergeSorted}; -use super::track::Track; +use crate::core::collection::{ + merge::{Merge, MergeSorted}, + track::Track, +}; /// An album is a collection of tracks that were released together. #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] diff --git a/src/core/collection/artist.rs b/src/core/collection/artist.rs index dd48426..bef3684 100644 --- a/src/core/collection/artist.rs +++ b/src/core/collection/artist.rs @@ -8,9 +8,11 @@ use serde::{Deserialize, Serialize}; use url::Url; use uuid::Uuid; -use super::album::Album; -use super::merge::{Merge, MergeSorted}; -use super::Error; +use crate::core::collection::{ + album::Album, + merge::{Merge, MergeSorted}, + Error, +}; /// An artist. #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] diff --git a/src/core/collection/mod.rs b/src/core/collection/mod.rs index 77afe55..ea42e15 100644 --- a/src/core/collection/mod.rs +++ b/src/core/collection/mod.rs @@ -1,3 +1,5 @@ +//! The collection module defines the core data types and their relations. + pub mod album; pub mod artist; pub mod track; diff --git a/src/core/collection/track.rs b/src/core/collection/track.rs index 89992d6..3b35cf0 100644 --- a/src/core/collection/track.rs +++ b/src/core/collection/track.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::merge::Merge; +use crate::core::collection::merge::Merge; /// A single track on an album. #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] diff --git a/src/core/database/json/backend.rs b/src/core/database/json/backend.rs index d644fe4..8c99542 100644 --- a/src/core/database/json/backend.rs +++ b/src/core/database/json/backend.rs @@ -3,7 +3,7 @@ use std::fs; use std::path::PathBuf; -use super::IJsonDatabaseBackend; +use crate::core::database::json::IJsonDatabaseBackend; /// JSON database backend that uses a local file for persistent storage. pub struct JsonDatabaseFileBackend { diff --git a/src/core/database/json/mod.rs b/src/core/database/json/mod.rs index fbd235d..2836ea2 100644 --- a/src/core/database/json/mod.rs +++ b/src/core/database/json/mod.rs @@ -1,13 +1,14 @@ //! Module for storing MusicHoard data in a JSON file database. +pub mod backend; + #[cfg(test)] use mockall::automock; -use crate::Collection; - -use super::{IDatabase, LoadError, SaveError}; - -pub mod backend; +use crate::core::{ + collection::Collection, + database::{IDatabase, LoadError, SaveError}, +}; impl From for LoadError { fn from(err: serde_json::Error) -> LoadError { @@ -66,7 +67,13 @@ mod tests { use mockall::predicate; - use crate::{core::testmod::FULL_COLLECTION, Artist, ArtistId, Collection}; + use crate::core::{ + collection::{ + artist::{Artist, ArtistId}, + Collection, + }, + testmod::FULL_COLLECTION, + }; use super::*; use testmod::DATABASE_JSON; diff --git a/src/core/database/mod.rs b/src/core/database/mod.rs index c23aabc..c0de380 100644 --- a/src/core/database/mod.rs +++ b/src/core/database/mod.rs @@ -1,14 +1,14 @@ //! Module for storing MusicHoard data in a database. +#[cfg(feature = "database-json")] +pub mod json; + use std::fmt; #[cfg(test)] use mockall::automock; -use crate::Collection; - -#[cfg(feature = "database-json")] -pub mod json; +use crate::core::collection::Collection; /// Trait for interacting with the database. #[cfg_attr(test, automock)] diff --git a/src/core/library/beets/executor.rs b/src/core/library/beets/executor.rs index 1c7e34f..4a9632e 100644 --- a/src/core/library/beets/executor.rs +++ b/src/core/library/beets/executor.rs @@ -8,7 +8,7 @@ use std::{ str, }; -use super::{Error, IBeetsLibraryExecutor}; +use crate::core::library::{beets::IBeetsLibraryExecutor, Error}; const BEET_DEFAULT: &str = "beet"; diff --git a/src/core/library/beets/mod.rs b/src/core/library/beets/mod.rs index 29fd719..748a3c6 100644 --- a/src/core/library/beets/mod.rs +++ b/src/core/library/beets/mod.rs @@ -1,14 +1,15 @@ //! Module for interacting with the music library via //! [beets](https://beets.readthedocs.io/en/stable/). +pub mod executor; + #[cfg(test)] use mockall::automock; -use crate::core::collection::track::Format; - -use super::{Error, Field, ILibrary, Item, Query}; - -pub mod executor; +use crate::core::{ + collection::track::Format, + library::{Error, Field, ILibrary, Item, Query}, +}; macro_rules! list_format_separator { () => { @@ -176,7 +177,7 @@ mod testmod; mod tests { use mockall::predicate; - use crate::library::testmod::LIBRARY_ITEMS; + use crate::core::library::testmod::LIBRARY_ITEMS; use super::*; use testmod::LIBRARY_BEETS; diff --git a/src/core/library/mod.rs b/src/core/library/mod.rs index 1ac85f2..6e0778a 100644 --- a/src/core/library/mod.rs +++ b/src/core/library/mod.rs @@ -1,5 +1,8 @@ //! Module for interacting with the music library. +#[cfg(feature = "library-beets")] +pub mod beets; + use std::{collections::HashSet, fmt, num::ParseIntError, str::Utf8Error}; #[cfg(test)] @@ -7,9 +10,6 @@ use mockall::automock; use crate::core::collection::track::Format; -#[cfg(feature = "library-beets")] -pub mod beets; - /// Trait for interacting with the music library. #[cfg_attr(test, automock)] pub trait ILibrary { diff --git a/src/core/library/testmod.rs b/src/core/library/testmod.rs index 87b5dc2..a0a5af4 100644 --- a/src/core/library/testmod.rs +++ b/src/core/library/testmod.rs @@ -1,6 +1,6 @@ use once_cell::sync::Lazy; -use crate::{library::Item, Format}; +use crate::core::{collection::track::Format, library::Item}; pub static LIBRARY_ITEMS: Lazy> = Lazy::new(|| -> Vec { vec![ diff --git a/src/core/mod.rs b/src/core/mod.rs index 4c04b6d..8739da3 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1,4 +1,3 @@ -// FIXME: visibility? pub mod collection; pub mod database; pub mod library; diff --git a/src/core/musichoard/mod.rs b/src/core/musichoard/mod.rs index baa1e25..d12bc43 100644 --- a/src/core/musichoard/mod.rs +++ b/src/core/musichoard/mod.rs @@ -1,12 +1,12 @@ +//! The core MusicHoard module. Serves as the main entry-point into the library. + #![allow(clippy::module_inception)] pub mod musichoard; pub mod musichoard_builder; use std::fmt::{self, Display}; -use super::collection; -use super::database; -use super::library; +use crate::core::{collection, database, library}; /// Error type for `musichoard`. #[derive(Debug, PartialEq, Eq)] diff --git a/src/core/musichoard/musichoard.rs b/src/core/musichoard/musichoard.rs index 6ea79fd..66a7d6b 100644 --- a/src/core/musichoard/musichoard.rs +++ b/src/core/musichoard/musichoard.rs @@ -2,15 +2,17 @@ use std::{collections::HashMap, mem}; use paste::paste; -use super::collection::{ - album::{Album, AlbumId}, - artist::{Artist, ArtistId}, - track::{Quality, Track, TrackId}, - Collection, Merge, +use crate::core::{ + collection::{ + album::{Album, AlbumId}, + artist::{Artist, ArtistId}, + track::{Quality, Track, TrackId}, + Collection, Merge, + }, + database::IDatabase, + library::{ILibrary, Item, Query}, + musichoard::Error, }; -use super::database::IDatabase; -use super::library::{ILibrary, Item, Query}; -use super::Error; /// The Music Hoard. It is responsible for pulling information from both the library and the /// database, ensuring its consistent and writing back any changes. @@ -334,13 +336,14 @@ impl MusicHoard { mod tests { use mockall::predicate; - use super::*; + use crate::core::{ + collection::artist::{ArtistId, Bandcamp, MusicBrainz, MusicButler, Qobuz}, + database::{self, MockIDatabase}, + library::{self, testmod::LIBRARY_ITEMS, MockILibrary}, + testmod::{FULL_COLLECTION, LIBRARY_COLLECTION}, + }; - // FIXME: check all crate::* imports - are the tests where they should be? - use crate::core::collection::artist::{ArtistId, Bandcamp, MusicBrainz, MusicButler, Qobuz}; - use crate::core::testmod::{FULL_COLLECTION, LIBRARY_COLLECTION}; - use crate::database::{self, MockIDatabase}; - use crate::library::{self, testmod::LIBRARY_ITEMS, MockILibrary}; + use super::*; static MUSICBRAINZ: &str = "https://musicbrainz.org/artist/d368baa8-21ca-4759-9731-0b2753071ad8"; diff --git a/src/core/musichoard/musichoard_builder.rs b/src/core/musichoard/musichoard_builder.rs index 976b373..346a592 100644 --- a/src/core/musichoard/musichoard_builder.rs +++ b/src/core/musichoard/musichoard_builder.rs @@ -1,6 +1,8 @@ -use super::database::IDatabase; -use super::library::ILibrary; -use super::musichoard::{MusicHoard, NoDatabase, NoLibrary}; +use crate::core::{ + database::IDatabase, + library::ILibrary, + musichoard::musichoard::{MusicHoard, NoDatabase, NoLibrary}, +}; /// Builder for [`MusicHoard`]. Its purpose is to make it easier to set various combinations of /// library/database or their absence. @@ -51,10 +53,9 @@ impl MusicHoardBuilder { #[cfg(test)] mod tests { - use super::*; + use crate::core::{database::NullDatabase, library::NullLibrary}; - use crate::database::NullDatabase; - use crate::library::NullLibrary; + use super::*; #[test] fn no_library_no_database() { diff --git a/src/core/testmod.rs b/src/core/testmod.rs index d2a55ac..4527446 100644 --- a/src/core/testmod.rs +++ b/src/core/testmod.rs @@ -1,10 +1,10 @@ +use once_cell::sync::Lazy; + use crate::core::collection::{ album::{Album, AlbumId}, artist::{Artist, ArtistId, ArtistProperties, Bandcamp, MusicBrainz, MusicButler, Qobuz}, track::{Format, Quality, Track, TrackId}, }; -use once_cell::sync::Lazy; - use crate::tests::*; pub static LIBRARY_COLLECTION: Lazy> = Lazy::new(|| library_collection!()); diff --git a/src/lib.rs b/src/lib.rs index bf6be8f..6277808 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,21 +1,11 @@ //! MusicHoard - a music collection manager. -// FIXME: make private and only provide via re-exports. -pub mod core; +mod core; -// FIXME: validate the re-exports. +pub use core::collection; pub use core::database; pub use core::library; -// FIXME: validate the re-exports. -pub use core::collection::{ - album::{Album, AlbumId}, - artist::{Artist, ArtistId, ArtistProperties, Bandcamp, MusicBrainz, MusicButler, Qobuz}, - track::{Format, Quality, Track, TrackId}, - Collection, -}; - -// FIXME: validate the re-exports pub use core::musichoard::{ musichoard::{MusicHoard, NoDatabase, NoLibrary}, musichoard_builder::MusicHoardBuilder, diff --git a/src/main.rs b/src/main.rs index 40ef42d..94207ba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +mod tui; + use std::{ffi::OsString, fs::OpenOptions, io, path::PathBuf}; use ratatui::{backend::CrosstermBackend, Terminal}; @@ -18,7 +20,6 @@ use musichoard::{ MusicHoardBuilder, NoDatabase, NoLibrary, }; -mod tui; use tui::{event::EventChannel, handler::EventHandler, listener::EventListener, ui::Ui, Tui}; #[derive(StructOpt)] diff --git a/src/tui/event.rs b/src/tui/event.rs index a99d610..b05da5f 100644 --- a/src/tui/event.rs +++ b/src/tui/event.rs @@ -2,7 +2,7 @@ use crossterm::event::{KeyEvent, MouseEvent}; use std::fmt; use std::sync::mpsc; -use super::ui::UiError; +use crate::tui::ui::UiError; #[derive(Debug)] pub enum EventError { @@ -104,7 +104,7 @@ mod tests { use crate::tui::ui::UiError; - use super::{Event, EventChannel, EventError}; + use super::*; #[test] fn event_sender() { diff --git a/src/tui/handler.rs b/src/tui/handler.rs index 657c226..2c65098 100644 --- a/src/tui/handler.rs +++ b/src/tui/handler.rs @@ -3,7 +3,7 @@ use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; #[cfg(test)] use mockall::automock; -use super::{ +use crate::tui::{ event::{Event, EventError, EventReceiver}, ui::IUi, }; diff --git a/src/tui/lib.rs b/src/tui/lib.rs index 6e0facd..23349ce 100644 --- a/src/tui/lib.rs +++ b/src/tui/lib.rs @@ -1,4 +1,4 @@ -use musichoard::{database::IDatabase, library::ILibrary, Collection, MusicHoard}; +use musichoard::{collection::Collection, database::IDatabase, library::ILibrary, MusicHoard}; #[cfg(test)] use mockall::automock; diff --git a/src/tui/mod.rs b/src/tui/mod.rs index 91c7e1a..c4584da 100644 --- a/src/tui/mod.rs +++ b/src/tui/mod.rs @@ -164,20 +164,17 @@ mod testmod; mod tests { use std::{io, thread}; - use musichoard::Collection; use ratatui::{backend::TestBackend, Terminal}; - use super::testmod::COLLECTION; + use musichoard::collection::Collection; - use super::{ - event::EventError, - handler::MockIEventHandler, - lib::MockIMusicHoard, - listener::MockIEventListener, - ui::{IUi, Ui}, - Error, Tui, + use crate::tui::{ + handler::MockIEventHandler, lib::MockIMusicHoard, listener::MockIEventListener, ui::Ui, }; + use super::*; + use testmod::COLLECTION; + pub fn terminal() -> Terminal { let backend = TestBackend::new(150, 30); Terminal::new(backend).unwrap() diff --git a/src/tui/testmod.rs b/src/tui/testmod.rs index a5c7221..f5d1bcf 100644 --- a/src/tui/testmod.rs +++ b/src/tui/testmod.rs @@ -1,6 +1,7 @@ -use musichoard::{ - Album, AlbumId, Artist, ArtistId, ArtistProperties, Bandcamp, Format, MusicBrainz, MusicButler, - Qobuz, Quality, Track, TrackId, +use musichoard::collection::{ + album::{Album, AlbumId}, + artist::{Artist, ArtistId, ArtistProperties, Bandcamp, MusicBrainz, MusicButler, Qobuz}, + track::{Format, Quality, Track, TrackId}, }; use once_cell::sync::Lazy; diff --git a/src/tui/ui.rs b/src/tui/ui.rs index 3319068..826a184 100644 --- a/src/tui/ui.rs +++ b/src/tui/ui.rs @@ -1,6 +1,11 @@ use std::fmt; -use musichoard::{Album, Artist, Collection, Format, Track}; +use musichoard::collection::{ + album::Album, + artist::Artist, + track::{Format, Track}, + Collection, +}; use ratatui::{ backend::Backend, layout::{Alignment, Rect}, @@ -9,7 +14,7 @@ use ratatui::{ Frame, }; -use super::{lib::IMusicHoard, Error}; +use crate::tui::{lib::IMusicHoard, Error}; #[derive(Debug)] pub enum UiError { diff --git a/tests/database/json.rs b/tests/database/json.rs index fd8f2b7..e7e18ac 100644 --- a/tests/database/json.rs +++ b/tests/database/json.rs @@ -1,14 +1,15 @@ use std::{fs, path::PathBuf}; +use once_cell::sync::Lazy; +use tempfile::NamedTempFile; + use musichoard::{ + collection::artist::Artist, database::{ json::{backend::JsonDatabaseFileBackend, JsonDatabase}, IDatabase, }, - Artist, }; -use once_cell::sync::Lazy; -use tempfile::NamedTempFile; use crate::testlib::COLLECTION; diff --git a/tests/lib.rs b/tests/lib.rs index c1e74bd..867941d 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -5,14 +5,14 @@ mod testlib; use musichoard::MusicHoard; -use crate::testlib::COLLECTION; - #[cfg(feature = "database-json")] use musichoard::database::json::{backend::JsonDatabaseFileBackend, JsonDatabase}; #[cfg(feature = "library-beets")] use musichoard::library::beets::{executor::BeetsLibraryProcessExecutor, BeetsLibrary}; +use crate::testlib::COLLECTION; + #[test] #[cfg(feature = "database-json")] #[cfg(feature = "library-beets")] diff --git a/tests/library/beets.rs b/tests/library/beets.rs index aa562a1..74dcd12 100644 --- a/tests/library/beets.rs +++ b/tests/library/beets.rs @@ -12,7 +12,7 @@ use musichoard::library::{ Field, ILibrary, Item, Query, }; -use super::testmod::LIBRARY_ITEMS; +use crate::library::testmod::LIBRARY_ITEMS; pub static BEETS_TEST_CONFIG_PATH: Lazy = Lazy::new(|| fs::canonicalize("./tests/files/library/config.yml").unwrap()); diff --git a/tests/library/mod.rs b/tests/library/mod.rs index 45a5cdb..54227e8 100644 --- a/tests/library/mod.rs +++ b/tests/library/mod.rs @@ -1,4 +1,4 @@ -mod testmod; - #[cfg(feature = "library-beets")] pub mod beets; + +mod testmod; diff --git a/tests/library/testmod.rs b/tests/library/testmod.rs index fbf645a..bfd1658 100644 --- a/tests/library/testmod.rs +++ b/tests/library/testmod.rs @@ -1,6 +1,6 @@ use once_cell::sync::Lazy; -use musichoard::{library::Item, Format}; +use musichoard::{collection::track::Format, library::Item}; pub static LIBRARY_ITEMS: Lazy> = Lazy::new(|| -> Vec { vec![ diff --git a/tests/testlib.rs b/tests/testlib.rs index 8df1677..76bff31 100644 --- a/tests/testlib.rs +++ b/tests/testlib.rs @@ -1,9 +1,12 @@ -use musichoard::{ - Album, AlbumId, Artist, ArtistId, ArtistProperties, Bandcamp, Collection, Format, MusicBrainz, - MusicButler, Qobuz, Quality, Track, TrackId, -}; use once_cell::sync::Lazy; +use musichoard::collection::{ + album::{Album, AlbumId}, + artist::{Artist, ArtistId, ArtistProperties, Bandcamp, MusicBrainz, MusicButler, Qobuz}, + track::{Format, Quality, Track, TrackId}, + Collection, +}; + pub static COLLECTION: Lazy> = Lazy::new(|| -> Collection { vec![ Artist {