packages feed

listenbrainz-client 1.0.1 → 1.1.1

raw patch · 3 files changed

+48/−8 lines, 3 filesdep ~base

Dependency ranges changed: base

Files

ChangeLog.md view
@@ -1,6 +1,26 @@+# 1.1.1++## Other Changes++* Increased upper bound of `base` to allow 4.10.++# 1.1.0++## Breaking Changes++* `ListenData` no longer has an `Ord` instance. This is due to `TrackMetadata` losing its `Ord` instance.+* `TrackMetadata` has gained `trackReleaseName` and `trackAdditionalInfo` fields.+* `TrackMetadata` no longer has an `Ord` instance, as `trackAdditionalInfo` is an Aeson `Object` that lacks `Ord`.++## Other Changes++* Documentation!++ # 1.0.1  Export a few more symbols+  # 1.0.0 
listenbrainz-client.cabal view
@@ -1,5 +1,5 @@ name:                listenbrainz-client-version:             1.0.1+version:             1.1.1 synopsis:            A client library to the ListenBrainz project homepage:            https://github.com/ocharles/listenbrainz-client license:             BSD3@@ -14,7 +14,7 @@ library   exposed-modules:     Web.ListenBrainz   build-depends:       aeson >= 1.0.2.1,-                       base >=4.9 && <4.10,+                       base >=4.9 && <4.11,                        free >= 4.12.4,                        freer-effects >= 0.3.0.1,                        http-client >= 0.5.7.0,
src/Web/ListenBrainz.hs view
@@ -10,6 +10,7 @@ {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeOperators #-} +-- | A basic client to interact with ListenBrainz. module Web.ListenBrainz   ( MonadListenBrainz(..)   , runListenBrainzEff@@ -55,8 +56,9 @@ import Control.Monad.Freer.Exception import Control.Monad.IO.Class import Control.Monad.Trans.Reader-import Data.Aeson (FromJSON(..), ToJSON(..), (.=), (.:))+import Data.Aeson (Object, FromJSON(..), ToJSON(..), (.=), (.:), (.:?)) import qualified Data.Aeson as JSON+import Data.Foldable (fold) import Data.Functor.Coyoneda import Data.Monoid import Data.Proxy (Proxy(..))@@ -108,10 +110,13 @@           ]  +-- | Information about a single listen at a point in time. data ListenData = ListenData   { listenListenedAt :: UTCTime+    -- ^ When this listen was recorded.   , listenTrackMetadata :: TrackMetadata-  } deriving (Eq, Ord, Read, Show, Generic)+    -- ^ Information about the track that was listened to.+  } deriving (Eq, Read, Show, Generic)   instance ToJSON ListenData where@@ -134,18 +139,27 @@       pure ListenData{..}  +-- | Metadata about a track that was listened to. data TrackMetadata = TrackMetadata   { trackArtist :: Text   , trackName :: Text-  } deriving (Eq, Ord, Read, Show, Generic)+  , trackReleaseName :: Maybe Text+    -- ^ The name of the release this recording was played from.+  , trackAdditionalInfo :: Object+    -- ^ Arbitrary and unstructured extra information. For more information, see the [ListenBrainz documentation](https://listenbrainz.readthedocs.io/en/production/dev/json.html#payload-json-details).+  } deriving (Eq, Read, Show, Generic)   instance ToJSON TrackMetadata where   toJSON TrackMetadata {..} =     JSON.object-      [ "artist_name" .= trackArtist-      , "track_name" .= trackName-      ]+      (concat+        [ [ "artist_name" .= trackArtist+          , "track_name" .= trackName+          , "additional_info" .= trackAdditionalInfo+          ]+        , foldMap (pure . ("release_name" .=)) trackReleaseName+        ])   instance FromJSON TrackMetadata where@@ -156,6 +170,12 @@        trackName <-         o .: "track_name"++      trackReleaseName <-+        o .:? "release_name"++      trackAdditionalInfo <-+        fmap fold (o .:? "additional_info")        pure TrackMetadata{..}