module Network.AWS.S3.GetObjectAcl
    (
    
      GetObjectAcl
    
    , getObjectAcl
    
    , goaBucket
    , goaKey
    , goaVersionId
    
    , GetObjectAclResponse
    
    , getObjectAclResponse
    
    , goarGrants
    , goarOwner
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.S3
import Network.AWS.S3.Types
import qualified GHC.Exts
data GetObjectAcl = GetObjectAcl
    { _goaBucket    :: Text
    , _goaKey       :: Text
    , _goaVersionId :: Maybe Text
    } deriving (Eq, Ord, Show)
getObjectAcl :: Text 
             -> Text 
             -> GetObjectAcl
getObjectAcl p1 p2 = GetObjectAcl
    { _goaBucket    = p1
    , _goaKey       = p2
    , _goaVersionId = Nothing
    }
goaBucket :: Lens' GetObjectAcl Text
goaBucket = lens _goaBucket (\s a -> s { _goaBucket = a })
goaKey :: Lens' GetObjectAcl Text
goaKey = lens _goaKey (\s a -> s { _goaKey = a })
goaVersionId :: Lens' GetObjectAcl (Maybe Text)
goaVersionId = lens _goaVersionId (\s a -> s { _goaVersionId = a })
data GetObjectAclResponse = GetObjectAclResponse
    { _goarGrants :: List "Grant" Grant
    , _goarOwner  :: Maybe Owner
    } deriving (Eq, Show)
getObjectAclResponse :: GetObjectAclResponse
getObjectAclResponse = GetObjectAclResponse
    { _goarOwner  = Nothing
    , _goarGrants = mempty
    }
goarGrants :: Lens' GetObjectAclResponse [Grant]
goarGrants = lens _goarGrants (\s a -> s { _goarGrants = a }) . _List
goarOwner :: Lens' GetObjectAclResponse (Maybe Owner)
goarOwner = lens _goarOwner (\s a -> s { _goarOwner = a })
instance ToPath GetObjectAcl where
    toPath GetObjectAcl{..} = mconcat
        [ "/"
        , toText _goaBucket
        , "/"
        , toText _goaKey
        ]
instance ToQuery GetObjectAcl where
    toQuery GetObjectAcl{..} = mconcat
        [ "acl"
        , "versionId" =? _goaVersionId
        ]
instance ToHeaders GetObjectAcl
instance ToXMLRoot GetObjectAcl where
    toXMLRoot = const (namespaced ns "GetObjectAcl" [])
instance ToXML GetObjectAcl
instance AWSRequest GetObjectAcl where
    type Sv GetObjectAcl = S3
    type Rs GetObjectAcl = GetObjectAclResponse
    request  = get
    response = xmlResponse
instance FromXML GetObjectAclResponse where
    parseXML x = GetObjectAclResponse
        <$> x .@  "AccessControlList"
        <*> x .@? "Owner"