{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}
module Amazonka.CostExplorer.Types.Expression where
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import Amazonka.CostExplorer.Types.CostCategoryValues
import Amazonka.CostExplorer.Types.DimensionValues
import Amazonka.CostExplorer.Types.TagValues
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
data Expression = Expression'
{
Expression -> Maybe [Expression]
and :: Prelude.Maybe [Expression],
Expression -> Maybe CostCategoryValues
costCategories :: Prelude.Maybe CostCategoryValues,
Expression -> Maybe DimensionValues
dimensions :: Prelude.Maybe DimensionValues,
Expression -> Maybe Expression
not :: Prelude.Maybe Expression,
Expression -> Maybe [Expression]
or :: Prelude.Maybe [Expression],
Expression -> Maybe TagValues
tags :: Prelude.Maybe TagValues
}
deriving (Expression -> Expression -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Expression -> Expression -> Bool
$c/= :: Expression -> Expression -> Bool
== :: Expression -> Expression -> Bool
$c== :: Expression -> Expression -> Bool
Prelude.Eq, ReadPrec [Expression]
ReadPrec Expression
Int -> ReadS Expression
ReadS [Expression]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Expression]
$creadListPrec :: ReadPrec [Expression]
readPrec :: ReadPrec Expression
$creadPrec :: ReadPrec Expression
readList :: ReadS [Expression]
$creadList :: ReadS [Expression]
readsPrec :: Int -> ReadS Expression
$creadsPrec :: Int -> ReadS Expression
Prelude.Read, Int -> Expression -> ShowS
[Expression] -> ShowS
Expression -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Expression] -> ShowS
$cshowList :: [Expression] -> ShowS
show :: Expression -> String
$cshow :: Expression -> String
showsPrec :: Int -> Expression -> ShowS
$cshowsPrec :: Int -> Expression -> ShowS
Prelude.Show, forall x. Rep Expression x -> Expression
forall x. Expression -> Rep Expression x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Expression x -> Expression
$cfrom :: forall x. Expression -> Rep Expression x
Prelude.Generic)
newExpression ::
Expression
newExpression :: Expression
newExpression =
Expression'
{ $sel:and:Expression' :: Maybe [Expression]
and = forall a. Maybe a
Prelude.Nothing,
$sel:costCategories:Expression' :: Maybe CostCategoryValues
costCategories = forall a. Maybe a
Prelude.Nothing,
$sel:dimensions:Expression' :: Maybe DimensionValues
dimensions = forall a. Maybe a
Prelude.Nothing,
$sel:not:Expression' :: Maybe Expression
not = forall a. Maybe a
Prelude.Nothing,
$sel:or:Expression' :: Maybe [Expression]
or = forall a. Maybe a
Prelude.Nothing,
$sel:tags:Expression' :: Maybe TagValues
tags = forall a. Maybe a
Prelude.Nothing
}
expression_and :: Lens.Lens' Expression (Prelude.Maybe [Expression])
expression_and :: Lens' Expression (Maybe [Expression])
expression_and = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Expression' {Maybe [Expression]
and :: Maybe [Expression]
$sel:and:Expression' :: Expression -> Maybe [Expression]
and} -> Maybe [Expression]
and) (\s :: Expression
s@Expression' {} Maybe [Expression]
a -> Expression
s {$sel:and:Expression' :: Maybe [Expression]
and = Maybe [Expression]
a} :: Expression) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced
expression_costCategories :: Lens.Lens' Expression (Prelude.Maybe CostCategoryValues)
expression_costCategories :: Lens' Expression (Maybe CostCategoryValues)
expression_costCategories = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Expression' {Maybe CostCategoryValues
costCategories :: Maybe CostCategoryValues
$sel:costCategories:Expression' :: Expression -> Maybe CostCategoryValues
costCategories} -> Maybe CostCategoryValues
costCategories) (\s :: Expression
s@Expression' {} Maybe CostCategoryValues
a -> Expression
s {$sel:costCategories:Expression' :: Maybe CostCategoryValues
costCategories = Maybe CostCategoryValues
a} :: Expression)
expression_dimensions :: Lens.Lens' Expression (Prelude.Maybe DimensionValues)
expression_dimensions :: Lens' Expression (Maybe DimensionValues)
expression_dimensions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Expression' {Maybe DimensionValues
dimensions :: Maybe DimensionValues
$sel:dimensions:Expression' :: Expression -> Maybe DimensionValues
dimensions} -> Maybe DimensionValues
dimensions) (\s :: Expression
s@Expression' {} Maybe DimensionValues
a -> Expression
s {$sel:dimensions:Expression' :: Maybe DimensionValues
dimensions = Maybe DimensionValues
a} :: Expression)
expression_not :: Lens.Lens' Expression (Prelude.Maybe Expression)
expression_not :: Lens' Expression (Maybe Expression)
expression_not = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Expression' {Maybe Expression
not :: Maybe Expression
$sel:not:Expression' :: Expression -> Maybe Expression
not} -> Maybe Expression
not) (\s :: Expression
s@Expression' {} Maybe Expression
a -> Expression
s {$sel:not:Expression' :: Maybe Expression
not = Maybe Expression
a} :: Expression)
expression_or :: Lens.Lens' Expression (Prelude.Maybe [Expression])
expression_or :: Lens' Expression (Maybe [Expression])
expression_or = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Expression' {Maybe [Expression]
or :: Maybe [Expression]
$sel:or:Expression' :: Expression -> Maybe [Expression]
or} -> Maybe [Expression]
or) (\s :: Expression
s@Expression' {} Maybe [Expression]
a -> Expression
s {$sel:or:Expression' :: Maybe [Expression]
or = Maybe [Expression]
a} :: Expression) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced
expression_tags :: Lens.Lens' Expression (Prelude.Maybe TagValues)
expression_tags :: Lens' Expression (Maybe TagValues)
expression_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Expression' {Maybe TagValues
tags :: Maybe TagValues
$sel:tags:Expression' :: Expression -> Maybe TagValues
tags} -> Maybe TagValues
tags) (\s :: Expression
s@Expression' {} Maybe TagValues
a -> Expression
s {$sel:tags:Expression' :: Maybe TagValues
tags = Maybe TagValues
a} :: Expression)
instance Data.FromJSON Expression where
parseJSON :: Value -> Parser Expression
parseJSON =
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
String
"Expression"
( \Object
x ->
Maybe [Expression]
-> Maybe CostCategoryValues
-> Maybe DimensionValues
-> Maybe Expression
-> Maybe [Expression]
-> Maybe TagValues
-> Expression
Expression'
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"And" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CostCategories")
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Dimensions")
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Not")
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Or" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Tags")
)
instance Prelude.Hashable Expression where
hashWithSalt :: Int -> Expression -> Int
hashWithSalt Int
_salt Expression' {Maybe [Expression]
Maybe DimensionValues
Maybe CostCategoryValues
Maybe TagValues
Maybe Expression
tags :: Maybe TagValues
or :: Maybe [Expression]
not :: Maybe Expression
dimensions :: Maybe DimensionValues
costCategories :: Maybe CostCategoryValues
and :: Maybe [Expression]
$sel:tags:Expression' :: Expression -> Maybe TagValues
$sel:or:Expression' :: Expression -> Maybe [Expression]
$sel:not:Expression' :: Expression -> Maybe Expression
$sel:dimensions:Expression' :: Expression -> Maybe DimensionValues
$sel:costCategories:Expression' :: Expression -> Maybe CostCategoryValues
$sel:and:Expression' :: Expression -> Maybe [Expression]
..} =
Int
_salt
forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Expression]
and
forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CostCategoryValues
costCategories
forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DimensionValues
dimensions
forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Expression
not
forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Expression]
or
forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TagValues
tags
instance Prelude.NFData Expression where
rnf :: Expression -> ()
rnf Expression' {Maybe [Expression]
Maybe DimensionValues
Maybe CostCategoryValues
Maybe TagValues
Maybe Expression
tags :: Maybe TagValues
or :: Maybe [Expression]
not :: Maybe Expression
dimensions :: Maybe DimensionValues
costCategories :: Maybe CostCategoryValues
and :: Maybe [Expression]
$sel:tags:Expression' :: Expression -> Maybe TagValues
$sel:or:Expression' :: Expression -> Maybe [Expression]
$sel:not:Expression' :: Expression -> Maybe Expression
$sel:dimensions:Expression' :: Expression -> Maybe DimensionValues
$sel:costCategories:Expression' :: Expression -> Maybe CostCategoryValues
$sel:and:Expression' :: Expression -> Maybe [Expression]
..} =
forall a. NFData a => a -> ()
Prelude.rnf Maybe [Expression]
and
seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe CostCategoryValues
costCategories
seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DimensionValues
dimensions
seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Expression
not
seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Expression]
or
seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TagValues
tags
instance Data.ToJSON Expression where
toJSON :: Expression -> Value
toJSON Expression' {Maybe [Expression]
Maybe DimensionValues
Maybe CostCategoryValues
Maybe TagValues
Maybe Expression
tags :: Maybe TagValues
or :: Maybe [Expression]
not :: Maybe Expression
dimensions :: Maybe DimensionValues
costCategories :: Maybe CostCategoryValues
and :: Maybe [Expression]
$sel:tags:Expression' :: Expression -> Maybe TagValues
$sel:or:Expression' :: Expression -> Maybe [Expression]
$sel:not:Expression' :: Expression -> Maybe Expression
$sel:dimensions:Expression' :: Expression -> Maybe DimensionValues
$sel:costCategories:Expression' :: Expression -> Maybe CostCategoryValues
$sel:and:Expression' :: Expression -> Maybe [Expression]
..} =
[Pair] -> Value
Data.object
( forall a. [Maybe a] -> [a]
Prelude.catMaybes
[ (Key
"And" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Expression]
and,
(Key
"CostCategories" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe CostCategoryValues
costCategories,
(Key
"Dimensions" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DimensionValues
dimensions,
(Key
"Not" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Expression
not,
(Key
"Or" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Expression]
or,
(Key
"Tags" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe TagValues
tags
]
)