{-|
Module      : Google.Cloud.Compute.Network
Copyright   : (c) 2025 Tushar
License     : MIT
Maintainer  : 
Stability   : experimental

This module provides types and functions for interacting with Google Cloud Platform (GCP)
Compute Engine Network. It supports common operations as listing networks,
along with detailed configuration network properties.

All functions communicate with the GCP Compute Engine API v1 and return either an error
message ('Left') or a parsed response object ('Right').

For more information on the underlying API, see:
<https://cloud.google.com/compute/docs/reference/rest/v1/networks GCP Compute Network Documentation>
-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}

module Google.Cloud.Compute.Network 
  ( -- * Network Operations
    listNetworks
    -- * Data Types
  , NetworkList(..)
  , NetworkMeta(..)
  , NetworkPeering(..)
  , ListNetworksQuery(..)
    -- * Defaults
  , defaultListNetworksQuery
  ) where

import Data.Aeson
import Data.Text (Text)
import Google.Cloud.Common.Core
import Google.Cloud.Compute.Common
import Data.Maybe (catMaybes)
import qualified Data.ByteString.Char8 as BS8

-- | Response structure for listNetworks operation
data NetworkList = NetworkList
  { NetworkList -> Text
kind :: Text
    -- ^ Type of resource (always "compute#networkList")
  , NetworkList -> Text
id_ :: Text
    -- ^ Unique identifier for the resource
  , NetworkList -> [NetworkMeta]
items :: [NetworkMeta]
    -- ^ List of network resources
  , NetworkList -> Maybe Text
nextPageToken :: Maybe Text
    -- ^ Pagination token for next page
  , NetworkList -> Text
selfLink :: Text
    -- ^ Server-defined URL for the resource
  } deriving (NetworkList -> NetworkList -> Bool
(NetworkList -> NetworkList -> Bool)
-> (NetworkList -> NetworkList -> Bool) -> Eq NetworkList
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NetworkList -> NetworkList -> Bool
== :: NetworkList -> NetworkList -> Bool
$c/= :: NetworkList -> NetworkList -> Bool
/= :: NetworkList -> NetworkList -> Bool
Eq, Int -> NetworkList -> ShowS
[NetworkList] -> ShowS
NetworkList -> String
(Int -> NetworkList -> ShowS)
-> (NetworkList -> String)
-> ([NetworkList] -> ShowS)
-> Show NetworkList
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NetworkList -> ShowS
showsPrec :: Int -> NetworkList -> ShowS
$cshow :: NetworkList -> String
show :: NetworkList -> String
$cshowList :: [NetworkList] -> ShowS
showList :: [NetworkList] -> ShowS
Show)

instance FromJSON NetworkList where
  parseJSON :: Value -> Parser NetworkList
parseJSON = String
-> (Object -> Parser NetworkList) -> Value -> Parser NetworkList
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"NetworkList" ((Object -> Parser NetworkList) -> Value -> Parser NetworkList)
-> (Object -> Parser NetworkList) -> Value -> Parser NetworkList
forall a b. (a -> b) -> a -> b
$ \Object
v -> Text -> Text -> [NetworkMeta] -> Maybe Text -> Text -> NetworkList
NetworkList
    (Text
 -> Text -> [NetworkMeta] -> Maybe Text -> Text -> NetworkList)
-> Parser Text
-> Parser
     (Text -> [NetworkMeta] -> Maybe Text -> Text -> NetworkList)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"kind"
    Parser (Text -> [NetworkMeta] -> Maybe Text -> Text -> NetworkList)
-> Parser Text
-> Parser ([NetworkMeta] -> Maybe Text -> Text -> NetworkList)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
    Parser ([NetworkMeta] -> Maybe Text -> Text -> NetworkList)
-> Parser [NetworkMeta]
-> Parser (Maybe Text -> Text -> NetworkList)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [NetworkMeta]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"items"
    Parser (Maybe Text -> Text -> NetworkList)
