|
@@ -0,0 +1,268 @@
|
|
|
+{-# LANGUAGE Rank2Types #-}
|
|
|
+{-# LANGUAGE OverloadedStrings #-}
|
|
|
+
|
|
|
+module Codec.ActivityStream.DynamicSchema
|
|
|
+ ( module Codec.ActivityStream.Dynamic
|
|
|
+
|
|
|
+ , SchemaVerb(..)
|
|
|
+
|
|
|
+ , SchemaObjectType(..)
|
|
|
+
|
|
|
+ , avEmbedCode
|
|
|
+ , avStream
|
|
|
+
|
|
|
+ , bnCompression
|
|
|
+ , bnData
|
|
|
+ , bnFileUrl
|
|
|
+ , bnLength
|
|
|
+ , bnMd5
|
|
|
+ , bnMimeType
|
|
|
+
|
|
|
+ , evAttended
|
|
|
+ , evAttending
|
|
|
+ , evEndTime
|
|
|
+ , evInvited
|
|
|
+ , evMaybeAttending
|
|
|
+ , evNotAttendedBy
|
|
|
+ , evNotAttending
|
|
|
+ , evStartTime
|
|
|
+
|
|
|
+ , isTypes
|
|
|
+
|
|
|
+ , pmScope
|
|
|
+ , pmActions
|
|
|
+
|
|
|
+ , plPosition
|
|
|
+ , plAddress
|
|
|
+
|
|
|
+ , PlacePosition
|
|
|
+
|
|
|
+ , PlaceAddress
|
|
|
+
|
|
|
+ , rlMembers
|
|
|
+
|
|
|
+ , tsActor
|
|
|
+ , tsBy
|
|
|
+ , tsObject
|
|
|
+ , tsPrerequisites
|
|
|
+ , tsRequired
|
|
|
+ , tsSupersedes
|
|
|
+ , tsVerb
|
|
|
+
|
|
|
+ , acContext
|
|
|
+ , getLocation
|
|
|
+ , oMood
|
|
|
+ , oRating
|
|
|
+ , acResult
|
|
|
+ , getSource
|
|
|
+ , getStartTime
|
|
|
+ , getEndTime
|
|
|
+ , Mood
|
|
|
+ , moodRest
|
|
|
+ , moodDisplayName
|
|
|
+ , moodImage
|
|
|
+ ) where
|
|
|
+
|
|
|
+import qualified Data.Aeson as Aeson
|
|
|
+import Data.DateTime (DateTime)
|
|
|
+import Data.Aeson ( FromJSON(..), ToJSON(..) )
|
|
|
+import qualified Data.HashMap.Strict as HM
|
|
|
+import Data.Text (Text)
|
|
|
+
|
|
|
+import Codec.ActivityStream.LensInternal
|
|
|
+import Codec.ActivityStream.Dynamic
|
|
|
+import Codec.ActivityStream.Schema (SchemaVerb(..), SchemaObjectType(..))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+avEmbedCode :: Lens' Object (Maybe Text)
|
|
|
+avEmbedCode = makeAesonLensMb "embedCode" oRest
|
|
|
+
|
|
|
+
|
|
|
+avStream :: Lens' Object (Maybe MediaLink)
|
|
|
+avStream = makeAesonLensMb "stream" oRest
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+bnCompression :: Lens' Object (Maybe Text)
|
|
|
+bnCompression = makeAesonLensMb "compression" oRest
|
|
|
+
|
|
|
+bnData :: Lens' Object (Maybe Text)
|
|
|
+bnData = makeAesonLensMb "data" oRest
|
|
|
+
|
|
|
+bnFileUrl :: Lens' Object (Maybe Text)
|
|
|
+bnFileUrl = makeAesonLensMb "fileUrl" oRest
|
|
|
+
|
|
|
+bnLength :: Lens' Object (Maybe Text)
|
|
|
+bnLength = makeAesonLensMb "length" oRest
|
|
|
+
|
|
|
+bnMd5 :: Lens' Object (Maybe Text)
|
|
|
+bnMd5 = makeAesonLensMb "md5" oRest
|
|
|
+
|
|
|
+bnMimeType :: Lens' Object (Maybe Text)
|
|
|
+bnMimeType = makeAesonLensMb "mimeType" oRest
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+evAttended :: Lens' Object (Maybe Collection)
|
|
|
+evAttended = makeAesonLensMb "attended" oRest
|
|
|
+
|
|
|
+evAttending :: Lens' Object (Maybe Collection)
|
|
|
+evAttending = makeAesonLensMb "attending" oRest
|
|
|
+
|
|
|
+evEndTime :: Lens' Object (Maybe DateTime)
|
|
|
+evEndTime = makeAesonLensMb "endTime" oRest
|
|
|
+
|
|
|
+evInvited :: Lens' Object (Maybe Collection)
|
|
|
+evInvited = makeAesonLensMb "invited" oRest
|
|
|
+
|
|
|
+evMaybeAttending :: Lens' Object (Maybe Collection)
|
|
|
+evMaybeAttending = makeAesonLensMb "maybeAttending" oRest
|
|
|
+
|
|
|
+evNotAttendedBy :: Lens' Object (Maybe Collection)
|
|
|
+evNotAttendedBy = makeAesonLensMb "notAttendedBy" oRest
|
|
|
+
|
|
|
+evNotAttending :: Lens' Object (Maybe Collection)
|
|
|
+evNotAttending = makeAesonLensMb "notAttending" oRest
|
|
|
+
|
|
|
+evStartTime :: Lens' Object (Maybe DateTime)
|
|
|
+evStartTime = makeAesonLensMb "startTime" oRest
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+isTypes :: Lens' Object (Maybe [Text])
|
|
|
+isTypes = makeAesonLensMb "types" oRest
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+pmScope :: Lens' Object (Maybe Object)
|
|
|
+pmScope = makeAesonLensMb "scope" oRest
|
|
|
+
|
|
|
+pmActions :: Lens' Object (Maybe [Text])
|
|
|
+pmActions = makeAesonLensMb "actions" oRest
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+plPosition :: Lens' Object (Maybe PlacePosition)
|
|
|
+plPosition = makeAesonLensMb "position" oRest
|
|
|
+
|
|
|
+plAddress :: Lens' Object (Maybe PlaceAddress)
|
|
|
+plAddress = makeAesonLensMb "address" oRest
|
|
|
+
|
|
|
+data PlacePosition = PPO { fromPPO :: Aeson.Object } deriving (Eq, Show)
|
|
|
+
|
|
|
+instance FromJSON PlacePosition where
|
|
|
+ parseJSON (Aeson.Object o)
|
|
|
+ | HM.member "altitude" o
|
|
|
+ && HM.member "latitude" o
|
|
|
+ && HM.member "longitude" o = return (PPO o)
|
|
|
+ | otherwise = fail "..."
|
|
|
+ parseJSON _ = fail "..."
|
|
|
+
|
|
|
+instance ToJSON PlacePosition where
|
|
|
+ toJSON = Aeson.Object . fromPPO
|
|
|
+
|
|
|
+data PlaceAddress = PAO { fromPAO :: Aeson.Object } deriving (Eq, Show)
|
|
|
+
|
|
|
+instance FromJSON PlaceAddress where
|
|
|
+ parseJSON (Aeson.Object o)
|
|
|
+ | HM.member "formatted" o
|
|
|
+ && HM.member "streetAddress" o
|
|
|
+ && HM.member "locality" o
|
|
|
+ && HM.member "region" o
|
|
|
+ && HM.member "postalCode" o
|
|
|
+ && HM.member "country" o = return (PAO o)
|
|
|
+ | otherwise = fail "..."
|
|
|
+ parseJSON _ = fail "..."
|
|
|
+
|
|
|
+instance ToJSON PlaceAddress where
|
|
|
+ toJSON = Aeson.Object . fromPAO
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+rlMembers :: Lens' Object (Maybe [Object])
|
|
|
+rlMembers = makeAesonLensMb "members" oRest
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+tsActor :: Lens' Object (Maybe Object)
|
|
|
+tsActor = makeAesonLensMb "actor" oRest
|
|
|
+
|
|
|
+tsBy :: Lens' Object (Maybe DateTime)
|
|
|
+tsBy = makeAesonLensMb "by" oRest
|
|
|
+
|
|
|
+tsObject :: Lens' Object (Maybe Object)
|
|
|
+tsObject = makeAesonLensMb "object" oRest
|
|
|
+
|
|
|
+tsPrerequisites :: Lens' Object (Maybe [Object])
|
|
|
+tsPrerequisites = makeAesonLensMb "prerequisites" oRest
|
|
|
+
|
|
|
+tsRequired :: Lens' Object (Maybe Bool)
|
|
|
+tsRequired = makeAesonLensMb "required" oRest
|
|
|
+
|
|
|
+tsSupersedes :: Lens' Object (Maybe [Object])
|
|
|
+tsSupersedes = makeAesonLensMb "supersedes" oRest
|
|
|
+
|
|
|
+tsVerb :: Lens' Object (Maybe SchemaVerb)
|
|
|
+tsVerb = makeAesonLensMb "verb" oRest
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+acContext :: Lens' Activity (Maybe Object)
|
|
|
+acContext = makeAesonLensMb "context" acRest
|
|
|
+
|
|
|
+getLocation :: Lens' a Aeson.Object -> Lens' a (Maybe Object)
|
|
|
+getLocation = makeAesonLensMb "location"
|
|
|
+
|
|
|
+oMood :: Lens' Object (Maybe Mood)
|
|
|
+oMood = makeAesonLensMb "mood" oRest
|
|
|
+
|
|
|
+oRating :: Lens' Object (Maybe Double)
|
|
|
+oRating = makeAesonLensMb "rating" oRest
|
|
|
+
|
|
|
+acResult :: Lens' Activity (Maybe Object)
|
|
|
+acResult = makeAesonLensMb "result" acRest
|
|
|
+
|
|
|
+getSource :: Lens' a Aeson.Object -> Lens' a (Maybe Object)
|
|
|
+getSource = makeAesonLensMb "source"
|
|
|
+
|
|
|
+getStartTime :: Lens' a Aeson.Object -> Lens' a (Maybe Text)
|
|
|
+getStartTime = makeAesonLensMb "startTime"
|
|
|
+
|
|
|
+getEndTime :: Lens' a Aeson.Object -> Lens' a (Maybe Text)
|
|
|
+getEndTime = makeAesonLensMb "endTime"
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+data Mood = Mood { fromMood :: Aeson.Object } deriving (Eq, Show)
|
|
|
+
|
|
|
+instance FromJSON Mood where
|
|
|
+ parseJSON (Aeson.Object o)
|
|
|
+ | HM.member "displayName" o
|
|
|
+ && HM.member "image" o = return (Mood o)
|
|
|
+ | otherwise = fail "..."
|
|
|
+ parseJSON _ = fail "..."
|
|
|
+
|
|
|
+instance ToJSON Mood where
|
|
|
+ toJSON = Aeson.Object . fromMood
|
|
|
+
|
|
|
+moodRest :: Lens' Mood Aeson.Object
|
|
|
+moodRest = makeLens fromMood (\ o' m -> m { fromMood = o' })
|
|
|
+
|
|
|
+moodDisplayName :: Lens' Mood Text
|
|
|
+moodDisplayName = makeAesonLens "displayName" moodRest
|
|
|
+
|
|
|
+moodImage :: Lens' Mood MediaLink
|
|
|
+moodImage = makeAesonLens "image" moodRest
|