-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | The Rakuten API in Haskell
--   
--   See README at <a>https://github.com/matsubara0507/rakuten#readme</a>
@package rakuten
@version 0.1.1.4

module Rakuten.Types.Base
type ImageUrl = Record '["imageUrl" :> Text]

module Rakuten.Types.Class

-- | Helper Type Class of <a>QueryParam</a>
class ToParam a
toParam :: (ToParam a, QueryParam param, Monoid param) => Text -> a -> param

-- | Helper Type Class of <a>QueryParam</a> use to construct request
--   parameter from param type, e.g. <tt>IchibaItemSearchParam</tt>
class ToParams a
toParams :: (ToParams a, QueryParam param, Monoid param) => a -> param
instance Data.Extensible.Class.Forall (Data.Extensible.Field.KeyValue GHC.TypeLits.KnownSymbol Rakuten.Types.Class.ToParam) xs => Rakuten.Types.Class.ToParams (Data.Extensible.Field.Record xs)
instance Rakuten.Types.Class.ToParam GHC.Types.Int
instance Rakuten.Types.Class.ToParam GHC.Types.Double
instance Rakuten.Types.Class.ToParam Data.Text.Internal.Text
instance Rakuten.Types.Class.ToParam GHC.Types.Bool
instance Rakuten.Types.Class.ToParam [Data.Text.Internal.Text]
instance Rakuten.Types.Class.ToParam a => Rakuten.Types.Class.ToParam (GHC.Base.Maybe a)
instance Rakuten.Types.Class.ToParam a => Rakuten.Types.Class.ToParam (Data.Functor.Identity.Identity a)
instance Data.Default.Class.Default a => Data.Default.Class.Default (Data.Functor.Identity.Identity a)
instance Data.Default.Class.Default Data.Text.Internal.Text
instance Data.Extensible.Class.Forall (Data.Extensible.Field.KeyValue GHC.TypeLits.KnownSymbol Data.Default.Class.Default) xs => Data.Default.Class.Default (Data.Extensible.Field.Record xs)

module Rakuten.Types.Error

-- | when error, Rakuten is response: { "error": "wrong_parameter",
--   "error_description": "specify valid applicationId" }
type RakutenError = Record '["error" :> Text, "error_description" :> Text]

