// Code generated by go-swagger; DO NOT EDIT.

package packer_service

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

import (
	"context"
	"net/http"
	"time"

	"github.com/go-openapi/errors"
	"github.com/go-openapi/runtime"
	cr "github.com/go-openapi/runtime/client"
	"github.com/go-openapi/strfmt"
	"github.com/go-openapi/swag"
)

// NewPackerServiceListBucketPackagesWithVulnerabilitiesParams creates a new PackerServiceListBucketPackagesWithVulnerabilitiesParams object,
// with the default timeout for this client.
//
// Default values are not hydrated, since defaults are normally applied by the API server side.
//
// To enforce default values in parameter, use SetDefaults or WithDefaults.
func NewPackerServiceListBucketPackagesWithVulnerabilitiesParams() *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	return &PackerServiceListBucketPackagesWithVulnerabilitiesParams{
		timeout: cr.DefaultTimeout,
	}
}

// NewPackerServiceListBucketPackagesWithVulnerabilitiesParamsWithTimeout creates a new PackerServiceListBucketPackagesWithVulnerabilitiesParams object
// with the ability to set a timeout on a request.
func NewPackerServiceListBucketPackagesWithVulnerabilitiesParamsWithTimeout(timeout time.Duration) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	return &PackerServiceListBucketPackagesWithVulnerabilitiesParams{
		timeout: timeout,
	}
}

// NewPackerServiceListBucketPackagesWithVulnerabilitiesParamsWithContext creates a new PackerServiceListBucketPackagesWithVulnerabilitiesParams object
// with the ability to set a context for a request.
func NewPackerServiceListBucketPackagesWithVulnerabilitiesParamsWithContext(ctx context.Context) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	return &PackerServiceListBucketPackagesWithVulnerabilitiesParams{
		Context: ctx,
	}
}

// NewPackerServiceListBucketPackagesWithVulnerabilitiesParamsWithHTTPClient creates a new PackerServiceListBucketPackagesWithVulnerabilitiesParams object
// with the ability to set a custom HTTPClient for a request.
func NewPackerServiceListBucketPackagesWithVulnerabilitiesParamsWithHTTPClient(client *http.Client) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	return &PackerServiceListBucketPackagesWithVulnerabilitiesParams{
		HTTPClient: client,
	}
}

/*
PackerServiceListBucketPackagesWithVulnerabilitiesParams contains all the parameters to send to the API endpoint

	for the packer service list bucket packages with vulnerabilities operation.

	Typically these are written to a http.Request.
*/
type PackerServiceListBucketPackagesWithVulnerabilitiesParams struct {

	// BucketName.
	BucketName string

	// Criticality.
	Criticality []string

	// Identifier.
	Identifier *string

	// IdentifierStartsWith.
	IdentifierStartsWith *string

	/* LocationOrganizationID.

	   organization_id is the id of the organization.
	*/
	LocationOrganizationID string

	/* LocationProjectID.

	   project_id is the projects id.
	*/
	LocationProjectID string

	/* LocationRegionProvider.

	   unused HCP platform field, HCP Packer does not support the region argument
	*/
	LocationRegionProvider *string

	/* LocationRegionRegion.

	   unused HCP platform field, HCP Packer does not support the region argument
	*/
	LocationRegionRegion *string

	// PackageName.
	PackageName *string

	// PackageNameStartsWith.
	PackageNameStartsWith *string

	// PackageVersion.
	PackageVersion *string

	/* PaginationNextPageToken.

	     Specifies a page token to use to retrieve the next page. Set this to the
	`next_page_token` returned by previous list requests to get the next page of
	results. If set, `previous_page_token` must not be set.
	*/
	PaginationNextPageToken *string

	/* PaginationPageSize.

	     The max number of results per page that should be returned. If the number
	of available results is larger than `page_size`, a `next_page_token` is
	returned which can be used to get the next page of results in subsequent
	requests. A value of zero will cause `page_size` to be defaulted.

	     Format: int64
	*/
	PaginationPageSize *int64

	/* PaginationPreviousPageToken.

	     Specifies a page token to use to retrieve the previous page. Set this to
	the `previous_page_token` returned by previous list requests to get the
	previous page of results. If set, `next_page_token` must not be set.
	*/
	PaginationPreviousPageToken *string

	/* SortingOrderBy.

	     Specifies the list of per field ordering that should be used for sorting.
	The order matters as rows are sorted in order by fields and when the field
	matches, the next field is used to tie break the ordering.
	The per field default ordering is ascending.

	The fields should be immutable, unique, and orderable. If the field is
	not unique, more than one sort fields should be passed.

	Example: order_by=name,created_at asc
	In that case, 'name' will get the default 'ascending' order.
	*/
	SortingOrderBy []string

	timeout    time.Duration
	Context    context.Context
	HTTPClient *http.Client
}

