packages feed

telega-0.1.4: Network/Telegram/API/Bot/Endpoint.hs

module Network.Telegram.API.Bot.Endpoint
	(Endpoint (..), Payload, Drop, Edit, Post, Purge) where

import "aeson" Data.Aeson (FromJSON, Value)
import "base" Data.String (String)

import Network.Telegram.API.Bot.Core (Telegram)
import Network.Telegram.API.Bot.Internal (telegram_request)

type family Payload a = r | r -> a

data Drop a
data Edit a
data Post a
data Purge a

class Endpoint a where
	{-# MINIMAL payload, endpoint #-}
	payload :: Payload a -> Value
	endpoint :: Payload a -> String
	request :: FromJSON r => Payload a -> Telegram e r
	request x = telegram_request (endpoint x) (payload x)