twitter-types 0.7.2.2 → 0.8.0
raw patch · 6 files changed
+140/−64 lines, 6 filesdep −ghc-primdep −old-localedep ~basedep ~time
Dependencies removed: ghc-prim, old-locale
Dependency ranges changed: base, time
Files
- Web/Twitter/Types.hs +70/−13
- tests/Instances.hs +17/−11
- tests/TypesTest.hs +32/−10
- tests/fixtures/media_extended_entity.json +1/−1
- tests/fixtures/user_thimura_lang_null.json +1/−0
- twitter-types.cabal +19/−29
Web/Twitter/Types.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, RecordWildCards, DeriveGeneric, CPP #-}+{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, RecordWildCards, DeriveGeneric #-} module Web.Twitter.Types ( UserId@@ -21,6 +21,8 @@ , List(..) , Entities(..) , EntityIndices+ , ExtendedEntities(..)+ , ExtendedEntity(..) , Entity(..) , HashTagEntity(..) , UserEntity(..)@@ -39,18 +41,14 @@ where import Control.Applicative+import Control.Monad import Data.Aeson import Data.Aeson.Types (Parser) import Data.Data import Data.HashMap.Strict (HashMap, fromList, union) import Data.Text (Text, unpack, pack) import GHC.Generics-#if MIN_VERSION_time(1, 5, 0) import Data.Time-#else-import Data.Time-import System.Locale-#endif newtype TwitterTime = TwitterTime { fromTwitterTime :: UTCTime } @@ -83,16 +81,12 @@ instance FromJSON TwitterTime where parseJSON = withText "TwitterTime" $ \t ->-#if MIN_VERSION_time(1, 5, 0) case parseTimeM True defaultTimeLocale twitterTimeFormat (unpack t) of-#else- case parseTime defaultTimeLocale twitterTimeFormat (unpack t) of-#endif Just d -> pure $ TwitterTime d Nothing -> fail $ "Could not parse twitter time. Text was: " ++ unpack t instance ToJSON TwitterTime where- toJSON t = String $ pack $ formatTime defaultTimeLocale twitterTimeFormat $ fromTwitterTime t + toJSON t = String $ pack $ formatTime defaultTimeLocale twitterTimeFormat $ fromTwitterTime t instance FromJSON StreamingAPI where parseJSON v@(Object o) =@@ -125,7 +119,7 @@ , statusCreatedAt :: UTCTime , statusCurrentUserRetweet :: Maybe StatusId , statusEntities :: Maybe Entities- , statusExtendedEntities :: Maybe Entities+ , statusExtendedEntities :: Maybe ExtendedEntities , statusFavoriteCount :: Integer , statusFavorited :: Maybe Bool , statusFilterLevel :: Maybe Text@@ -459,6 +453,7 @@ , userDefaultProfile :: Bool , userDefaultProfileImage :: Bool , userDescription :: Maybe Text+ , userEmail :: Maybe Text , userFavoritesCount :: Int , userFollowRequestSent :: Maybe Bool , userFollowing :: Maybe Bool@@ -467,7 +462,7 @@ , userGeoEnabled :: Bool , userId :: UserId , userIsTranslator :: Bool- , userLang :: LanguageCode+ , userLang :: Maybe LanguageCode , userListedCount :: Int , userLocation :: Maybe Text , userName :: Text@@ -503,6 +498,7 @@ <*> o .: "default_profile" <*> o .: "default_profile_image" <*> o .:? "description"+ <*> fmap join (o .:? "email") -- The field can be a null value <*> o .: "favourites_count" <*> o .:? "follow_request_sent" .!= Nothing <*> o .:? "following" .!= Nothing@@ -546,6 +542,7 @@ , "default_profile" .= userDefaultProfile , "default_profile_image" .= userDefaultProfileImage , "description" .= userDescription+ , "email" .= userEmail , "favourites_count" .= userFavoritesCount , "follow_request_sent" .= userFollowRequestSent , "following" .= userFollowing@@ -828,6 +825,7 @@ , "media" .= enMedia ] + -- | The character positions the Entity was extracted from -- -- This is experimental implementation.@@ -850,6 +848,65 @@ toJSON Entity{..} = case toJSON entityBody of (Object o) -> Object $ union o $ fromList [("indices"::Text, toJSON entityIndices)] _ -> error "Entity body must produce an object."++data ExtendedEntities =+ ExtendedEntities {+ exeMedia :: [Entity ExtendedEntity]+ } deriving (Show, Eq, Data, Typeable, Generic)++instance FromJSON ExtendedEntities where+ parseJSON (Object o) =+ ExtendedEntities <$> o .:? "media" .!= []++ parseJSON v = fail $ "couldn't parse extended entity from: " ++ show v++instance ToJSON ExtendedEntities where+ toJSON ExtendedEntities{..} = object [ "media" .= exeMedia ]+++-- Extended entities are like entities, but contain special media features like+-- video or multiple photos+data ExtendedEntity =+ ExtendedEntity+ {+ exeID :: StatusId,+ exeMediaUrl :: URIString,+ exeMediaUrlHttps :: URIString,+ exeSizes :: HashMap Text MediaSize,+ exeType :: Text,+ -- exeVideoInfo :: ???+ exeDurationMillis :: Maybe Double,+ -- exeVariants :: ??+ exeExtAltText :: Maybe String,+ exeURL :: URLEntity+ } deriving (Show, Eq, Data, Typeable, Generic)++instance FromJSON ExtendedEntity where+ parseJSON v@(Object o) =+ ExtendedEntity <$> o .: "id"+ <*> o .: "media_url"+ <*> o .: "media_url_https"+ <*> o .: "sizes"+ <*> o .: "type"+ <*> o .:? "duration_millis"+ <*> o .:? "ext_alt_text"+ <*> parseJSON v++ parseJSON v = fail $ "couldn't parse extended entity from:" ++ show v++instance ToJSON ExtendedEntity where+ toJSON ExtendedEntity{..} = object [ "id" .= exeID+ , "media_url" .= exeMediaUrl+ , "media_url_https" .= exeMediaUrlHttps+ , "sizes" .= exeSizes+ , "type" .= exeType+ , "duration_millis" .= exeDurationMillis+ , "ext_alt_text" .= exeExtAltText+ , "url" .= ueURL exeURL+ , "expanded_url" .= ueExpanded exeURL+ , "display_url" .= ueDisplay exeURL+ ]+ data Contributor = Contributor { contributorId :: UserId
tests/Instances.hs view
@@ -1,26 +1,19 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Instances where -import Data.String import Control.Applicative+import Data.Aeson import Data.DeriveTH+import Data.HashMap.Strict as HashMap+import Data.String import qualified Data.Text as T+import Data.Time (UTCTime (..), readTime, fromGregorian, defaultTimeLocale) import Test.QuickCheck import Web.Twitter.Types-import Data.Aeson-import Data.HashMap.Strict as HashMap -#if MIN_VERSION_time(1,5,0)-import Data.Time (UTCTime (..), readTime, fromGregorian, defaultTimeLocale)-#else-import Data.Time (UTCTime (..), readTime, fromGregorian)-import System.Locale-#endif- instance IsString UTCTime where fromString = readTime defaultTimeLocale twitterTimeFormat @@ -117,6 +110,19 @@ derive makeArbitrary ''BoundingBox derive makeArbitrary ''Entities+derive makeArbitrary ''ExtendedEntities+instance Arbitrary ExtendedEntity where+ arbitrary = do+ ms <- arbitrary+ ExtendedEntity+ <$> arbitrary+ <*> arbitrary+ <*> arbitrary+ <*> pure (HashMap.fromList [("medium", ms)])+ <*> arbitrary+ <*> arbitrary+ <*> arbitrary+ <*> arbitrary instance Arbitrary a => Arbitrary (Entity a) where arbitrary = do
tests/TypesTest.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE CPP #-} module Main where @@ -154,11 +153,12 @@ length (enMedia ent) @?= 1 map (meMediaURLHttps . entityBody) (enMedia ent) @?= ["https://pbs.twimg.com/media/BtDkUVaCQAIpWBU.jpg"] - let exent = fromJust $ statusExtendedEntities obj- enHashTags exent @?= []- enUserMentions exent @?= []- enURLs exent @?= []- length (enMedia ent) @?= 1+ let exents = fromJust $ statusExtendedEntities obj+ let media = exeMedia exents+ length media @?= 1+ let exent = entityBody $ head media+ exeID exent @?= 491143397378244610+ ueURL (exeURL exent) @?= "http://t.co/FjSOU8dDoD" statusInReplyToStatusId obj @?= Nothing statusInReplyToUserId obj @?= Nothing@@ -319,12 +319,16 @@ let entities = statusExtendedEntities obj assert $ isJust entities let Just ent = entities- media = enMedia ent+ media = exeMedia ent length media @?= 4 let me = entityBody $ head media- ueURL (meURL me) @?= "http://t.co/qOjPwmgLKO"- meMediaURL me @?= "http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg"+ ueURL (exeURL me) @?= "https://t.co/Qi316FhOwe"+ exeMediaUrl me @?= "http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg"+ exeExtAltText me @?= Just "A small tabby kitten"+ exeType me @?= "photo" ++ case_parseUser :: Assertion case_parseUser = withJSON fixture_user_thimura $ \obj -> do userId obj @?= 69179963@@ -338,7 +342,25 @@ userFollowersCount obj @?= 754 userFriendsCount obj @?= 780 userStatusesCount obj @?= 24709- userLang obj @?= "en"+ userLang obj @?= Just "en"+ userCreatedAt obj @?= "Thu Aug 27 02:48:06 +0000 2009"+ userFavoritesCount obj @?= 17313++case_parseUserLangNull :: Assertion+case_parseUserLangNull = withJSON fixture_user_thimura_lang_null $ \obj -> do+ userId obj @?= 69179963+ userName obj @?= "ちむら"+ userScreenName obj @?= "thimura"+ userDescription obj @?= Just "真紅かわいい"+ userLocation obj @?= Just "State# Irotoridori.No.World"+ userProfileImageURL obj @?= Just "http://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png"+ userURL obj @?= Just "http://t.co/TFUAsAffX0"+ userProtected obj @?= False+ userFollowersCount obj @?= 754+ userFriendsCount obj @?= 780+ userStatusesCount obj @?= 24709+ -- N.B. the only difference between this one and case_parseUser is in lang+ userLang obj @?= Nothing userCreatedAt obj @?= "Thu Aug 27 02:48:06 +0000 2009" userFavoritesCount obj @?= 17313
tests/fixtures/media_extended_entity.json view
@@ -1,1 +1,1 @@-{"in_reply_to_status_id":null,"id_str":"479666034073296896","truncated":false,"possibly_sensitive":false,"in_reply_to_screen_name":null,"extended_entities":{"media":[{"id_str":"479665892922376192","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","indices":[36,58],"id":479665892922376192,"media_url":"http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","type":"photo","sizes":{"small":{"w":340,"resize":"fit","h":604},"large":{"w":576,"resize":"fit","h":1024},"medium":{"w":576,"resize":"fit","h":1024},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665897150234624","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/Bqgdl5KCQAA9g9V.jpg","indices":[36,58],"id":479665897150234624,"media_url":"http://pbs.twimg.com/media/Bqgdl5KCQAA9g9V.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":191},"large":{"w":1024,"resize":"fit","h":576},"medium":{"w":599,"resize":"fit","h":337},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665901545852929","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdmJiCEAEp0EI.jpg","indices":[36,58],"id":479665901545852929,"media_url":"http://pbs.twimg.com/media/BqgdmJiCEAEp0EI.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":225},"large":{"w":1024,"resize":"fit","h":678},"medium":{"w":599,"resize":"fit","h":397},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665905375256576","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdmXzCIAAa2lU.jpg","indices":[36,58],"id":479665905375256576,"media_url":"http://pbs.twimg.com/media/BqgdmXzCIAAa2lU.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":225},"large":{"w":1024,"resize":"fit","h":678},"medium":{"w":599,"resize":"fit","h":397},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"}]},"entities":{"symbols":[],"urls":[],"media":[{"id_str":"479665892922376192","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","indices":[36,58],"id":479665892922376192,"media_url":"http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","type":"photo","sizes":{"small":{"w":340,"resize":"fit","h":604},"large":{"w":576,"resize":"fit","h":1024},"medium":{"w":576,"resize":"fit","h":1024},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"}],"user_mentions":[],"hashtags":[{"text":"testnyan","indices":[26,35]}]},"text":"multiple image tweet test #testnyan http://t.co/qOjPwmgLKO","in_reply_to_user_id_str":null,"favorited":false,"coordinates":null,"retweeted":false,"user":{"screen_name":"thimura_test","is_translation_enabled":false,"default_profile":true,"profile_image_url":"http://abs.twimg.com/sticky/default_profile_images/default_profile_6_normal.png","default_profile_image":true,"id_str":"2418883074","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","protected":false,"location":"","entities":{"description":{"urls":[]}},"profile_background_color":"C0DEED","utc_offset":null,"url":null,"profile_text_color":"333333","profile_image_url_https":"https://abs.twimg.com/sticky/default_profile_images/default_profile_6_normal.png","verified":false,"statuses_count":5,"profile_background_tile":false,"following":false,"lang":"ja","follow_request_sent":false,"profile_sidebar_fill_color":"DDEEF6","time_zone":null,"name":"thimura test","profile_sidebar_border_color":"C0DEED","geo_enabled":false,"listed_count":0,"contributors_enabled":false,"created_at":"Sun Mar 30 11:47:17 +0000 2014","id":2418883074,"friends_count":2,"is_translator":false,"favourites_count":0,"notifications":false,"profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_use_background_image":true,"description":"","profile_link_color":"0084B4","followers_count":2},"lang":"et","retweet_count":0,"in_reply_to_user_id":null,"created_at":"Thu Jun 19 16:44:28 +0000 2014","source":"\u003ca href=\"https://twitter.com/thimura\" rel=\"nofollow\"\u003e二階堂真紅\u003c/a\u003e","geo":null,"id":479666034073296896,"in_reply_to_status_id_str":null,"favorite_count":0,"contributors":null,"place":null}+{"created_at":"Fri Jul 29 20:14:40 +0000 2016","id":759119974329823200,"id_str":"759119974329823233","text":"look at all these cats tho https://t.co/Qi316FhOwe","truncated":false,"entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[],"media":[{"id":759119267472089100,"id_str":"759119267472089089","indices":[27,50],"media_url":"http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","media_url_https":"https://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"large":{"w":300,"h":400,"resize":"fit"},"medium":{"w":300,"h":400,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":300,"h":400,"resize":"fit"}}}]},"extended_entities":{"media":[{"id":759119267472089100,"id_str":"759119267472089089","indices":[27,50],"media_url":"http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","media_url_https":"https://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"large":{"w":300,"h":400,"resize":"fit"},"medium":{"w":300,"h":400,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":300,"h":400,"resize":"fit"}},"ext_alt_text":"A small tabby kitten"},{"id":759119396350505000,"id_str":"759119396350504960","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvEamUsAARiX2.jpg","media_url_https":"https://pbs.twimg.com/media/CojvEamUsAARiX2.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"medium":{"w":500,"h":301,"resize":"fit"},"small":{"w":500,"h":301,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":500,"h":301,"resize":"fit"}},"ext_alt_text":"four kittens sitting together"},{"id":759119476621086700,"id_str":"759119476621086720","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvJFoUkAAoWIR.jpg","media_url_https":"https://pbs.twimg.com/media/CojvJFoUkAAoWIR.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":500,"h":600,"resize":"fit"},"medium":{"w":500,"h":600,"resize":"fit"},"small":{"w":500,"h":600,"resize":"fit"}},"ext_alt_text":"a cute soft kitten with a red ornament"},{"id":759119583466758100,"id_str":"759119583466758145","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvPTqUIAEYF7l.jpg","media_url_https":"https://pbs.twimg.com/media/CojvPTqUIAEYF7l.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"medium":{"w":650,"h":600,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":650,"h":600,"resize":"fit"},"large":{"w":650,"h":600,"resize":"fit"}},"ext_alt_text":"a skeptical-looking tabby cat outside"}]},"source":"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":753372895682949100,"id_str":"753372895682949120","name":"Please Caption!","screen_name":"PleaseCaption","location":"","description":"","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":0,"friends_count":1,"listed_count":0,"created_at":"Wed Jul 13 23:37:50 +0000 2016","favourites_count":0,"utc_offset":-25200,"time_zone":"Pacific Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":7,"lang":"en-gb","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"F5F8FA","profile_background_image_url":null,"profile_background_image_url_https":null,"profile_background_tile":false,"profile_image_url":"http://abs.twimg.com/sticky/default_profile_images/default_profile_5_normal.png","profile_image_url_https":"https://abs.twimg.com/sticky/default_profile_images/default_profile_5_normal.png","profile_link_color":"2B7BB9","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"has_extended_profile":false,"default_profile":true,"default_profile_image":true,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"possibly_sensitive_appealable":false,"lang":"en"}
+ tests/fixtures/user_thimura_lang_null.json view
@@ -0,0 +1,1 @@+{"screen_name":"thimura","profile_banner_url":"https://pbs.twimg.com/profile_banners/69179963/1402419439","status":{"in_reply_to_status_id":null,"id_str":"495192122836783104","truncated":false,"in_reply_to_screen_name":null,"entities":{"symbols":[],"urls":[],"user_mentions":[],"hashtags":[]},"text":"くそあつい","in_reply_to_user_id_str":null,"favorited":false,"coordinates":null,"retweeted":false,"lang":null,"retweet_count":0,"in_reply_to_user_id":null,"created_at":"Fri Aug 01 12:59:36 +0000 2014","source":"\u003ca href=\"http://twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c/a\u003e","geo":null,"id":495192122836783104,"in_reply_to_status_id_str":null,"favorite_count":0,"contributors":null,"place":null},"is_translation_enabled":false,"needs_phone_verification":false,"default_profile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png","default_profile_image":false,"id_str":"69179963","profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/378800000154132099/hn0DlU5i.png","protected":false,"location":"State# Irotoridori.No.World","entities":{"url":{"urls":[{"expanded_url":"http://d.hatena.ne.jp/thimura","url":"http://t.co/TFUAsAffX0","indices":[0,22],"display_url":"d.hatena.ne.jp/thimura"}]},"description":{"urls":[]}},"profile_background_color":"000000","utc_offset":32400,"url":"http://t.co/TFUAsAffX0","profile_text_color":"333333","profile_image_url_https":"https://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png","suspended":false,"verified":false,"statuses_count":24709,"profile_background_tile":true,"following":false,"lang":"en","follow_request_sent":false,"profile_sidebar_fill_color":"BABDD1","time_zone":"Tokyo","name":"ちむら","profile_sidebar_border_color":"FFFFFF","geo_enabled":false,"listed_count":102,"contributors_enabled":false,"created_at":"Thu Aug 27 02:48:06 +0000 2009","id":69179963,"friends_count":780,"is_translator":false,"favourites_count":17313,"notifications":false,"profile_background_image_url":"http://pbs.twimg.com/profile_background_images/378800000154132099/hn0DlU5i.png","profile_use_background_image":true,"description":"真紅かわいい","profile_link_color":"00660F","followers_count":754}
twitter-types.cabal view
@@ -1,17 +1,19 @@ name: twitter-types-version: 0.7.2.2+version: 0.8.0 license: BSD3 license-file: LICENSE author: Takahiro HIMURA maintainer: Takahiro HIMURA <taka@himura.jp> synopsis: Twitter JSON parser and types-description: This package uses enumerator package for access Twitter API.+description: Please see the README on Github at <https://github.com/himura/twitter-types#readme> category: Web stability: Experimental-cabal-version: >= 1.8 build-type: Simple+cabal-version: >= 1.10 homepage: https://github.com/himura/twitter-types +tested-with: GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5+ extra-source-files: README.md tests/fixtures/*.json@@ -20,58 +22,46 @@ type: git location: git://github.com/himura/twitter-types.git -flag time15- description: use time >= 1.5.- default: True- library ghc-options: -Wall build-depends:- base >= 4 && < 5+ base >= 4.9 && < 5 , aeson >= 0.3.2.2 , text+ , time >= 1.5 , unordered-containers - if flag(time15)- build-depends:- time >= 1.5- else- build-depends:- time >= 1.2 && < 1.5- , old-locale-- if impl(ghc < 7.6)- build-depends: ghc-prim- exposed-modules: Web.Twitter.Types + default-language: Haskell2010+ test-suite tests type: exitcode-stdio-1.0 hs-source-dirs: tests main-is: TypesTest.hs build-depends:- base >= 4.0 && < 5- , template-haskell- , test-framework >= 0.3.3- , test-framework-hunit- , test-framework-quickcheck2+ base >= 4.9 && < 5+ , twitter-types , HUnit , QuickCheck- , derive , aeson , attoparsec , bytestring+ , derive+ , directory+ , filepath+ , template-haskell+ , test-framework >= 0.3.3+ , test-framework-hunit+ , test-framework-quickcheck2 , text , time , unordered-containers- , filepath- , directory- , twitter-types- , old-locale other-modules: Fixtures Instances ghc-options: -Wall+ default-language: Haskell2010