-> Parser (Maybe Text) -> Parser (Text -> NetworkList)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"nextPageToken"
    Parser (Text -> NetworkList) -> Parser Text -> Parser NetworkList
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"selfLink"

instance ToJSON NetworkList where
  toJSON :: NetworkList -> Value
toJSON NetworkList{[NetworkMeta]
Maybe Text
Text
$sel:kind:NetworkList :: NetworkList -> Text
$sel:id_:NetworkList :: NetworkList -> Text
$sel:items:NetworkList :: NetworkList -> [NetworkMeta]
$sel:nextPageToken:NetworkList :: NetworkList -> Maybe Text
$sel:selfLink:NetworkList :: NetworkList -> Text
kind :: Text
id_ :: Text
items :: [NetworkMeta]
nextPageToken :: Maybe Text
selfLink :: Text
..} = [Pair] -> Value
object
    [ Key
"kind" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
kind
    , Key
"id" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
id_
    , Key
"items" Key -> [NetworkMeta] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [NetworkMeta]
items 
    , Key
"nextPageToken" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
nextPageToken 
    , Key
"selfLink" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
selfLink 
    ]

-- | Detailed network resource metadata
data NetworkMeta = NetworkMeta
  { NetworkMeta -> Text
kind :: Text
    -- ^ Type of resource (always "compute#network")
  , NetworkMeta -> Text
id_ :: Text
    -- ^ Unique identifier for the network
  , NetworkMeta -> Text
creationTimestamp :: Text
    -- ^ Creation timestamp in RFC3339 format
  , NetworkMeta -> Text
name :: Text
    -- ^ Name of the network
  , NetworkMeta -> Maybe Text
description :: Maybe Text
    -- ^ User-provided description
  , NetworkMeta -> Maybe Bool
autoCreateSubnetworks :: Maybe Bool
    -- ^ Whether to auto-create subnetworks
  , NetworkMeta -> [Text]
subnetworks :: [Text]
    -- ^ List of subnetworks URLs in this network
  , NetworkMeta -> Maybe Text
iPv4Range :: Maybe Text
    -- ^ IPv4 range for legacy networks
  , NetworkMeta -> Maybe Text
iPv6Range :: Maybe Text
    -- ^ IPv6 range for legacy networks
  , NetworkMeta -> Maybe Text
gatewayIPv4 :: Maybe Text
    -- ^ Gateway IPv4 address
  , NetworkMeta -> Maybe Int
mtu :: Maybe Int
    -- ^ Maximum transmission unit
  , NetworkMeta -> Maybe [NetworkPeering]
peerings :: Maybe [NetworkPeering]
    -- ^ List of network peerings
  , NetworkMeta -> Text
selfLink :: Text
    -- ^ Server-defined URL for the resource
  , NetworkMeta -> Maybe Bool
enableUlaInternalIpv6 :: Maybe Bool
    -- ^ ULA internal IPv6 support
  , NetworkMeta -> Maybe Text
internalIpv6Range :: Maybe Text
    -- ^ Internal IPv6 range
  , NetworkMeta -> Maybe Text
networkFirewallPolicyEnforcementOrder :: Maybe Text
    -- ^ Firewall policy order
  } deriving (NetworkMeta -> NetworkMeta -> Bool
(NetworkMeta -> NetworkMeta -> Bool)
-> (NetworkMeta -> NetworkMeta -> Bool) -> Eq NetworkMeta
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NetworkMeta -> NetworkMeta -> Bool
== :: NetworkMeta -> NetworkMeta -> Bool
$c/= :: NetworkMeta -> NetworkMeta -> Bool
/= :: NetworkMeta -> NetworkMeta -> Bool
Eq, Int -> NetworkMeta -> ShowS
[NetworkMeta] -> ShowS
NetworkMeta -> String
(Int -> NetworkMeta -> ShowS)
-> (NetworkMeta -> String)
-> ([NetworkMeta] -> ShowS)
-> Show NetworkMeta
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NetworkMeta -> ShowS
showsPrec :: Int -> NetworkMeta -> ShowS
$cshow :: NetworkMeta -> String
show :: NetworkMeta -> String
$cshowList :: [NetworkMeta] -> ShowS
showList :: [NetworkMeta] -> ShowS
Show)

