haskmon-0.2.2.0: src/Haskmon/Client.hs
module Haskmon.Client(
getPokedexById,
getNationalPokedex,
getPokemonById,
getPokemonByName,
getAbilityById,
getMoveById,
getTypeById,
getEggGroupById,
getDescriptionById,
getGameById,
getSpriteById
) where
import Haskmon.Types
import Haskmon.Resource(getResource)
import Data.Aeson(FromJSON)
type ID = Word
-- | Utility wrapper for `ById` functions
getResourceById :: FromJSON a => String -> String -> IO a
getResourceById res dbId = getResource $ "api/v1/" ++ res ++ "/" ++ dbId ++ "/"
----------------------------------------------------------------------------
-- | Get a pokedex. Warning: returns a large list of pokemon resources
getPokedexById :: ID -> IO Pokedex
getPokedexById = getResourceById "pokedex" . show
getNationalPokedex :: IO Pokedex
getNationalPokedex = getPokedexById 1 -- At the moment, this is the only pokedex
-- | Get a pokemon by ID
getPokemonById :: ID -> IO Pokemon
getPokemonById = getResourceById "pokemon" . show
-- | Lookup a pokemon by name in the national pokedex
getPokemonByName :: String -- ^ Name of the pokemon
-> IO Pokemon
getPokemonByName = getResourceById "pokemon"
-- | Get an ability by ID
getAbilityById :: ID -> IO Ability
getAbilityById = getResourceById "ability" . show
-- | Get a move by ID
getMoveById :: ID -> IO Move
getMoveById = getResourceById "move" . show
-- | Get a type by ID
getTypeById :: ID -> IO Type
getTypeById = getResourceById "type" . show
--
-- | Get a egg group by ID
getEggGroupById :: ID -> IO EggGroup
getEggGroupById = getResourceById "egg" . show
-- | Get a description group by ID
getDescriptionById :: ID -> IO Description
getDescriptionById = getResourceById "description" . show
-- | Get a game by ID
getGameById :: ID -> IO Description
getGameById = getResourceById "game" . show
-- | Get Sprite by ID
getSpriteById :: ID -> IO Sprite
getSpriteById = getResourceById "sprite" . show