module Network.Protocol.MusicBrainz.XML2.Types ( MBID(..) , Release(..) , TextRepresentation(..) , Medium(..) , DiscList(..) , TrackList(..) , Track(..) , Recording(..) , NameCredit(..) , ReleaseGroup(..) , LabelInfo(..) , Label(..) ) where import Data.Text (Text) import Data.Time.Calendar (Day) import Data.Vector (Vector) newtype MBID = MBID { unMBID :: Text } deriving (Eq, Show) data Release = Release { _releaseId :: MBID , _releaseTitle :: Text , _releaseStatus :: Maybe Text , _releaseQuality :: Maybe Text , _releasePackaging :: Maybe Text , _releaseTextRepresentation :: Maybe TextRepresentation , _releaseArtistCredit :: [NameCredit] , _releaseDate :: Maybe Day , _releaseCountry :: Maybe Text , _releaseBarcode :: Maybe Text , _releaseASIN :: Maybe Text , _releaseMedia :: Vector Medium } deriving (Eq, Show) data TextRepresentation = TextRepresentation { _textRepLanguage :: Maybe Text , _textRepScript :: Maybe Text } deriving (Eq, Show) data Medium = Medium { _mediumTitle :: Maybe Text , _mediumPosition :: Maybe Integer , _mediumFormat :: Maybe Text , _mediumDiscList :: Maybe DiscList , _mediumTrackList :: Maybe TrackList } deriving (Eq, Show) data DiscList = DiscList { _discListCount :: Integer } deriving (Eq, Show) data TrackList = TrackList { _trackListOffset :: Maybe Integer , _trackListTracks :: Vector Track } deriving (Eq, Show) data Track = Track { _trackPosition :: Maybe Integer , _trackNumber :: Maybe Integer , _trackLength :: Maybe Integer , _trackRecording :: Recording } deriving (Eq, Show) data Recording = Recording { _recordingId :: MBID , _recordingTitle :: Maybe Text , _recordingLength :: Maybe Integer , _recordingArtistCredit :: [NameCredit] } deriving (Eq, Show) data NameCredit = NameCredit { _nameCreditArtistId :: MBID , _nameCreditJoinPhrase :: Maybe Text , _nameCreditArtistName :: Maybe Text , _nameCreditArtistSortName :: Maybe Text } deriving (Eq, Show) data ReleaseGroup = ReleaseGroup { _releaseGroupId :: MBID , _releaseGroupType :: Text , _releaseGroupTitle :: Maybe Text , _releaseGroupFirstReleaseDate :: Maybe Text , _releaseGroupPrimaryType :: Maybe Text , _releaseGroupArtistCredit :: [NameCredit] } deriving (Eq, Show) data LabelInfo = LabelInfo { _labelInfoCatalogNumber :: Maybe Text , _labelInfoLabel :: Label } deriving (Eq, Show) data Label = Label { _labelId :: MBID , _labelName :: Maybe Text , _labelSortName :: Maybe Text , _labelLabelCode :: Maybe Text } deriving (Eq, Show)