// WithDefaults hydrates default values in the packer service list bucket packages with vulnerabilities params (not the query body).
//
// All values with no default are reset to their zero value.
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithDefaults() *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetDefaults()
	return o
}

// SetDefaults hydrates default values in the packer service list bucket packages with vulnerabilities params (not the query body).
//
// All values with no default are reset to their zero value.
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetDefaults() {
	// no default values defined for this parameter
}

// WithTimeout adds the timeout to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithTimeout(timeout time.Duration) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetTimeout(timeout)
	return o
}

// SetTimeout adds the timeout to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetTimeout(timeout time.Duration) {
	o.timeout = timeout
}

// WithContext adds the context to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithContext(ctx context.Context) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetContext(ctx)
	return o
}

// SetContext adds the context to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetContext(ctx context.Context) {
	o.Context = ctx
}

// WithHTTPClient adds the HTTPClient to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithHTTPClient(client *http.Client) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetHTTPClient(client)
	return o
}

// SetHTTPClient adds the HTTPClient to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetHTTPClient(client *http.Client) {
	o.HTTPClient = client
}

// WithBucketName adds the bucketName to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithBucketName(bucketName string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetBucketName(bucketName)
	return o
}

// SetBucketName adds the bucketName to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetBucketName(bucketName string) {
	o.BucketName = bucketName
}

// WithCriticality adds the criticality to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithCriticality(criticality []string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetCriticality(criticality)
	return o
}

// SetCriticality adds the criticality to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetCriticality(criticality []string) {
	o.Criticality = criticality
}

// WithIdentifier adds the identifier to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithIdentifier(identifier *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetIdentifier(identifier)
	return o
}

// SetIdentifier adds the identifier to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetIdentifier(identifier *string) {
	o.Identifier = identifier
}

// WithIdentifierStartsWith adds the identifierStartsWith to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithIdentifierStartsWith(identifierStartsWith *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetIdentifierStartsWith(identifierStartsWith)
	return o
}

// SetIdentifierStartsWith adds the identifierStartsWith to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetIdentifierStartsWith(identifierStartsWith *string) {
	o.IdentifierStartsWith = identifierStartsWith
}

// WithLocationOrganizationID adds the locationOrganizationID to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithLocationOrganizationID(locationOrganizationID string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetLocationOrganizationID(locationOrganizationID)
	return o
}

// SetLocationOrganizationID adds the locationOrganizationId to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetLocationOrganizationID(locationOrganizationID string) {
	o.LocationOrganizationID = locationOrganizationID
}

// WithLocationProjectID adds the locationProjectID to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithLocationProjectID(locationProjectID string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetLocationProjectID(locationProjectID)
	return o
}

// SetLocationProjectID adds the locationProjectId to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetLocationProjectID(locationProjectID string) {
	o.LocationProjectID = locationProjectID
}

// WithLocationRegionProvider adds the locationRegionProvider to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithLocationRegionProvider(locationRegionProvider *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetLocationRegionProvider(locationRegionProvider)
	return o
}

// SetLocationRegionProvider adds the locationRegionProvider to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetLocationRegionProvider(locationRegionProvider *string) {
	o.LocationRegionProvider = locationRegionProvider
}

// WithLocationRegionRegion adds the locationRegionRegion to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithLocationRegionRegion(locationRegionRegion *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetLocationRegionRegion(locationRegionRegion)
	return o
}

// SetLocationRegionRegion adds the locationRegionRegion to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetLocationRegionRegion(locationRegionRegion *string) {
	o.LocationRegionRegion = locationRegionRegion
}

// WithPackageName adds the packageName to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithPackageName(packageName *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetPackageName(packageName)
	return o
}

// SetPackageName adds the packageName to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetPackageName(packageName *string) {
	o.PackageName = packageName
}

// WithPackageNameStartsWith adds the packageNameStartsWith to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithPackageNameStartsWith(packageNameStartsWith *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetPackageNameStartsWith(packageNameStartsWith)
	return o
}

// SetPackageNameStartsWith adds the packageNameStartsWith to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetPackageNameStartsWith(packageNameStartsWith *string) {
	o.PackageNameStartsWith = packageNameStartsWith
}

