module Network.Pushbullet.Types.Misc ( EmailAddress(..), ChannelTag(..), ChannelId(..), ClientId(..), MimeType(..), Url(..), Guid(..), PhoneNumber(..), TrivialObject, trivialObject, Name(..) ) where import Data.Aeson import qualified Data.HashMap.Lazy as H import Data.Text ( Text ) newtype EmailAddress = EmailAddress Text deriving (Eq, FromJSON, Show, ToJSON) newtype ChannelTag = ChannelTag Text deriving (Eq, FromJSON, Show, ToJSON) newtype ChannelId = ChannelId Text deriving (Eq, FromJSON, Show, ToJSON) newtype ClientId = ClientId Text deriving (Eq, FromJSON, Show, ToJSON) newtype MimeType = MimeType Text deriving (Eq, FromJSON, Show, ToJSON) newtype Url = Url { unUrl :: Text } deriving (Eq, FromJSON, Show, ToJSON) newtype Guid = Guid Text deriving (Eq, FromJSON, Show, ToJSON) newtype PhoneNumber = PhoneNumber Text deriving (Eq, FromJSON, Show, ToJSON) newtype TrivialObject = TrivialObject () deriving (Eq, Ord, Show) -- | Constructs a trivial object, with no keys. trivialObject :: TrivialObject trivialObject = TrivialObject () newtype Name = Name { unName :: Text } deriving (Eq, FromJSON, Show, ToJSON) instance ToJSON TrivialObject where toJSON _ = object [] instance FromJSON TrivialObject where parseJSON (Object o) | H.null o = pure trivialObject | otherwise = fail "cannot parse non-trivial object to trivial object" parseJSON _ = fail "cannot parse non-object to trivial object"