instance FromJSON NetworkMeta where
  parseJSON :: Value -> Parser NetworkMeta
parseJSON = String
-> (Object -> Parser NetworkMeta) -> Value -> Parser NetworkMeta
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"NetworkMeta" ((Object -> Parser NetworkMeta) -> Value -> Parser NetworkMeta)
-> (Object -> Parser NetworkMeta) -> Value -> Parser NetworkMeta
forall a b. (a -> b) -> a -> b
$ \Object
v -> Text
-> Text
-> Text
-> Text
-> Maybe Text
-> Maybe Bool
-> [Text]
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Int
-> Maybe [NetworkPeering]
-> Text
-> Maybe Bool
-> Maybe Text
-> Maybe Text
-> NetworkMeta
NetworkMeta
    (Text
 -> Text
 -> Text
 -> Text
 -> Maybe Text
 -> Maybe Bool
 -> [Text]
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Int
 -> Maybe [NetworkPeering]
 -> Text
 -> Maybe Bool
 -> Maybe Text
 -> Maybe Text
 -> NetworkMeta)
-> Parser Text
-> Parser
     (Text
      -> Text
      -> Text
      -> Maybe Text
      -> Maybe Bool
      -> [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"kind"
    Parser
  (Text
   -> Text
   -> Text
   -> Maybe Text
   -> Maybe Bool
   -> [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser Text
-> Parser
     (Text
      -> Text
      -> Maybe Text
      -> Maybe Bool
      -> [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
    Parser
  (Text
   -> Text
   -> Maybe Text
   -> Maybe Bool
   -> [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser Text
-> Parser
     (Text
      -> Maybe Text
      -> Maybe Bool
      -> [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"creationTimestamp"
    Parser
  (Text
   -> Maybe Text
   -> Maybe Bool
   -> [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser Text
-> Parser
     (Maybe Text
      -> Maybe Bool
      -> [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
    Parser
  (Maybe Text
   -> Maybe Bool
   -> [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser (Maybe Text)
-> Parser
     (Maybe Bool
      -> [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"
    Parser
  (Maybe Bool
   -> [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser (Maybe Bool)
-> Parser
     ([Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"autoCreateSubnetworks"
    Parser
  ([Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser [Text]
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"subnetworks"
    Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"IPv4Range"  -- Match API's casing
    Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"IPv6Range"
    Parser
  (Maybe Text
   -> Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser (Maybe Text)
-> Parser
     (Maybe Int
      -> Maybe [NetworkPeering]
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"gatewayIPv4"
    Parser
  (Maybe Int
   -> Maybe [NetworkPeering]
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> NetworkMeta)
-> Parser (Maybe Int)
-> Parser
     (Maybe [NetworkPeering]
      -> Text -> Maybe Bool -> Maybe Text -> Maybe Text -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"mtu"
    Parser
  (Maybe [NetworkPeering]
   -> Text -> Maybe Bool -> Maybe Text -> Maybe Text -> NetworkMeta)
-> Parser (Maybe [NetworkPeering])
-> Parser
     (Text -> Maybe Bool -> Maybe Text -> Maybe Text -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Object
v Object -> Key -> Parser (Maybe [NetworkPeering])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"peerings")
    Parser
  (Text -> Maybe Bool -> Maybe Text -> Maybe Text -> NetworkMeta)
-> Parser Text
-> Parser (Maybe Bool -> Maybe Text -> Maybe Text -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"selfLink"
    Parser (Maybe Bool -> Maybe Text -> Maybe Text -> NetworkMeta)
-> Parser (Maybe Bool)
-> Parser (Maybe Text -> Maybe Text -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"enableUlaInternalIpv6"
    Parser (Maybe Text -> Maybe Text -> NetworkMeta)
-> Parser (Maybe Text) -> Parser (Maybe Text -> NetworkMeta)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"internalIpv6Range"
    Parser (Maybe Text -> NetworkMeta)
-> Parser (Maybe Text) -> Parser NetworkMeta
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"networkFirewallPolicyEnforcementOrder"

instance ToJSON NetworkMeta where
  toJSON :: NetworkMeta -> Value
toJSON NetworkMeta{[Text]
Maybe Bool
Maybe Int
Maybe [NetworkPeering]
Maybe Text
Text
$sel:kind:NetworkMeta :: NetworkMeta -> Text
$sel:id_:NetworkMeta :: NetworkMeta -> Text
$sel:creationTimestamp:NetworkMeta :: NetworkMeta -> Text
$sel:name:NetworkMeta :: NetworkMeta -> Text
$sel:description:NetworkMeta :: NetworkMeta -> Maybe Text
$sel:autoCreateSubnetworks:NetworkMeta :: NetworkMeta -> Maybe Bool
$sel:subnetworks:NetworkMeta :: NetworkMeta -> [Text]
$sel:iPv4Range:NetworkMeta :: NetworkMeta -> Maybe Text
$sel:iPv6Range:NetworkMeta :: NetworkMeta -> Maybe Text
$sel:gatewayIPv4:NetworkMeta :: NetworkMeta -> Maybe Text
$sel:mtu:NetworkMeta :: NetworkMeta -> Maybe Int
$sel:peerings:NetworkMeta :: NetworkMeta -> Maybe [NetworkPeering]
$sel:selfLink:NetworkMeta :: NetworkMeta -> Text
$sel:enableUlaInternalIpv6:NetworkMeta :: NetworkMeta -> Maybe Bool
$sel:internalIpv6Range:NetworkMeta :: NetworkMeta -> Maybe Text
$sel:networkFirewallPolicyEnforcementOrder:NetworkMeta :: NetworkMeta -> Maybe Text
kind :: Text
id_ :: Text
creationTimestamp :: Text
name :: Text
description :: Maybe Text
autoCreateSubnetworks :: Maybe Bool
subnetworks :: [Text]
iPv4Range :: Maybe Text
iPv6Range :: Maybe Text
gatewayIPv4 :: Maybe Text
mtu :: Maybe Int
peerings :: Maybe [NetworkPeering]
selfLink :: Text
enableUlaInternalIpv6 :: Maybe Bool
internalIpv6Range :: Maybe Text
networkFirewallPolicyEnforcementOrder :: Maybe Text
..} = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
    [ Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"kind" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
kind)
    , Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"id" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
id_)
    , Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"creationTimestamp" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
creationTimestamp )
    , Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"name" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
name )
    , (Key
"description" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
description 
    , (Key
"autoCreateSubnetworks" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Bool
autoCreateSubnetworks
    , Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"subnetworks" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Text]
subnetworks)
    , (Key
"IPv4Range" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
iPv4Range 
    , (Key
"IPv6Range" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
iPv6Range 
    , (Key
"gatewayIPv4" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
gatewayIPv4 
    , (Key
"mtu" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Int -> Pair) -> Maybe Int -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Int
mtu 
    , Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"peerings" Key -> Maybe [NetworkPeering] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe [NetworkPeering]
peerings )
    , Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"selfLink" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
selfLink )
    , (Key
"enableUlaInternalIpv6" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Bool
enableUlaInternalIpv6 
    , (Key
"internalIpv6Range" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
internalIpv6Range 
    , (Key
"networkFirewallPolicyEnforcementOrder" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
networkFirewallPolicyEnforcementOrder 
    ]

-- | Network peering configuration
data NetworkPeering = NetworkPeering
  { NetworkPeering -> Text
name :: Text
    -- ^ Name of the peering
  , NetworkPeering -> Text
network :: Text
    -- ^ URL of peer network
  , NetworkPeering -> Text
state :: Text
    -- ^ Peering state (ACTIVE/INACTIVE)
  , NetworkPeering -> Maybe Text
stateDetails :: Maybe Text
    -- ^ Detailed state information
  , NetworkPeering -> Maybe Bool
exchangeSubnetRoutes :: Maybe Bool
    -- ^ Subnet route exchange
  , NetworkPeering -> Maybe Bool
exportCustomRoutes :: Maybe Bool
    -- ^ Custom route export
  , NetworkPeering -> Maybe Bool
importCustomRoutes :: Maybe Bool
    -- ^ Custom route import
  } deriving (NetworkPeering -> NetworkPeering -> Bool
(NetworkPeering -> NetworkPeering -> Bool)
-> (NetworkPeering -> NetworkPeering -> Bool) -> Eq NetworkPeering
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NetworkPeering -> NetworkPeering -> Bool
== :: NetworkPeering -> NetworkPeering -> Bool
$c/= :: NetworkPeering -> NetworkPeering -> Bool
/= :: NetworkPeering -> NetworkPeering -> Bool
Eq, Int -> NetworkPeering -> ShowS
[NetworkPeering] -> ShowS
NetworkPeering -> String
(Int -> NetworkPeering -> ShowS)
-> (NetworkPeering -> String)
-> ([NetworkPeering] -> ShowS)
-> Show NetworkPeering
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NetworkPeering -> ShowS
showsPrec :: Int -> NetworkPeering -> ShowS
$cshow :: NetworkPeering -> String
show :: NetworkPeering -> String
$cshowList :: [NetworkPeering] -> ShowS
showList :: [NetworkPeering] -> ShowS
Show)

instance FromJSON NetworkPeering where
  parseJSON :: Value -> Parser NetworkPeering
parseJSON = String
-> (Object -> Parser NetworkPeering)
-> Value
-> Parser NetworkPeering
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"NetworkPeering" ((Object -> Parser NetworkPeering)
 -> Value -> Parser NetworkPeering)
-> (Object -> Parser NetworkPeering)
-> Value
-> Parser NetworkPeering
forall a b. (a -> b) -> a -> b
$ \Object
v -> Text
-> Text
-> Text
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Bool
-> NetworkPeering
NetworkPeering
    (Text
 -> Text
 -> Text
 -> Maybe Text
 -> Maybe Bool
 -> Maybe Bool
 -> Maybe Bool
 -> NetworkPeering)
-> Parser Text
-> Parser
     (Text
      -> Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe Bool
      -> NetworkPeering)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
    Parser
  (Text
   -> Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe Bool
   -> NetworkPeering)
-> Parser Text
-> Parser
     (Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe Bool
      -> NetworkPeering)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"network"
    Parser
  (Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe Bool
   -> NetworkPeering)
-> Parser Text
-> Parser
     (Maybe Text
      -> Maybe Bool -> Maybe Bool -> Maybe Bool -> NetworkPeering)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"state"
    Parser
  (Maybe Text
   -> Maybe Bool -> Maybe Bool -> Maybe Bool -> NetworkPeering)
-> Parser (Maybe Text)
-> Parser
     (Maybe Bool -> Maybe Bool -> Maybe Bool -> NetworkPeering)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"stateDetails"
    Parser (Maybe Bool -> Maybe Bool -> Maybe Bool -> NetworkPeering)
-> Parser (Maybe Bool)
-> Parser (Maybe Bool -> Maybe Bool -> NetworkPeering)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"exchangeSubnetRoutes"
    Parser (Maybe Bool -> Maybe Bool -> NetworkPeering)
-> Parser (Maybe Bool) -> Parser (Maybe Bool -> NetworkPeering)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"exportCustomRoutes"
    Parser (Maybe Bool -> NetworkPeering)
-> Parser (Maybe Bool) -> Parser NetworkPeering
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"importCustomRoutes"

instance ToJSON NetworkPeering where
  toJSON :: NetworkPeering -> Value
toJSON NetworkPeering{Maybe Bool
Maybe Text
Text
$sel:name:NetworkPeering :: NetworkPeering -> Text
$sel:network:NetworkPeering :: NetworkPeering -> Text
$sel:state:NetworkPeering :: NetworkPeering -> Text
$sel:stateDetails:NetworkPeering :: NetworkPeering -> Maybe Text
$sel:exchangeSubnetRoutes:NetworkPeering :: NetworkPeering -> Maybe Bool
$sel:exportCustomRoutes:NetworkPeering :: NetworkPeering -> Maybe Bool
$sel:importCustomRoutes:NetworkPeering :: NetworkPeering -> Maybe Bool
name :: Text
network :: Text
state :: Text
stateDetails :: Maybe Text
exchangeSubnetRoutes :: Maybe Bool
exportCustomRoutes :: Maybe Bool
importCustomRoutes :: Maybe Bool
..} = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
    [ Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"name" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
name)
    , Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"network" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
network)
    , Pair -> Maybe Pair
forall a. a -> Maybe a
Just (Key
"state" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
state)
    , (Key
"stateDetails" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
stateDetails
    , (Key
"exchangeSubnetRoutes" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Bool
exchangeSubnetRoutes
    , (Key
"exportCustomRoutes" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Bool
exportCustomRoutes
    , (Key
"importCustomRoutes" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Bool
importCustomRoutes
    ]

-- | Query parameters for listNetworks operation
data ListNetworksQuery = ListNetworksQuery
  { ListNetworksQuery -> Maybe String
filter_ :: Maybe String
    -- ^ Filter expression
  , ListNetworksQuery -> Maybe Int
maxResults :: Maybe Int
    -- ^ Maximum results per page
  , ListNetworksQuery -> Maybe String
orderBy :: Maybe String
    -- ^ Sort order
  , ListNetworksQuery -> Maybe String
pageToken :: Maybe String
    -- ^ Page token
  , ListNetworksQuery -> Maybe Bool
returnPartialSuccess :: Maybe Bool
    -- ^ Partial success return
  } deriving (Int -> ListNetworksQuery -> ShowS
[ListNetworksQuery] -> ShowS
ListNetworksQuery -> String
(Int -> ListNetworksQuery -> ShowS)
-> (ListNetworksQuery -> String)
-> ([ListNetworksQuery] -> ShowS)
-> Show ListNetworksQuery
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ListNetworksQuery -> ShowS
showsPrec :: Int -> ListNetworksQuery -> ShowS
$cshow :: ListNetworksQuery -> String
show :: ListNetworksQuery -> String
$cshowList :: [ListNetworksQuery] -> ShowS
showList :: [ListNetworksQuery] -> ShowS
Show)

-- | Default list networks query parameters
defaultListNetworksQuery :: ListNetworksQuery
defaultListNetworksQuery :: ListNetworksQuery
defaultListNetworksQuery = ListNetworksQuery
  { $sel:filter_:ListNetworksQuery :: Maybe String
filter_ = Maybe String
forall a. Maybe a
Nothing
  , $sel:maxResults:ListNetworksQuery :: Maybe Int
maxResults = Maybe Int
forall a. Maybe a
Nothing
  , $sel:orderBy:ListNetworksQuery :: Maybe String
orderBy = Maybe String
forall a. Maybe a
Nothing
  , $sel:pageToken:ListNetworksQuery :: Maybe String
pageToken = Maybe String
forall a. Maybe a
Nothing
  , $sel:returnPartialSuccess:ListNetworksQuery :: Maybe Bool
returnPartialSuccess = Maybe Bool
forall a. Maybe a
Nothing
  }

-- | List networks in a project
listNetworks ::
  String               -- ^ GCP Project ID
  -> Maybe ListNetworksQuery  -- ^ Query parameters
  -> IO (Either String NetworkList)
listNetworks :: String -> Maybe ListNetworksQuery -> IO (Either String NetworkList)
listNetworks String
project Maybe ListNetworksQuery
mbQuery = do
  let queryParams :: [(ByteString, Maybe ByteString)]
queryParams = [(ByteString, Maybe ByteString)]
-> (ListNetworksQuery -> [(ByteString, Maybe ByteString)])
-> Maybe ListNetworksQuery
-> [(ByteString, Maybe ByteString)]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] ListNetworksQuery -> [(ByteString, Maybe ByteString)]
toQueryList Maybe ListNetworksQuery
mbQuery
  RequestOptions -> IO (Either String NetworkList)
forall b. FromJSON b => RequestOptions -> IO (Either String b)
doRequestJSON
    RequestOptions
      { reqMethod :: RequestMethod
reqMethod = RequestMethod
GET
      , reqUrl :: String
reqUrl = String
googleComputeUrl
      , mbQueryParams :: Maybe [(ByteString, Maybe ByteString)]
mbQueryParams = [(ByteString, Maybe ByteString)]
-> Maybe [(ByteString, Maybe ByteString)]
forall a. a -> Maybe a
Just [(ByteString, Maybe ByteString)]
queryParams
      , mbReqBody :: Maybe ByteString
mbReqBody = Maybe ByteString
forall a. Maybe a
Nothing
      , mbReqHeaders :: Maybe RequestHeaders
mbReqHeaders = Maybe RequestHeaders
forall a. Maybe a
Nothing
      , mbReqPath :: Maybe String
mbReqPath = String -> Maybe String
forall a. a -> Maybe a
Just (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ [String] -> String
toPath
          [ String
"projects"
          , String
project
          , String
"global"
          , String
"networks"
          ]
      }
  where
    toQueryList :: ListNetworksQuery -> [(BS8.ByteString, Maybe BS8.ByteString)]
    toQueryList :: ListNetworksQuery -> [(ByteString, Maybe ByteString)]
toQueryList ListNetworksQuery{Maybe Bool
Maybe Int
Maybe String
$sel:filter_:ListNetworksQuery :: ListNetworksQuery -> Maybe String
$sel:maxResults:ListNetworksQuery :: ListNetworksQuery -> Maybe Int
$sel:orderBy:ListNetworksQuery :: ListNetworksQuery -> Maybe String
$sel:pageToken:ListNetworksQuery :: ListNetworksQuery -> Maybe String
$sel:returnPartialSuccess:ListNetworksQuery :: ListNetworksQuery -> Maybe Bool
filter_ :: Maybe String
maxResults :: Maybe Int
orderBy :: Maybe String
pageToken :: Maybe String
returnPartialSuccess :: Maybe Bool
..} =
      [Maybe (ByteString, Maybe ByteString)]
-> [(ByteString, Maybe ByteString)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (ByteString
"filter",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> (String -> Maybe ByteString)
-> String
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (String -> ByteString) -> String -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
BS8.pack (String -> (ByteString, Maybe ByteString))
-> Maybe String -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
filter_
        , (ByteString
"maxResults",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> (Int -> Maybe ByteString)
-> Int
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (Int -> ByteString) -> Int -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
BS8.pack (String -> ByteString) -> (Int -> String) -> Int -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String
forall a. Show a => a -> String
show (Int -> (ByteString, Maybe ByteString))
-> Maybe Int -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Int
maxResults
        , (ByteString
"orderBy",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> (String -> Maybe ByteString)
-> String
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (String -> ByteString) -> String -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
BS8.pack (String -> (ByteString, Maybe ByteString))
-> Maybe String -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
orderBy
        , (ByteString
"pageToken",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> (String -> Maybe ByteString)
-> String
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (String -> ByteString) -> String -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
BS8.pack (String -> (ByteString, Maybe ByteString))
-> Maybe String -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
pageToken
        , (ByteString
"returnPartialSuccess",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> (Bool -> Maybe ByteString)
-> Bool
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (Bool -> ByteString) -> Bool -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
BS8.pack (String -> ByteString) -> (Bool -> String) -> Bool -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String
forall a. Show a => a -> String
show (Bool -> (ByteString, Maybe ByteString))
-> Maybe Bool -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Bool
returnPartialSuccess
        ]