// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

// This section describes operations that you can perform on an AWS Elemental
// MediaStore container.
type Container struct {

	// The Amazon Resource Name (ARN) of the container. The ARN has the following
	// format: arn:aws:::container/ For example:
	// arn:aws:mediastore:us-west-2:111122223333:container/movies
	ARN *string

	// The state of access logging on the container. This value is false by default,
	// indicating that AWS Elemental MediaStore does not send access logs to Amazon
	// CloudWatch Logs. When you enable access logging on the container, MediaStore
	// changes this value to true, indicating that the service delivers access logs for
	// objects stored in that container to CloudWatch Logs.
	AccessLoggingEnabled *bool

	// Unix timestamp.
	CreationTime *time.Time

	// The DNS endpoint of the container. Use the endpoint to identify the specific
	// container when sending requests to the data plane. The service assigns this
	// value when the container is created. Once the value has been assigned, it does
	// not change.
	Endpoint *string

	// The name of the container.
	Name *string

	// The status of container creation or deletion. The status is one of the
	// following: CREATING, ACTIVE, or DELETING. While the service is creating the
	// container, the status is CREATING. When the endpoint is available, the status
	// changes to ACTIVE.
	Status ContainerStatus

	noSmithyDocumentSerde
}

// A rule for a CORS policy. You can add up to 100 rules to a CORS policy. If more
// than one rule applies, the service uses the first applicable rule listed.
type CorsRule struct {

	// Specifies which headers are allowed in a preflight OPTIONS request through the
	// Access-Control-Request-Headers header. Each header name that is specified in
	// Access-Control-Request-Headers must have a corresponding entry in the rule. Only
	// the headers that were requested are sent back. This element can contain only one
	// wildcard character (*).
	//
	// This member is required.
	AllowedHeaders []string

	// One or more response headers that you want users to be able to access from their
	// applications (for example, from a JavaScript XMLHttpRequest object). Each CORS
	// rule must have at least one AllowedOrigins element. The string value can include
	// only one wildcard character (*), for example, http://*.example.com.
	// Additionally, you can specify only one wildcard character to allow cross-origin
	// access for all origins.
	//
	// This member is required.
	AllowedOrigins []string

	// Identifies an HTTP method that the origin that is specified in the rule is
	// allowed to execute. Each CORS rule must contain at least one AllowedMethods and
	// one AllowedOrigins element.
	AllowedMethods []MethodName

	// One or more headers in the response that you want users to be able to access
	// from their applications (for example, from a JavaScript XMLHttpRequest object).
	// This element is optional for each rule.
	ExposeHeaders []string

	// The time in seconds that your browser caches the preflight response for the
	// specified resource. A CORS rule can have only one MaxAgeSeconds element.
	MaxAgeSeconds int32

	noSmithyDocumentSerde
}

// The metric policy that is associated with the container. A metric policy allows
// AWS Elemental MediaStore to send metrics to Amazon CloudWatch. In the policy,
// you must indicate whether you want MediaStore to send container-level metrics.
// You can also include rules to define groups of objects that you want MediaStore
// to send object-level metrics for. To view examples of how to construct a metric
// policy for your use case, see Example Metric Policies
// (https://docs.aws.amazon.com/mediastore/latest/ug/policies-metric-examples.html).
type MetricPolicy struct {

	// A setting to enable or disable metrics at the container level.
	//
	// This member is required.
	ContainerLevelMetrics ContainerLevelMetrics

	// A parameter that holds an array of rules that enable metrics at the object
	// level. This parameter is optional, but if you choose to include it, you must
	// also include at least one rule. By default, you can include up to five rules.
	// You can also request a quota increase
	// (https://console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/mediastore/quotas)
	// to allow up to 300 rules per policy.
	MetricPolicyRules []MetricPolicyRule

	noSmithyDocumentSerde
}

// A setting that enables metrics at the object level. Each rule contains an object
// group and an object group name. If the policy includes the MetricPolicyRules
// parameter, you must include at least one rule. Each metric policy can include up
// to five rules by default. You can also request a quota increase
// (https://console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/mediastore/quotas)
// to allow up to 300 rules per policy.
type MetricPolicyRule struct {

	// A path or file name that defines which objects to include in the group.
	// Wildcards (*) are acceptable.
	//
	// This member is required.
	ObjectGroup *string

	// A name that allows you to refer to the object group.
	//
	// This member is required.
	ObjectGroupName *string

	noSmithyDocumentSerde
}

// A collection of tags associated with a container. Each tag consists of a
// key:value pair, which can be anything you define. Typically, the tag key
// represents a category (such as "environment") and the tag value represents a
// specific value within that category (such as "test," "development," or
// "production"). You can add up to 50 tags to each container. For more information
// about tagging, including naming and usage conventions, see Tagging Resources in
// MediaStore (https://docs.aws.amazon.com/mediastore/latest/ug/tagging.html).
type Tag struct {

	// Part of the key:value pair that defines a tag. You can use a tag key to describe
	// a category of information, such as "customer." Tag keys are case-sensitive.
	//
	// This member is required.
	Key *string

	// Part of the key:value pair that defines a tag. You can use a tag value to
	// describe a specific value within a category, such as "companyA" or "companyB."
	// Tag values are case-sensitive.
	Value *string

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde
