module Twilio.Transcription
(
Transcription(..)
, Twilio.Transcription.get
, PriceUnit(..)
, TranscriptionStatus(..)
) where
import Control.Error.Safe
import Control.Monad
import Control.Monad.Catch
import Data.Aeson
import Data.Monoid
import Data.Text (Text)
import Data.Time.Clock
import Network.URI
import Control.Monad.Twilio
import Twilio.Internal.Parser
import Twilio.Internal.Request
import Twilio.Internal.Resource as Resource
import Twilio.Types
data Transcription = Transcription
{ sid :: !TranscriptionSID
, dateCreated :: !UTCTime
, dateUpdated :: !UTCTime
, accountSID :: !AccountSID
, status :: !TranscriptionStatus
, recordingSID :: !RecordingSID
, duration :: !(Maybe Int)
, transcriptionText :: !Text
, price :: !(Maybe Double)
, priceUnit :: !PriceUnit
, apiVersion :: !APIVersion
, uri :: !URI
} deriving (Show, Eq)
instance FromJSON Transcription where
parseJSON (Object v) = Transcription
<$> v .: "sid"
<*> (v .: "date_created" >>= parseDateTime)
<*> (v .: "date_updated" >>= parseDateTime)
<*> v .: "account_sid"
<*> v .: "status"
<*> v .: "recording_sid"
<*> (v .: "duration" <&> fmap readZ
>>= maybeReturn')
<*> v .: "transcription_text"
<*> (v .: "price" <&> fmap readZ
>>= maybeReturn')
<*> v .: "price_unit"
<*> v .: "api_version"
<*> (v .: "uri" <&> parseRelativeReference
>>= maybeReturn)
parseJSON _ = mzero
instance Get1 TranscriptionSID Transcription where
get1 (getSID -> sid) = request parseJSONFromResponse =<< makeTwilioRequest
("/Transcriptions/" <> sid <> ".json")
get :: MonadThrow m => TranscriptionSID -> TwilioT m Transcription
get = Resource.get
data TranscriptionStatus
= InProgress
| Completed
| Failed
deriving Eq
instance Show TranscriptionStatus where
show InProgress = "in-progress"
show Completed = "completed"
show Failed = "failed"
instance FromJSON TranscriptionStatus where
parseJSON (String "in-progress") = return InProgress
parseJSON (String "completed") = return Completed
parseJSON (String "failed") = return Failed
parseJSON _ = mzero