module Rakuten.Types.Ichiba
type IchibaItems = Record '["count" :> Int, "page" :> Int, "first" :> Int, "last" :> Int, "hits" :> Int, "carrier" :> Int, "pageCount" :> Int, "Items" :> [ItemWrap], "GenreInformation" :> [GenreInformation], "TagInformation" :> [ItemTagGroupWrap]]
type ItemWrap = Record '["Item" :> Item]
type Item = Record '["itemName" :> Text, "catchcopy" :> Text, "itemCode" :> Text, "itemPrice" :> Int, "itemCaption" :> Text, "itemUrl" :> Text, "shopUrl" :> Text, "smallImageUrls" :> [ImageUrl], "mediumImageUrls" :> [ImageUrl], "affiliateUrl" :> Text, "shopAffiliateUrl" :> Text, "imageFlag" :> Int, "availability" :> Int, "taxFlag" :> Int, "postageFlag" :> Int, "creditCardFlag" :> Int, "shopOfTheYearFlag" :> Int, "shipOverseasFlag" :> Int, "shipOverseasArea" :> Text, "asurakuFlag" :> Int, "asurakuClosingTime" :> Text, "asurakuArea" :> Text, "affiliateRate" :> Double, "startTime" :> Text, "endTime" :> Text, "reviewCount" :> Int, "reviewAverage" :> Double, "pointRate" :> Int, "pointRateStartTime" :> Text, "pointRateEndTime" :> Text, "giftFlag" :> Int, "shopName" :> Text, "shopCode" :> Text, "genreId" :> Text, "tagIds" :> [Int]]
type IchibaGenres = Record '["parents" :> [ParentGenreWrap], "current" :> Genre, "brothers" :> [BrotherGenreWrap], "children" :> [ChiledGenreWrap], "tagGroups" :> [TagGroupWrap]]
type Genre = Record '["genreId" :> Int, "genreName" :> Text, "genreLevel" :> Int]
type ParentGenre' = Record '["genreId" :> Text, "genreName" :> Text, "genreLevel" :> Int]
type ParentGenreWrap = Record '["parent" :> Genre]
type BrotherGenreWrap = Record '["brother" :> Genre]
type ChiledGenreWrap = Record '["child" :> Genre]
type GenreInformation = Record '["parent" :> [ParentGenre'], "current" :> [CurrentItemGenre], "chiled" :> [ChiledItemGenre]]
type CurrentItemGenre = Record '["genreId" :> Text, "genreName" :> Text, "itemCount" :> Int, "genreLevel" :> Int]
type ChiledItemGenre = Record '["genreId" :> Text, "genreName" :> Text, "itemCount" :> Int, "genreLevel" :> Int]
type TagWrap = Record '["tag" :> Tag]
type TagGroup = Record '["tagGroupName" :> Text, "tagGroupId" :> Int, "tags" :> [TagWrap]]
type TagGroupWrap = Record '["tagGroup" :> TagGroup]
type ItemTag = Record '["tagId" :> Int, "tagName" :> Text, "parentTagId" :> Int, "itemCount" :> Int]
type ItemTagWrap = Record '["tag" :> ItemTag]
type ItemTagGroup = Record '["tagGroupName" :> Text, "tagGroupId" :> Int, "tags" :> [ItemTagWrap]]
type ItemTagGroupWrap = Record '["tagGroup" :> ItemTagGroup]
type IchibaItemSearchParam = Record '["keyword" :> Text, "shopCode" :> Maybe Text, "itemCode" :> Maybe Text, "genreId" :> Maybe Int, "tagId" :> Maybe Int, "hits" :> Maybe Int, "page" :> Maybe Int, "sort" :> Maybe Text, "minPrice" :> Maybe Int, "maxPrice" :> Maybe Int, "availability" :> Maybe Bool, "field" :> Maybe Bool, "carrier" :> Maybe Bool, "imageFlag" :> Maybe Bool, "orFlag" :> Maybe Bool, "NGKeyword" :> Maybe Text, "purchaseType" :> Maybe Int, "shipOverseasFlag" :> Maybe Bool, "shipOverseasArea" :> Maybe Text, "asurakuFlag" :> Maybe Bool, "asurakuArea" :> Maybe Int, "pointRateFlag" :> Maybe Bool, "pointRate" :> Maybe Int, "postageFlag" :> Maybe Bool, "creditCardFlag" :> Maybe Bool, "giftFlag" :> Maybe Bool, "hasReviewFlag" :> Maybe Bool, "maxAffiliateRate" :> Maybe Double, "minAffiliateRate" :> Maybe Double, "hasMovieFlag" :> Maybe Bool, "pamphletFlag" :> Maybe Bool, "appointDeliveryDateFlag" :> Maybe Bool, "genreInformationFlag" :> Maybe Bool, "tagInformationFlag" :> Maybe Bool]
type IchibaGenreSearchParam = Record '["genreId" :> Int, "genrePath" :> Maybe Bool]

module Rakuten.Types

module Rakuten.Client

-- | Application ID
type AppId = Text
type RakutenClient = Record '["applicationId" :> Text, "affiliateId" :> Maybe Text, "callback" :> Maybe Text, "elements" :> [Text]]
defaultRaktenClient :: AppId -> RakutenClient

-- | By using type class, the same functions can be used for mock servers
--   and local hosts.
class Client a where {
    type family ClientScheme a :: Scheme;
}
baseUrl :: Client a => a -> Url (ClientScheme a)
mkHeader :: Client a => a -> Option scheme
instance Rakuten.Client.Client Rakuten.Client.RakutenClient


-- | see: <a>https://webservice.rakuten.co.jp/document/#ichibaApi</a>
module Rakuten.Endpoints.Ichiba

-- | Rakuten Ichiba Item Search API more info:
--   <a>https://webservice.rakuten.co.jp/api/ichibaitemsearch</a>
searchIchibaItem :: (MonadHttp m, Client c) => c -> IchibaItemSearchParam -> m (JsonResponse IchibaItems)

-- | Rakuten Ichiba Genre Search AppId more info:
--   <a>https://webservice.rakuten.co.jp/api/ichibagenresearch</a>
searchIchibaGenre :: (MonadHttp m, Client c) => c -> IchibaGenreSearchParam -> m (JsonResponse IchibaGenres)

module Rakuten.Endpoints


-- | This module is re-export all endpoint functions and types from this
--   package.
module Rakuten
