module Network.AWS.StorageGateway.UpdateMaintenanceStartTime
    (
    
      UpdateMaintenanceStartTime
    
    , updateMaintenanceStartTime
    
    , umstDayOfWeek
    , umstGatewayARN
    , umstHourOfDay
    , umstMinuteOfHour
    
    , UpdateMaintenanceStartTimeResponse
    
    , updateMaintenanceStartTimeResponse
    
    , umstrGatewayARN
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.JSON
import Network.AWS.StorageGateway.Types
import qualified GHC.Exts
data UpdateMaintenanceStartTime = UpdateMaintenanceStartTime
    { _umstDayOfWeek    :: Nat
    , _umstGatewayARN   :: Text
    , _umstHourOfDay    :: Nat
    , _umstMinuteOfHour :: Nat
    } deriving (Eq, Ord, Read, Show)
updateMaintenanceStartTime :: Text 
                           -> Natural 
                           -> Natural 
                           -> Natural 
                           -> UpdateMaintenanceStartTime
updateMaintenanceStartTime p1 p2 p3 p4 = UpdateMaintenanceStartTime
    { _umstGatewayARN   = p1
    , _umstHourOfDay    = withIso _Nat (const id) p2
    , _umstMinuteOfHour = withIso _Nat (const id) p3
    , _umstDayOfWeek    = withIso _Nat (const id) p4
    }
umstDayOfWeek :: Lens' UpdateMaintenanceStartTime Natural
umstDayOfWeek = lens _umstDayOfWeek (\s a -> s { _umstDayOfWeek = a }) . _Nat
umstGatewayARN :: Lens' UpdateMaintenanceStartTime Text
umstGatewayARN = lens _umstGatewayARN (\s a -> s { _umstGatewayARN = a })
umstHourOfDay :: Lens' UpdateMaintenanceStartTime Natural
umstHourOfDay = lens _umstHourOfDay (\s a -> s { _umstHourOfDay = a }) . _Nat
umstMinuteOfHour :: Lens' UpdateMaintenanceStartTime Natural
umstMinuteOfHour = lens _umstMinuteOfHour (\s a -> s { _umstMinuteOfHour = a }) . _Nat
newtype UpdateMaintenanceStartTimeResponse = UpdateMaintenanceStartTimeResponse
    { _umstrGatewayARN :: Maybe Text
    } deriving (Eq, Ord, Read, Show, Monoid)
updateMaintenanceStartTimeResponse :: UpdateMaintenanceStartTimeResponse
updateMaintenanceStartTimeResponse = UpdateMaintenanceStartTimeResponse
    { _umstrGatewayARN = Nothing
    }
umstrGatewayARN :: Lens' UpdateMaintenanceStartTimeResponse (Maybe Text)
umstrGatewayARN = lens _umstrGatewayARN (\s a -> s { _umstrGatewayARN = a })
instance ToPath UpdateMaintenanceStartTime where
    toPath = const "/"
instance ToQuery UpdateMaintenanceStartTime where
    toQuery = const mempty
instance ToHeaders UpdateMaintenanceStartTime
instance ToJSON UpdateMaintenanceStartTime where
    toJSON UpdateMaintenanceStartTime{..} = object
        [ "GatewayARN"   .= _umstGatewayARN
        , "HourOfDay"    .= _umstHourOfDay
        , "MinuteOfHour" .= _umstMinuteOfHour
        , "DayOfWeek"    .= _umstDayOfWeek
        ]
instance AWSRequest UpdateMaintenanceStartTime where
    type Sv UpdateMaintenanceStartTime = StorageGateway
    type Rs UpdateMaintenanceStartTime = UpdateMaintenanceStartTimeResponse
    request  = post "UpdateMaintenanceStartTime"
    response = jsonResponse
instance FromJSON UpdateMaintenanceStartTimeResponse where
    parseJSON = withObject "UpdateMaintenanceStartTimeResponse" $ \o -> UpdateMaintenanceStartTimeResponse
        <$> o .:? "GatewayARN"