/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
/*
* Do not modify this file. This file is generated from the ce-2017-10-25.normal.json service model.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.CostExplorer.Model
{
///
/// Use Expression
to filter in various Cost Explorer APIs.
///
///
///
/// Not all Expression
types are supported in each API. Refer to the documentation
/// for each specific API to see what is supported.
///
///
///
/// There are two patterns:
///
/// -
///
/// Simple dimension values.
///
///
-
///
/// There are three types of simple dimension values:
CostCategories
, Tags
,
/// and Dimensions
.
///
/// -
///
/// Specify the
CostCategories
field to define a filter that acts on Cost
/// Categories.
///
/// -
///
/// Specify the
Tags
field to define a filter that acts on Cost Allocation
/// Tags.
///
/// -
///
/// Specify the
Dimensions
field to define a filter that acts on the
/// DimensionValues
.
///
///
-
///
/// For each filter type, you can set the dimension name and values for the filters that
/// you plan to use.
///
///
-
///
/// For example, you can filter for
REGION==us-east-1 OR REGION==us-west-1
.
/// For GetRightsizingRecommendation
, the Region is a full name (for example,
/// REGION==US East (N. Virginia)
.
///
/// -
///
/// The corresponding
Expression
for this example is as follows: {
/// "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1" ] } }
///
///
/// -
///
/// As shown in the previous example, lists of dimension values are combined with
OR
/// when applying the filter.
///
///
-
///
/// You can also set different match options to further control how the filter behaves.
/// Not all APIs support match options. Refer to the documentation for each specific API
/// to see what is supported.
///
///
-
///
/// For example, you can filter for linked account names that start with "a".
///
///
-
///
/// The corresponding
Expression
for this example is as follows: {
/// "Dimensions": { "Key": "LINKED_ACCOUNT_NAME", "MatchOptions": [ "STARTS_WITH" ], "Values":
/// [ "a" ] } }
///
///
-
///
/// Compound
Expression
types with logical operations.
///
/// -
///
/// You can use multiple
Expression
types and the logical operators AND/OR/NOT
/// to create a list of one or more Expression
objects. By doing this, you
/// can filter by more advanced options.
///
/// -
///
/// For example, you can filter by
((REGION == us-east-1 OR REGION == us-west-1)
/// OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer)
.
///
/// -
///
/// The corresponding
Expression
for this example is as follows: {
/// "And": [ {"Or": [ {"Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1"
/// ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] } } ]}, {"Not": {"Dimensions":
/// { "Key": "USAGE_TYPE", "Values": ["DataTransfer"] }}} ] }
///
///
///
/// Because each Expression
can have only one operator, the service returns
/// an error if more than one is specified. The following example shows an Expression
/// object that creates an error: { "And": [ ... ], "Dimensions": { "Key": "USAGE_TYPE",
/// "Values": [ "DataTransfer" ] } }
///
///
///
/// The following is an example of the corresponding error message: "Expression
/// has more than one roots. Only one root operator is allowed for each expression: And,
/// Or, Not, Dimensions, Tags, CostCategories"
///
///
///
/// For the GetRightsizingRecommendation
action, a combination of OR and
/// NOT isn't supported. OR isn't supported between different dimensions, or dimensions
/// and tags. NOT operators aren't supported. Dimensions are also limited to LINKED_ACCOUNT
,
/// REGION
, or RIGHTSIZING_TYPE
.
///
///
///
/// For the GetReservationPurchaseRecommendation
action, only NOT is supported.
/// AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT
.
///
///
///
public partial class Expression
{
private List _and = new List();
private CostCategoryValues _costCategories;
private DimensionValues _dimensions;
private Expression _not;
private List _or = new List();
private TagValues _tags;
///
/// Gets and sets the property And.
///
/// Return results that match both Dimension
objects.
///
///
public List And
{
get { return this._and; }
set { this._and = value; }
}
// Check to see if And property is set
internal bool IsSetAnd()
{
return this._and != null && this._and.Count > 0;
}
///
/// Gets and sets the property CostCategories.
///
/// The filter that's based on CostCategory
values.
///
///
public CostCategoryValues CostCategories
{
get { return this._costCategories; }
set { this._costCategories = value; }
}
// Check to see if CostCategories property is set
internal bool IsSetCostCategories()
{
return this._costCategories != null;
}
///
/// Gets and sets the property Dimensions.
///
/// The specific Dimension
to use for Expression
.
///
///
public DimensionValues Dimensions
{
get { return this._dimensions; }
set { this._dimensions = value; }
}
// Check to see if Dimensions property is set
internal bool IsSetDimensions()
{
return this._dimensions != null;
}
///
/// Gets and sets the property Not.
///
/// Return results that don't match a Dimension
object.
///
///
public Expression Not
{
get { return this._not; }
set { this._not = value; }
}
// Check to see if Not property is set
internal bool IsSetNot()
{
return this._not != null;
}
///
/// Gets and sets the property Or.
///
/// Return results that match either Dimension
object.
///
///
public List Or
{
get { return this._or; }
set { this._or = value; }
}
// Check to see if Or property is set
internal bool IsSetOr()
{
return this._or != null && this._or.Count > 0;
}
///
/// Gets and sets the property Tags.
///
/// The specific Tag
to use for Expression
.
///
///
public TagValues Tags
{
get { return this._tags; }
set { this._tags = value; }
}
// Check to see if Tags property is set
internal bool IsSetTags()
{
return this._tags != null;
}
}
}