{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.Route53.ListResourceRecordSets -- Copyright : (c) 2013-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Imagine all the resource record sets in a zone listed out in front of -- you. Imagine them sorted lexicographically first by DNS name (with the -- labels reversed, like \"com.amazon.www\" for example), and secondarily, -- lexicographically by record type. This operation retrieves at most -- MaxItems resource record sets from this list, in order, starting at a -- position specified by the Name and Type arguments: -- -- - If both Name and Type are omitted, this means start the results at -- the first RRSET in the HostedZone. -- - If Name is specified but Type is omitted, this means start the -- results at the first RRSET in the list whose name is greater than or -- equal to Name. -- - If both Name and Type are specified, this means start the results at -- the first RRSET in the list whose name is greater than or equal to -- Name and whose type is greater than or equal to Type. -- - It is an error to specify the Type but not the Name. -- -- Use ListResourceRecordSets to retrieve a single known record set by -- specifying the record set\'s name and type, and setting MaxItems = 1 -- -- To retrieve all the records in a HostedZone, first pause any processes -- making calls to ChangeResourceRecordSets. Initially call -- ListResourceRecordSets without a Name and Type to get the first page of -- record sets. For subsequent calls, set Name and Type to the NextName and -- NextType values returned by the previous response. -- -- In the presence of concurrent ChangeResourceRecordSets calls, there is -- no consistency of results across calls to ListResourceRecordSets. The -- only way to get a consistent multi-page snapshot of all RRSETs in a zone -- is to stop making changes while pagination is in progress. -- -- However, the results from ListResourceRecordSets are consistent within a -- page. If MakeChange calls are taking place concurrently, the result of -- each one will either be completely visible in your results or not at -- all. You will not see partial changes, or changes that do not ultimately -- succeed. (This follows from the fact that MakeChange is atomic) -- -- The results from ListResourceRecordSets are strongly consistent with -- ChangeResourceRecordSets. To be precise, if a single process makes a -- call to ChangeResourceRecordSets and receives a successful response, the -- effects of that change will be visible in a subsequent call to -- ListResourceRecordSets by that process. -- -- This operation returns paginated results. module Network.AWS.Route53.ListResourceRecordSets ( -- * Creating a Request listResourceRecordSets , ListResourceRecordSets -- * Request Lenses , lrrsStartRecordName , lrrsStartRecordType , lrrsStartRecordIdentifier , lrrsMaxItems , lrrsHostedZoneId -- * Destructuring the Response , listResourceRecordSetsResponse , ListResourceRecordSetsResponse -- * Response Lenses , lrrsrsNextRecordType , lrrsrsNextRecordName , lrrsrsNextRecordIdentifier , lrrsrsResponseStatus , lrrsrsResourceRecordSets , lrrsrsIsTruncated , lrrsrsMaxItems ) where import Network.AWS.Lens import Network.AWS.Pager import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response import Network.AWS.Route53.Types import Network.AWS.Route53.Types.Product -- | The input for a ListResourceRecordSets request. -- -- /See:/ 'listResourceRecordSets' smart constructor. data ListResourceRecordSets = ListResourceRecordSets' { _lrrsStartRecordName :: !(Maybe Text) , _lrrsStartRecordType :: !(Maybe RecordType) , _lrrsStartRecordIdentifier :: !(Maybe Text) , _lrrsMaxItems :: !(Maybe Text) , _lrrsHostedZoneId :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'ListResourceRecordSets' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'lrrsStartRecordName' -- -- * 'lrrsStartRecordType' -- -- * 'lrrsStartRecordIdentifier' -- -- * 'lrrsMaxItems' -- -- * 'lrrsHostedZoneId' listResourceRecordSets :: Text -- ^ 'lrrsHostedZoneId' -> ListResourceRecordSets listResourceRecordSets pHostedZoneId_ = ListResourceRecordSets' { _lrrsStartRecordName = Nothing , _lrrsStartRecordType = Nothing , _lrrsStartRecordIdentifier = Nothing , _lrrsMaxItems = Nothing , _lrrsHostedZoneId = pHostedZoneId_ } -- | The first name in the lexicographic ordering of domain names that you -- want the 'ListResourceRecordSets' request to list. lrrsStartRecordName :: Lens' ListResourceRecordSets (Maybe Text) lrrsStartRecordName = lens _lrrsStartRecordName (\ s a -> s{_lrrsStartRecordName = a}); -- | The DNS type at which to begin the listing of resource record sets. -- -- Valid values: 'A' | 'AAAA' | 'CNAME' | 'MX' | 'NS' | 'PTR' | 'SOA' | -- 'SPF' | 'SRV' | 'TXT' -- -- Values for Weighted Resource Record Sets: 'A' | 'AAAA' | 'CNAME' | 'TXT' -- -- Values for Regional Resource Record Sets: 'A' | 'AAAA' | 'CNAME' | 'TXT' -- -- Values for Alias Resource Record Sets: 'A' | 'AAAA' -- -- Constraint: Specifying 'type' without specifying 'name' returns an -- < InvalidInput> error. lrrsStartRecordType :: Lens' ListResourceRecordSets (Maybe RecordType) lrrsStartRecordType = lens _lrrsStartRecordType (\ s a -> s{_lrrsStartRecordType = a}); -- | /Weighted resource record sets only:/ If results were truncated for a -- given DNS name and type, specify the value of -- 'ListResourceRecordSetsResponse$NextRecordIdentifier' from the previous -- response to get the next resource record set that has the current DNS -- name and type. lrrsStartRecordIdentifier :: Lens' ListResourceRecordSets (Maybe Text) lrrsStartRecordIdentifier = lens _lrrsStartRecordIdentifier (\ s a -> s{_lrrsStartRecordIdentifier = a}); -- | The maximum number of records you want in the response body. lrrsMaxItems :: Lens' ListResourceRecordSets (Maybe Text) lrrsMaxItems = lens _lrrsMaxItems (\ s a -> s{_lrrsMaxItems = a}); -- | The ID of the hosted zone that contains the resource record sets that -- you want to get. lrrsHostedZoneId :: Lens' ListResourceRecordSets Text lrrsHostedZoneId = lens _lrrsHostedZoneId (\ s a -> s{_lrrsHostedZoneId = a}); instance AWSPager ListResourceRecordSets where page rq rs | stop (rs ^. lrrsrsIsTruncated) = Nothing | isNothing (rs ^. lrrsrsNextRecordName) && isNothing (rs ^. lrrsrsNextRecordType) && isNothing (rs ^. lrrsrsNextRecordIdentifier) = Nothing | otherwise = Just $ rq & lrrsStartRecordName .~ rs ^. lrrsrsNextRecordName & lrrsStartRecordType .~ rs ^. lrrsrsNextRecordType & lrrsStartRecordIdentifier .~ rs ^. lrrsrsNextRecordIdentifier instance AWSRequest ListResourceRecordSets where type Rs ListResourceRecordSets = ListResourceRecordSetsResponse request = get route53 response = receiveXML (\ s h x -> ListResourceRecordSetsResponse' <$> (x .@? "NextRecordType") <*> (x .@? "NextRecordName") <*> (x .@? "NextRecordIdentifier") <*> (pure (fromEnum s)) <*> (x .@? "ResourceRecordSets" .!@ mempty >>= parseXMLList "ResourceRecordSet") <*> (x .@ "IsTruncated") <*> (x .@ "MaxItems")) instance Hashable ListResourceRecordSets instance NFData ListResourceRecordSets instance ToHeaders ListResourceRecordSets where toHeaders = const mempty instance ToPath ListResourceRecordSets where toPath ListResourceRecordSets'{..} = mconcat ["/2013-04-01/hostedzone/", toBS _lrrsHostedZoneId, "/rrset"] instance ToQuery ListResourceRecordSets where toQuery ListResourceRecordSets'{..} = mconcat ["name" =: _lrrsStartRecordName, "type" =: _lrrsStartRecordType, "identifier" =: _lrrsStartRecordIdentifier, "maxitems" =: _lrrsMaxItems] -- | A complex type that contains information about the resource record sets -- that are returned by the request and information about the response. -- -- /See:/ 'listResourceRecordSetsResponse' smart constructor. data ListResourceRecordSetsResponse = ListResourceRecordSetsResponse' { _lrrsrsNextRecordType :: !(Maybe RecordType) , _lrrsrsNextRecordName :: !(Maybe Text) , _lrrsrsNextRecordIdentifier :: !(Maybe Text) , _lrrsrsResponseStatus :: !Int , _lrrsrsResourceRecordSets :: ![ResourceRecordSet] , _lrrsrsIsTruncated :: !Bool , _lrrsrsMaxItems :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'ListResourceRecordSetsResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'lrrsrsNextRecordType' -- -- * 'lrrsrsNextRecordName' -- -- * 'lrrsrsNextRecordIdentifier' -- -- * 'lrrsrsResponseStatus' -- -- * 'lrrsrsResourceRecordSets' -- -- * 'lrrsrsIsTruncated' -- -- * 'lrrsrsMaxItems' listResourceRecordSetsResponse :: Int -- ^ 'lrrsrsResponseStatus' -> Bool -- ^ 'lrrsrsIsTruncated' -> Text -- ^ 'lrrsrsMaxItems' -> ListResourceRecordSetsResponse listResourceRecordSetsResponse pResponseStatus_ pIsTruncated_ pMaxItems_ = ListResourceRecordSetsResponse' { _lrrsrsNextRecordType = Nothing , _lrrsrsNextRecordName = Nothing , _lrrsrsNextRecordIdentifier = Nothing , _lrrsrsResponseStatus = pResponseStatus_ , _lrrsrsResourceRecordSets = mempty , _lrrsrsIsTruncated = pIsTruncated_ , _lrrsrsMaxItems = pMaxItems_ } -- | If the results were truncated, the type of the next record in the list. -- This element is present only if -- < ListResourceRecordSetsResponse$IsTruncated> is true. lrrsrsNextRecordType :: Lens' ListResourceRecordSetsResponse (Maybe RecordType) lrrsrsNextRecordType = lens _lrrsrsNextRecordType (\ s a -> s{_lrrsrsNextRecordType = a}); -- | If the results were truncated, the name of the next record in the list. -- This element is present only if -- < ListResourceRecordSetsResponse$IsTruncated> is true. lrrsrsNextRecordName :: Lens' ListResourceRecordSetsResponse (Maybe Text) lrrsrsNextRecordName = lens _lrrsrsNextRecordName (\ s a -> s{_lrrsrsNextRecordName = a}); -- | /Weighted resource record sets only:/ If results were truncated for a -- given DNS name and type, the value of 'SetIdentifier' for the next -- resource record set that has the current DNS name and type. lrrsrsNextRecordIdentifier :: Lens' ListResourceRecordSetsResponse (Maybe Text) lrrsrsNextRecordIdentifier = lens _lrrsrsNextRecordIdentifier (\ s a -> s{_lrrsrsNextRecordIdentifier = a}); -- | The response status code. lrrsrsResponseStatus :: Lens' ListResourceRecordSetsResponse Int lrrsrsResponseStatus = lens _lrrsrsResponseStatus (\ s a -> s{_lrrsrsResponseStatus = a}); -- | A complex type that contains information about the resource record sets -- that are returned by the request. lrrsrsResourceRecordSets :: Lens' ListResourceRecordSetsResponse [ResourceRecordSet] lrrsrsResourceRecordSets = lens _lrrsrsResourceRecordSets (\ s a -> s{_lrrsrsResourceRecordSets = a}) . _Coerce; -- | A flag that indicates whether there are more resource record sets to be -- listed. If your results were truncated, you can make a follow-up request -- for the next page of results by using the -- < ListResourceRecordSetsResponse$NextRecordName> element. -- -- Valid Values: 'true' | 'false' lrrsrsIsTruncated :: Lens' ListResourceRecordSetsResponse Bool lrrsrsIsTruncated = lens _lrrsrsIsTruncated (\ s a -> s{_lrrsrsIsTruncated = a}); -- | The maximum number of records you requested. The maximum value of -- 'MaxItems' is 100. lrrsrsMaxItems :: Lens' ListResourceRecordSetsResponse Text lrrsrsMaxItems = lens _lrrsrsMaxItems (\ s a -> s{_lrrsrsMaxItems = a}); instance NFData ListResourceRecordSetsResponse