// WithPackageVersion adds the packageVersion to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithPackageVersion(packageVersion *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetPackageVersion(packageVersion)
	return o
}

// SetPackageVersion adds the packageVersion to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetPackageVersion(packageVersion *string) {
	o.PackageVersion = packageVersion
}

// WithPaginationNextPageToken adds the paginationNextPageToken to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithPaginationNextPageToken(paginationNextPageToken *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetPaginationNextPageToken(paginationNextPageToken)
	return o
}

// SetPaginationNextPageToken adds the paginationNextPageToken to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetPaginationNextPageToken(paginationNextPageToken *string) {
	o.PaginationNextPageToken = paginationNextPageToken
}

// WithPaginationPageSize adds the paginationPageSize to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithPaginationPageSize(paginationPageSize *int64) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetPaginationPageSize(paginationPageSize)
	return o
}

// SetPaginationPageSize adds the paginationPageSize to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetPaginationPageSize(paginationPageSize *int64) {
	o.PaginationPageSize = paginationPageSize
}

// WithPaginationPreviousPageToken adds the paginationPreviousPageToken to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithPaginationPreviousPageToken(paginationPreviousPageToken *string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetPaginationPreviousPageToken(paginationPreviousPageToken)
	return o
}

// SetPaginationPreviousPageToken adds the paginationPreviousPageToken to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetPaginationPreviousPageToken(paginationPreviousPageToken *string) {
	o.PaginationPreviousPageToken = paginationPreviousPageToken
}

// WithSortingOrderBy adds the sortingOrderBy to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WithSortingOrderBy(sortingOrderBy []string) *PackerServiceListBucketPackagesWithVulnerabilitiesParams {
	o.SetSortingOrderBy(sortingOrderBy)
	return o
}

// SetSortingOrderBy adds the sortingOrderBy to the packer service list bucket packages with vulnerabilities params
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) SetSortingOrderBy(sortingOrderBy []string) {
	o.SortingOrderBy = sortingOrderBy
}

