module Network.AWS.StorageGateway.DescribeMaintenanceStartTime
    (
    
      DescribeMaintenanceStartTime
    
    , describeMaintenanceStartTime
    
    , dmstGatewayARN
    
    , DescribeMaintenanceStartTimeResponse
    
    , describeMaintenanceStartTimeResponse
    
    , dmstrDayOfWeek
    , dmstrGatewayARN
    , dmstrHourOfDay
    , dmstrMinuteOfHour
    , dmstrTimezone
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.JSON
import Network.AWS.StorageGateway.Types
import qualified GHC.Exts
newtype DescribeMaintenanceStartTime = DescribeMaintenanceStartTime
    { _dmstGatewayARN :: Text
    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
describeMaintenanceStartTime :: Text 
                             -> DescribeMaintenanceStartTime
describeMaintenanceStartTime p1 = DescribeMaintenanceStartTime
    { _dmstGatewayARN = p1
    }
dmstGatewayARN :: Lens' DescribeMaintenanceStartTime Text
dmstGatewayARN = lens _dmstGatewayARN (\s a -> s { _dmstGatewayARN = a })
data DescribeMaintenanceStartTimeResponse = DescribeMaintenanceStartTimeResponse
    { _dmstrDayOfWeek    :: Maybe Nat
    , _dmstrGatewayARN   :: Maybe Text
    , _dmstrHourOfDay    :: Maybe Nat
    , _dmstrMinuteOfHour :: Maybe Nat
    , _dmstrTimezone     :: Maybe Text
    } deriving (Eq, Ord, Read, Show)
describeMaintenanceStartTimeResponse :: DescribeMaintenanceStartTimeResponse
describeMaintenanceStartTimeResponse = DescribeMaintenanceStartTimeResponse
    { _dmstrGatewayARN   = Nothing
    , _dmstrHourOfDay    = Nothing
    , _dmstrMinuteOfHour = Nothing
    , _dmstrDayOfWeek    = Nothing
    , _dmstrTimezone     = Nothing
    }
dmstrDayOfWeek :: Lens' DescribeMaintenanceStartTimeResponse (Maybe Natural)
dmstrDayOfWeek = lens _dmstrDayOfWeek (\s a -> s { _dmstrDayOfWeek = a }) . mapping _Nat
dmstrGatewayARN :: Lens' DescribeMaintenanceStartTimeResponse (Maybe Text)
dmstrGatewayARN = lens _dmstrGatewayARN (\s a -> s { _dmstrGatewayARN = a })
dmstrHourOfDay :: Lens' DescribeMaintenanceStartTimeResponse (Maybe Natural)
dmstrHourOfDay = lens _dmstrHourOfDay (\s a -> s { _dmstrHourOfDay = a }) . mapping _Nat
dmstrMinuteOfHour :: Lens' DescribeMaintenanceStartTimeResponse (Maybe Natural)
dmstrMinuteOfHour =
    lens _dmstrMinuteOfHour (\s a -> s { _dmstrMinuteOfHour = a })
        . mapping _Nat
dmstrTimezone :: Lens' DescribeMaintenanceStartTimeResponse (Maybe Text)
dmstrTimezone = lens _dmstrTimezone (\s a -> s { _dmstrTimezone = a })
instance ToPath DescribeMaintenanceStartTime where
    toPath = const "/"
instance ToQuery DescribeMaintenanceStartTime where
    toQuery = const mempty
instance ToHeaders DescribeMaintenanceStartTime
instance ToJSON DescribeMaintenanceStartTime where
    toJSON DescribeMaintenanceStartTime{..} = object
        [ "GatewayARN" .= _dmstGatewayARN
        ]
instance AWSRequest DescribeMaintenanceStartTime where
    type Sv DescribeMaintenanceStartTime = StorageGateway
    type Rs DescribeMaintenanceStartTime = DescribeMaintenanceStartTimeResponse
    request  = post "DescribeMaintenanceStartTime"
    response = jsonResponse
instance FromJSON DescribeMaintenanceStartTimeResponse where
    parseJSON = withObject "DescribeMaintenanceStartTimeResponse" $ \o -> DescribeMaintenanceStartTimeResponse
        <$> o .:? "DayOfWeek"
        <*> o .:? "GatewayARN"
        <*> o .:? "HourOfDay"
        <*> o .:? "MinuteOfHour"
        <*> o .:? "Timezone"