{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} -- Module : Network.AWS.ElasticTranscoder.CreateJob -- Copyright : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com> -- License : This Source Code Form is subject to the terms of -- the Mozilla Public License, v. 2.0. -- A copy of the MPL can be found in the LICENSE file or -- you can obtain it at http://mozilla.org/MPL/2.0/. -- Maintainer : Brendan Hay <brendan.g.hay@gmail.com> -- Stability : experimental -- Portability : non-portable (GHC extensions) -- | When you create a job, Elastic Transcoder returns JSON data that includes -- the values that you specified plus information about the job that is -- created. If you have specified more than one output for your jobs (for -- example, one output for the Kindle Fire and another output for the Apple -- iPhone 4s), you currently must use the Elastic Transcoder API to list the -- jobs (as opposed to the AWS Console). -- -- <http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/CreateJob.html> module Network.AWS.ElasticTranscoder.CreateJob ( -- * Request CreateJob -- ** Request constructor , createJob -- ** Request lenses , cjInput , cjOutput , cjOutputKeyPrefix , cjOutputs , cjPipelineId , cjPlaylists -- * Response , CreateJobResponse -- ** Response constructor , createJobResponse -- ** Response lenses , cjrJob ) where import Network.AWS.Prelude import Network.AWS.Request.RestJSON import Network.AWS.ElasticTranscoder.Types import qualified GHC.Exts data CreateJob = CreateJob { _cjInput :: JobInput , _cjOutput :: Maybe CreateJobOutput , _cjOutputKeyPrefix :: Maybe Text , _cjOutputs :: List "Outputs" CreateJobOutput , _cjPipelineId :: Text , _cjPlaylists :: List "Playlists" CreateJobPlaylist } deriving (Eq, Show) -- | 'CreateJob' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'cjInput' @::@ 'JobInput' -- -- * 'cjOutput' @::@ 'Maybe' 'CreateJobOutput' -- -- * 'cjOutputKeyPrefix' @::@ 'Maybe' 'Text' -- -- * 'cjOutputs' @::@ ['CreateJobOutput'] -- -- * 'cjPipelineId' @::@ 'Text' -- -- * 'cjPlaylists' @::@ ['CreateJobPlaylist'] -- createJob :: Text -- ^ 'cjPipelineId' -> JobInput -- ^ 'cjInput' -> CreateJob createJob p1 p2 = CreateJob { _cjPipelineId = p1 , _cjInput = p2 , _cjOutput = Nothing , _cjOutputs = mempty , _cjOutputKeyPrefix = Nothing , _cjPlaylists = mempty } -- | A section of the request body that provides information about the file -- that is being transcoded. cjInput :: Lens' CreateJob JobInput cjInput = lens _cjInput (\s a -> s { _cjInput = a }) cjOutput :: Lens' CreateJob (Maybe CreateJobOutput) cjOutput = lens _cjOutput (\s a -> s { _cjOutput = a }) -- | The value, if any, that you want Elastic Transcoder to prepend to the -- names of all files that this job creates, including output files, -- thumbnails, and playlists. cjOutputKeyPrefix :: Lens' CreateJob (Maybe Text) cjOutputKeyPrefix = lens _cjOutputKeyPrefix (\s a -> s { _cjOutputKeyPrefix = a }) -- | A section of the request body that provides information about the -- transcoded (target) files. We recommend that you use the Outputs syntax -- instead of the Output syntax. cjOutputs :: Lens' CreateJob [CreateJobOutput] cjOutputs = lens _cjOutputs (\s a -> s { _cjOutputs = a }) . _List -- | The Id of the pipeline that you want Elastic Transcoder to use for -- transcoding. The pipeline determines several settings, including the -- Amazon S3 bucket from which Elastic Transcoder gets the files to -- transcode and the bucket into which Elastic Transcoder puts the -- transcoded files. cjPipelineId :: Lens' CreateJob Text cjPipelineId = lens _cjPipelineId (\s a -> s { _cjPipelineId = a }) -- | If you specify a preset in PresetId for which the value of Container is -- fmp4 (Fragmented MP4) or ts (MPEG-TS), Playlists contains information -- about the master playlists that you want Elastic Transcoder to create. -- The maximum number of master playlists in a job is 30. cjPlaylists :: Lens' CreateJob [CreateJobPlaylist] cjPlaylists = lens _cjPlaylists (\s a -> s { _cjPlaylists = a }) . _List newtype CreateJobResponse = CreateJobResponse { _cjrJob :: Maybe Job' } deriving (Eq, Show) -- | 'CreateJobResponse' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'cjrJob' @::@ 'Maybe' 'Job'' -- createJobResponse :: CreateJobResponse createJobResponse = CreateJobResponse { _cjrJob = Nothing } -- | A section of the response body that provides information about the job -- that is created. cjrJob :: Lens' CreateJobResponse (Maybe Job') cjrJob = lens _cjrJob (\s a -> s { _cjrJob = a }) instance ToPath CreateJob where toPath = const "/2012-09-25/jobs" instance ToQuery CreateJob where toQuery = const mempty instance ToHeaders CreateJob instance ToJSON CreateJob where toJSON CreateJob{..} = object [ "PipelineId" .= _cjPipelineId , "Input" .= _cjInput , "Output" .= _cjOutput , "Outputs" .= _cjOutputs , "OutputKeyPrefix" .= _cjOutputKeyPrefix , "Playlists" .= _cjPlaylists ] instance AWSRequest CreateJob where type Sv CreateJob = ElasticTranscoder type Rs CreateJob = CreateJobResponse request = post response = jsonResponse instance FromJSON CreateJobResponse where parseJSON = withObject "CreateJobResponse" $ \o -> CreateJobResponse <$> o .:? "Job"