// WriteToRequest writes these params to a swagger request
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error {

	if err := r.SetTimeout(o.timeout); err != nil {
		return err
	}
	var res []error

	// path param bucket_name
	if err := r.SetPathParam("bucket_name", o.BucketName); err != nil {
		return err
	}

	if o.Criticality != nil {

		// binding items for criticality
		joinedCriticality := o.bindParamCriticality(reg)

		// query array param criticality
		if err := r.SetQueryParam("criticality", joinedCriticality...); err != nil {
			return err
		}
	}

	if o.Identifier != nil {

		// query param identifier
		var qrIdentifier string

		if o.Identifier != nil {
			qrIdentifier = *o.Identifier
		}
		qIdentifier := qrIdentifier
		if qIdentifier != "" {

			if err := r.SetQueryParam("identifier", qIdentifier); err != nil {
				return err
			}
		}
	}

	if o.IdentifierStartsWith != nil {

		// query param identifier_starts_with
		var qrIdentifierStartsWith string

		if o.IdentifierStartsWith != nil {
			qrIdentifierStartsWith = *o.IdentifierStartsWith
		}
		qIdentifierStartsWith := qrIdentifierStartsWith
		if qIdentifierStartsWith != "" {

			if err := r.SetQueryParam("identifier_starts_with", qIdentifierStartsWith); err != nil {
				return err
			}
		}
	}

	// path param location.organization_id
	if err := r.SetPathParam("location.organization_id", o.LocationOrganizationID); err != nil {
		return err
	}

	// path param location.project_id
	if err := r.SetPathParam("location.project_id", o.LocationProjectID); err != nil {
		return err
	}

	if o.LocationRegionProvider != nil {

		// query param location.region.provider
		var qrLocationRegionProvider string

		if o.LocationRegionProvider != nil {
			qrLocationRegionProvider = *o.LocationRegionProvider
		}
		qLocationRegionProvider := qrLocationRegionProvider
		if qLocationRegionProvider != "" {

			if err := r.SetQueryParam("location.region.provider", qLocationRegionProvider); err != nil {
				return err
			}
		}
	}

	if o.LocationRegionRegion != nil {

		// query param location.region.region
		var qrLocationRegionRegion string

		if o.LocationRegionRegion != nil {
			qrLocationRegionRegion = *o.LocationRegionRegion
		}
		qLocationRegionRegion := qrLocationRegionRegion
		if qLocationRegionRegion != "" {

			if err := r.SetQueryParam("location.region.region", qLocationRegionRegion); err != nil {
				return err
			}
		}
	}

	if o.PackageName != nil {

		// query param package_name
		var qrPackageName string

		if o.PackageName != nil {
			qrPackageName = *o.PackageName
		}
		qPackageName := qrPackageName
		if qPackageName != "" {

			if err := r.SetQueryParam("package_name", qPackageName); err != nil {
				return err
			}
		}
	}

	if o.PackageNameStartsWith != nil {

		// query param package_name_starts_with
		var qrPackageNameStartsWith string

		if o.PackageNameStartsWith != nil {
			qrPackageNameStartsWith = *o.PackageNameStartsWith
		}
		qPackageNameStartsWith := qrPackageNameStartsWith
		if qPackageNameStartsWith != "" {

			if err := r.SetQueryParam("package_name_starts_with", qPackageNameStartsWith); err != nil {
				return err
			}
		}
	}

	if o.PackageVersion != nil {

		// query param package_version
		var qrPackageVersion string

		if o.PackageVersion != nil {
			qrPackageVersion = *o.PackageVersion
		}
		qPackageVersion := qrPackageVersion
		if qPackageVersion != "" {

			if err := r.SetQueryParam("package_version", qPackageVersion); err != nil {
				return err
			}
		}
	}

	if o.PaginationNextPageToken != nil {

		// query param pagination.next_page_token
		var qrPaginationNextPageToken string

		if o.PaginationNextPageToken != nil {
			qrPaginationNextPageToken = *o.PaginationNextPageToken
		}
		qPaginationNextPageToken := qrPaginationNextPageToken
		if qPaginationNextPageToken != "" {

			if err := r.SetQueryParam("pagination.next_page_token", qPaginationNextPageToken); err != nil {
				return err
			}
		}
	}

	if o.PaginationPageSize != nil {

		// query param pagination.page_size
		var qrPaginationPageSize int64

		if o.PaginationPageSize != nil {
			qrPaginationPageSize = *o.PaginationPageSize
		}
		qPaginationPageSize := swag.FormatInt64(qrPaginationPageSize)
		if qPaginationPageSize != "" {

			if err := r.SetQueryParam("pagination.page_size", qPaginationPageSize); err != nil {
				return err
			}
		}
	}

	if o.PaginationPreviousPageToken != nil {

		// query param pagination.previous_page_token
		var qrPaginationPreviousPageToken string

		if o.PaginationPreviousPageToken != nil {
			qrPaginationPreviousPageToken = *o.PaginationPreviousPageToken
		}
		qPaginationPreviousPageToken := qrPaginationPreviousPageToken
		if qPaginationPreviousPageToken != "" {

			if err := r.SetQueryParam("pagination.previous_page_token", qPaginationPreviousPageToken); err != nil {
				return err
			}
		}
	}

	if o.SortingOrderBy != nil {

		// binding items for sorting.order_by
		joinedSortingOrderBy := o.bindParamSortingOrderBy(reg)

		// query array param sorting.order_by
		if err := r.SetQueryParam("sorting.order_by", joinedSortingOrderBy...); err != nil {
			return err
		}
	}

	if len(res) > 0 {
		return errors.CompositeValidationError(res...)
	}
	return nil
}

// bindParamPackerServiceListBucketPackagesWithVulnerabilities binds the parameter criticality
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) bindParamCriticality(formats strfmt.Registry) []string {
	criticalityIR := o.Criticality

	var criticalityIC []string
	for _, criticalityIIR := range criticalityIR { // explode []string

		criticalityIIV := criticalityIIR // string as string
		criticalityIC = append(criticalityIC, criticalityIIV)
	}

	// items.CollectionFormat: "multi"
	criticalityIS := swag.JoinByFormat(criticalityIC, "multi")

	return criticalityIS
}

// bindParamPackerServiceListBucketPackagesWithVulnerabilities binds the parameter sorting.order_by
func (o *PackerServiceListBucketPackagesWithVulnerabilitiesParams) bindParamSortingOrderBy(formats strfmt.Registry) []string {
	sortingOrderByIR := o.SortingOrderBy

	var sortingOrderByIC []string
	for _, sortingOrderByIIR := range sortingOrderByIR { // explode []string

		sortingOrderByIIV := sortingOrderByIIR // string as string
		sortingOrderByIC = append(sortingOrderByIC, sortingOrderByIIV)
	}

	// items.CollectionFormat: "multi"
	sortingOrderByIS := swag.JoinByFormat(sortingOrderByIC, "multi")

	return sortingOrderByIS
}
