From eefeafb800c483fc43a567a3ac719ad631ea6410 Mon Sep 17 00:00:00 2001 From: stainless-bot Date: Thu, 21 Nov 2024 16:12:06 +0000 Subject: [PATCH] feat(api): api update --- .stats.yml | 2 +- api.md | 24 +- queues/consumer.go | 881 ++++++++++++++++++++++++++-------------- queues/consumer_test.go | 43 +- queues/message.go | 118 ++---- queues/message_test.go | 6 +- queues/queue.go | 530 ++++++++++++------------ queues/queue_test.go | 10 +- 8 files changed, 933 insertions(+), 681 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1e98c37194c..e163d63cd95 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,2 +1,2 @@ configured_endpoints: 1451 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-c41d5095ac6ddaaef83c817e3f7a3bbf8d609ee792e4a1f07590fdd6719da1d0.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-811ce6b3fb37e41c31b89ac40edb0f29791c03499a00e728955e3a317e664d82.yml diff --git a/api.md b/api.md index c6e2d0da883..a900169279a 100644 --- a/api.md +++ b/api.md @@ -2432,35 +2432,39 @@ Methods: # Queues +Params Types: + +- queues.QueueParam + Response Types: - queues.Queue -- queues.QueueCreated -- queues.QueueUpdated - queues.QueueDeleteResponse Methods: -- client.Queues.New(ctx context.Context, params queues.QueueNewParams) (queues.QueueCreated, error) -- client.Queues.Update(ctx context.Context, queueID string, params queues.QueueUpdateParams) (queues.QueueUpdated, error) +- client.Queues.New(ctx context.Context, params queues.QueueNewParams) (queues.Queue, error) +- client.Queues.Update(ctx context.Context, queueID string, params queues.QueueUpdateParams) (queues.Queue, error) - client.Queues.List(ctx context.Context, query queues.QueueListParams) (pagination.SinglePage[queues.Queue], error) -- client.Queues.Delete(ctx context.Context, queueID string, body queues.QueueDeleteParams) ([]queues.QueueDeleteResponse, error) +- client.Queues.Delete(ctx context.Context, queueID string, body queues.QueueDeleteParams) (queues.QueueDeleteResponse, error) - client.Queues.Get(ctx context.Context, queueID string, query queues.QueueGetParams) (queues.Queue, error) ## Consumers +Params Types: + +- queues.ConsumerUnionParam + Response Types: - queues.Consumer -- queues.ConsumerNewResponse -- queues.ConsumerUpdateResponse - queues.ConsumerDeleteResponse Methods: -- client.Queues.Consumers.New(ctx context.Context, queueID string, params queues.ConsumerNewParams) (queues.ConsumerNewResponse, error) -- client.Queues.Consumers.Update(ctx context.Context, queueID string, consumerID string, params queues.ConsumerUpdateParams) (queues.ConsumerUpdateResponse, error) -- client.Queues.Consumers.Delete(ctx context.Context, queueID string, consumerID string, body queues.ConsumerDeleteParams) ([]queues.ConsumerDeleteResponse, error) +- client.Queues.Consumers.New(ctx context.Context, queueID string, params queues.ConsumerNewParams) (queues.Consumer, error) +- client.Queues.Consumers.Update(ctx context.Context, queueID string, consumerID string, params queues.ConsumerUpdateParams) (queues.Consumer, error) +- client.Queues.Consumers.Delete(ctx context.Context, queueID string, consumerID string, body queues.ConsumerDeleteParams) (queues.ConsumerDeleteResponse, error) - client.Queues.Consumers.Get(ctx context.Context, queueID string, query queues.ConsumerGetParams) ([]queues.Consumer, error) ## Messages diff --git a/queues/consumer.go b/queues/consumer.go index 68f77bd92c8..8ab70977d57 100644 --- a/queues/consumer.go +++ b/queues/consumer.go @@ -7,12 +7,14 @@ import ( "errors" "fmt" "net/http" + "reflect" "github.com/cloudflare/cloudflare-go/v3/internal/apijson" "github.com/cloudflare/cloudflare-go/v3/internal/param" "github.com/cloudflare/cloudflare-go/v3/internal/requestconfig" "github.com/cloudflare/cloudflare-go/v3/option" "github.com/cloudflare/cloudflare-go/v3/shared" + "github.com/tidwall/gjson" ) // ConsumerService contains methods and other services that help with interacting @@ -34,8 +36,8 @@ func NewConsumerService(opts ...option.RequestOption) (r *ConsumerService) { return } -// Creates a new consumer for a queue. -func (r *ConsumerService) New(ctx context.Context, queueID string, params ConsumerNewParams, opts ...option.RequestOption) (res *ConsumerNewResponse, err error) { +// Creates a new consumer for a Queue +func (r *ConsumerService) New(ctx context.Context, queueID string, params ConsumerNewParams, opts ...option.RequestOption) (res *Consumer, err error) { var env ConsumerNewResponseEnvelope opts = append(r.Options[:], opts...) if params.AccountID.Value == "" { @@ -56,7 +58,7 @@ func (r *ConsumerService) New(ctx context.Context, queueID string, params Consum } // Updates the consumer for a queue, or creates one if it does not exist. -func (r *ConsumerService) Update(ctx context.Context, queueID string, consumerID string, params ConsumerUpdateParams, opts ...option.RequestOption) (res *ConsumerUpdateResponse, err error) { +func (r *ConsumerService) Update(ctx context.Context, queueID string, consumerID string, params ConsumerUpdateParams, opts ...option.RequestOption) (res *Consumer, err error) { var env ConsumerUpdateResponseEnvelope opts = append(r.Options[:], opts...) if params.AccountID.Value == "" { @@ -81,8 +83,7 @@ func (r *ConsumerService) Update(ctx context.Context, queueID string, consumerID } // Deletes the consumer for a queue. -func (r *ConsumerService) Delete(ctx context.Context, queueID string, consumerID string, body ConsumerDeleteParams, opts ...option.RequestOption) (res *[]ConsumerDeleteResponse, err error) { - var env ConsumerDeleteResponseEnvelope +func (r *ConsumerService) Delete(ctx context.Context, queueID string, consumerID string, body ConsumerDeleteParams, opts ...option.RequestOption) (res *ConsumerDeleteResponse, err error) { opts = append(r.Options[:], opts...) if body.AccountID.Value == "" { err = errors.New("missing required account_id parameter") @@ -97,15 +98,11 @@ func (r *ConsumerService) Delete(ctx context.Context, queueID string, consumerID return } path := fmt.Sprintf("accounts/%s/queues/%s/consumers/%s", body.AccountID, queueID, consumerID) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &env, opts...) - if err != nil { - return - } - res = &env.Result + err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...) return } -// Returns the consumers for a queue. +// Returns the consumers for a Queue func (r *ConsumerService) Get(ctx context.Context, queueID string, query ConsumerGetParams, opts ...option.RequestOption) (res *[]Consumer, err error) { var env ConsumerGetResponseEnvelope opts = append(r.Options[:], opts...) @@ -127,196 +124,522 @@ func (r *ConsumerService) Get(ctx context.Context, queueID string, query Consume } type Consumer struct { - CreatedOn string `json:"created_on"` - Environment string `json:"environment"` - QueueName string `json:"queue_name"` - Service string `json:"service"` - Settings ConsumerSettings `json:"settings"` - JSON consumerJSON `json:"-"` + // A Resource identifier. + ConsumerID string `json:"consumer_id"` + CreatedOn string `json:"created_on"` + // A Resource identifier. + QueueID string `json:"queue_id"` + // Name of a Worker + Script string `json:"script"` + // This field can have the runtime type of [ConsumerMqWorkerConsumerSettings], + // [ConsumerMqHTTPConsumerSettings]. + Settings interface{} `json:"settings"` + Type ConsumerType `json:"type"` + JSON consumerJSON `json:"-"` + union ConsumerUnion } // consumerJSON contains the JSON metadata for the struct [Consumer] type consumerJSON struct { + ConsumerID apijson.Field CreatedOn apijson.Field - Environment apijson.Field - QueueName apijson.Field - Service apijson.Field + QueueID apijson.Field + Script apijson.Field Settings apijson.Field + Type apijson.Field raw string ExtraFields map[string]apijson.Field } +func (r consumerJSON) RawJSON() string { + return r.raw +} + func (r *Consumer) UnmarshalJSON(data []byte) (err error) { + *r = Consumer{} + err = apijson.UnmarshalRoot(data, &r.union) + if err != nil { + return err + } + return apijson.Port(r.union, &r) +} + +// AsUnion returns a [ConsumerUnion] interface which you can cast to the specific +// types for more type safety. +// +// Possible runtime types of the union are [queues.ConsumerMqWorkerConsumer], +// [queues.ConsumerMqHTTPConsumer]. +func (r Consumer) AsUnion() ConsumerUnion { + return r.union +} + +// Union satisfied by [queues.ConsumerMqWorkerConsumer] or +// [queues.ConsumerMqHTTPConsumer]. +type ConsumerUnion interface { + implementsQueuesConsumer() +} + +func init() { + apijson.RegisterUnion( + reflect.TypeOf((*ConsumerUnion)(nil)).Elem(), + "", + apijson.UnionVariant{ + TypeFilter: gjson.JSON, + Type: reflect.TypeOf(ConsumerMqWorkerConsumer{}), + }, + apijson.UnionVariant{ + TypeFilter: gjson.JSON, + Type: reflect.TypeOf(ConsumerMqHTTPConsumer{}), + }, + ) +} + +type ConsumerMqWorkerConsumer struct { + // A Resource identifier. + ConsumerID string `json:"consumer_id"` + CreatedOn string `json:"created_on"` + // A Resource identifier. + QueueID string `json:"queue_id"` + // Name of a Worker + Script string `json:"script"` + Settings ConsumerMqWorkerConsumerSettings `json:"settings"` + Type ConsumerMqWorkerConsumerType `json:"type"` + JSON consumerMqWorkerConsumerJSON `json:"-"` +} + +// consumerMqWorkerConsumerJSON contains the JSON metadata for the struct +// [ConsumerMqWorkerConsumer] +type consumerMqWorkerConsumerJSON struct { + ConsumerID apijson.Field + CreatedOn apijson.Field + QueueID apijson.Field + Script apijson.Field + Settings apijson.Field + Type apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *ConsumerMqWorkerConsumer) UnmarshalJSON(data []byte) (err error) { return apijson.UnmarshalRoot(data, r) } -func (r consumerJSON) RawJSON() string { +func (r consumerMqWorkerConsumerJSON) RawJSON() string { return r.raw } -type ConsumerSettings struct { +func (r ConsumerMqWorkerConsumer) implementsQueuesConsumer() {} + +type ConsumerMqWorkerConsumerSettings struct { // The maximum number of messages to include in a batch. BatchSize float64 `json:"batch_size"` + // Maximum number of concurrent consumers that may consume from this Queue. Set to + // `null` to automatically opt in to the platform's maximum (recommended). + MaxConcurrency float64 `json:"max_concurrency"` // The maximum number of retries - MaxRetries float64 `json:"max_retries"` - MaxWaitTimeMs float64 `json:"max_wait_time_ms"` - JSON consumerSettingsJSON `json:"-"` + MaxRetries float64 `json:"max_retries"` + // The number of milliseconds to wait for a batch to fill up before attempting to + // deliver it + MaxWaitTimeMs float64 `json:"max_wait_time_ms"` + // The number of seconds to delay before making the message available for another + // attempt. + RetryDelay float64 `json:"retry_delay"` + JSON consumerMqWorkerConsumerSettingsJSON `json:"-"` +} + +// consumerMqWorkerConsumerSettingsJSON contains the JSON metadata for the struct +// [ConsumerMqWorkerConsumerSettings] +type consumerMqWorkerConsumerSettingsJSON struct { + BatchSize apijson.Field + MaxConcurrency apijson.Field + MaxRetries apijson.Field + MaxWaitTimeMs apijson.Field + RetryDelay apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *ConsumerMqWorkerConsumerSettings) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) } -// consumerSettingsJSON contains the JSON metadata for the struct -// [ConsumerSettings] -type consumerSettingsJSON struct { - BatchSize apijson.Field - MaxRetries apijson.Field - MaxWaitTimeMs apijson.Field - raw string - ExtraFields map[string]apijson.Field +func (r consumerMqWorkerConsumerSettingsJSON) RawJSON() string { + return r.raw } -func (r *ConsumerSettings) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} +type ConsumerMqWorkerConsumerType string -func (r consumerSettingsJSON) RawJSON() string { - return r.raw +const ( + ConsumerMqWorkerConsumerTypeWorker ConsumerMqWorkerConsumerType = "worker" +) + +func (r ConsumerMqWorkerConsumerType) IsKnown() bool { + switch r { + case ConsumerMqWorkerConsumerTypeWorker: + return true + } + return false } -type ConsumerNewResponse struct { - CreatedOn string `json:"created_on"` - // The name of the dead letter queue. - DeadLetterQueue string `json:"dead_letter_queue"` - Environment string `json:"environment"` - QueueName string `json:"queue_name"` - ScriptName string `json:"script_name"` - Settings ConsumerNewResponseSettings `json:"settings"` - JSON consumerNewResponseJSON `json:"-"` +type ConsumerMqHTTPConsumer struct { + // A Resource identifier. + ConsumerID string `json:"consumer_id"` + CreatedOn string `json:"created_on"` + // A Resource identifier. + QueueID string `json:"queue_id"` + Settings ConsumerMqHTTPConsumerSettings `json:"settings"` + Type ConsumerMqHTTPConsumerType `json:"type"` + JSON consumerMqHTTPConsumerJSON `json:"-"` } -// consumerNewResponseJSON contains the JSON metadata for the struct -// [ConsumerNewResponse] -type consumerNewResponseJSON struct { - CreatedOn apijson.Field - DeadLetterQueue apijson.Field - Environment apijson.Field - QueueName apijson.Field - ScriptName apijson.Field - Settings apijson.Field - raw string - ExtraFields map[string]apijson.Field +// consumerMqHTTPConsumerJSON contains the JSON metadata for the struct +// [ConsumerMqHTTPConsumer] +type consumerMqHTTPConsumerJSON struct { + ConsumerID apijson.Field + CreatedOn apijson.Field + QueueID apijson.Field + Settings apijson.Field + Type apijson.Field + raw string + ExtraFields map[string]apijson.Field } -func (r *ConsumerNewResponse) UnmarshalJSON(data []byte) (err error) { +func (r *ConsumerMqHTTPConsumer) UnmarshalJSON(data []byte) (err error) { return apijson.UnmarshalRoot(data, r) } -func (r consumerNewResponseJSON) RawJSON() string { +func (r consumerMqHTTPConsumerJSON) RawJSON() string { return r.raw } -type ConsumerNewResponseSettings struct { +func (r ConsumerMqHTTPConsumer) implementsQueuesConsumer() {} + +type ConsumerMqHTTPConsumerSettings struct { // The maximum number of messages to include in a batch. BatchSize float64 `json:"batch_size"` // The maximum number of retries - MaxRetries float64 `json:"max_retries"` - MaxWaitTimeMs float64 `json:"max_wait_time_ms"` - JSON consumerNewResponseSettingsJSON `json:"-"` + MaxRetries float64 `json:"max_retries"` + // The number of seconds to delay before making the message available for another + // attempt. + RetryDelay float64 `json:"retry_delay"` + // The number of milliseconds that a message is exclusively leased. After the + // timeout, the message becomes available for another attempt. + VisibilityTimeoutMs float64 `json:"visibility_timeout_ms"` + JSON consumerMqHTTPConsumerSettingsJSON `json:"-"` +} + +// consumerMqHTTPConsumerSettingsJSON contains the JSON metadata for the struct +// [ConsumerMqHTTPConsumerSettings] +type consumerMqHTTPConsumerSettingsJSON struct { + BatchSize apijson.Field + MaxRetries apijson.Field + RetryDelay apijson.Field + VisibilityTimeoutMs apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *ConsumerMqHTTPConsumerSettings) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) } -// consumerNewResponseSettingsJSON contains the JSON metadata for the struct -// [ConsumerNewResponseSettings] -type consumerNewResponseSettingsJSON struct { - BatchSize apijson.Field - MaxRetries apijson.Field - MaxWaitTimeMs apijson.Field - raw string - ExtraFields map[string]apijson.Field +func (r consumerMqHTTPConsumerSettingsJSON) RawJSON() string { + return r.raw } -func (r *ConsumerNewResponseSettings) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) +type ConsumerMqHTTPConsumerType string + +const ( + ConsumerMqHTTPConsumerTypeHTTPPull ConsumerMqHTTPConsumerType = "http_pull" +) + +func (r ConsumerMqHTTPConsumerType) IsKnown() bool { + switch r { + case ConsumerMqHTTPConsumerTypeHTTPPull: + return true + } + return false } -func (r consumerNewResponseSettingsJSON) RawJSON() string { - return r.raw +type ConsumerType string + +const ( + ConsumerTypeWorker ConsumerType = "worker" + ConsumerTypeHTTPPull ConsumerType = "http_pull" +) + +func (r ConsumerType) IsKnown() bool { + switch r { + case ConsumerTypeWorker, ConsumerTypeHTTPPull: + return true + } + return false } -type ConsumerUpdateResponse struct { - CreatedOn string `json:"created_on"` - DeadLetterQueue string `json:"dead_letter_queue"` - Environment string `json:"environment"` - QueueName string `json:"queue_name"` - ScriptName string `json:"script_name"` - Settings ConsumerUpdateResponseSettings `json:"settings"` - JSON consumerUpdateResponseJSON `json:"-"` +type ConsumerParam struct { + // Name of a Worker + ScriptName param.Field[string] `json:"script_name"` + Settings param.Field[interface{}] `json:"settings"` + Type param.Field[ConsumerType] `json:"type"` } -// consumerUpdateResponseJSON contains the JSON metadata for the struct -// [ConsumerUpdateResponse] -type consumerUpdateResponseJSON struct { - CreatedOn apijson.Field - DeadLetterQueue apijson.Field - Environment apijson.Field - QueueName apijson.Field - ScriptName apijson.Field - Settings apijson.Field - raw string - ExtraFields map[string]apijson.Field +func (r ConsumerParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) } -func (r *ConsumerUpdateResponse) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) +func (r ConsumerParam) implementsQueuesConsumerUnionParam() {} + +// Satisfied by [queues.ConsumerMqWorkerConsumerParam], +// [queues.ConsumerMqHTTPConsumerParam], [ConsumerParam]. +type ConsumerUnionParam interface { + implementsQueuesConsumerUnionParam() } -func (r consumerUpdateResponseJSON) RawJSON() string { - return r.raw +type ConsumerMqWorkerConsumerParam struct { + // Name of a Worker + ScriptName param.Field[string] `json:"script_name"` + Settings param.Field[ConsumerMqWorkerConsumerSettingsParam] `json:"settings"` + Type param.Field[ConsumerMqWorkerConsumerType] `json:"type"` } -type ConsumerUpdateResponseSettings struct { - BatchSize float64 `json:"batch_size"` +func (r ConsumerMqWorkerConsumerParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r ConsumerMqWorkerConsumerParam) implementsQueuesConsumerUnionParam() {} + +type ConsumerMqWorkerConsumerSettingsParam struct { + // The maximum number of messages to include in a batch. + BatchSize param.Field[float64] `json:"batch_size"` + // Maximum number of concurrent consumers that may consume from this Queue. Set to + // `null` to automatically opt in to the platform's maximum (recommended). + MaxConcurrency param.Field[float64] `json:"max_concurrency"` + // The maximum number of retries + MaxRetries param.Field[float64] `json:"max_retries"` + // The number of milliseconds to wait for a batch to fill up before attempting to + // deliver it + MaxWaitTimeMs param.Field[float64] `json:"max_wait_time_ms"` + // The number of seconds to delay before making the message available for another + // attempt. + RetryDelay param.Field[float64] `json:"retry_delay"` +} + +func (r ConsumerMqWorkerConsumerSettingsParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +type ConsumerMqHTTPConsumerParam struct { + Settings param.Field[ConsumerMqHTTPConsumerSettingsParam] `json:"settings"` + Type param.Field[ConsumerMqHTTPConsumerType] `json:"type"` +} + +func (r ConsumerMqHTTPConsumerParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r ConsumerMqHTTPConsumerParam) implementsQueuesConsumerUnionParam() {} + +type ConsumerMqHTTPConsumerSettingsParam struct { + // The maximum number of messages to include in a batch. + BatchSize param.Field[float64] `json:"batch_size"` // The maximum number of retries - MaxRetries float64 `json:"max_retries"` - MaxWaitTimeMs float64 `json:"max_wait_time_ms"` - JSON consumerUpdateResponseSettingsJSON `json:"-"` + MaxRetries param.Field[float64] `json:"max_retries"` + // The number of seconds to delay before making the message available for another + // attempt. + RetryDelay param.Field[float64] `json:"retry_delay"` + // The number of milliseconds that a message is exclusively leased. After the + // timeout, the message becomes available for another attempt. + VisibilityTimeoutMs param.Field[float64] `json:"visibility_timeout_ms"` } -// consumerUpdateResponseSettingsJSON contains the JSON metadata for the struct -// [ConsumerUpdateResponseSettings] -type consumerUpdateResponseSettingsJSON struct { - BatchSize apijson.Field - MaxRetries apijson.Field - MaxWaitTimeMs apijson.Field - raw string - ExtraFields map[string]apijson.Field +func (r ConsumerMqHTTPConsumerSettingsParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) } -func (r *ConsumerUpdateResponseSettings) UnmarshalJSON(data []byte) (err error) { +type ConsumerDeleteResponse struct { + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + // Indicates if the API call was successful or not. + Success ConsumerDeleteResponseSuccess `json:"success"` + JSON consumerDeleteResponseJSON `json:"-"` +} + +// consumerDeleteResponseJSON contains the JSON metadata for the struct +// [ConsumerDeleteResponse] +type consumerDeleteResponseJSON struct { + Errors apijson.Field + Messages apijson.Field + Success apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *ConsumerDeleteResponse) UnmarshalJSON(data []byte) (err error) { return apijson.UnmarshalRoot(data, r) } -func (r consumerUpdateResponseSettingsJSON) RawJSON() string { +func (r consumerDeleteResponseJSON) RawJSON() string { return r.raw } -type ConsumerDeleteResponse = interface{} +// Indicates if the API call was successful or not. +type ConsumerDeleteResponseSuccess bool + +const ( + ConsumerDeleteResponseSuccessTrue ConsumerDeleteResponseSuccess = true +) + +func (r ConsumerDeleteResponseSuccess) IsKnown() bool { + switch r { + case ConsumerDeleteResponseSuccessTrue: + return true + } + return false +} type ConsumerNewParams struct { - // Identifier. - AccountID param.Field[string] `path:"account_id,required"` - Body interface{} `json:"body,required"` + // A Resource identifier. + AccountID param.Field[string] `path:"account_id,required"` + Body ConsumerNewParamsBodyUnion `json:"body,required"` } func (r ConsumerNewParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r.Body) } +type ConsumerNewParamsBody struct { + DeadLetterQueue param.Field[string] `json:"dead_letter_queue"` + // Name of a Worker + ScriptName param.Field[string] `json:"script_name"` + Settings param.Field[interface{}] `json:"settings"` + Type param.Field[ConsumerNewParamsBodyType] `json:"type"` +} + +func (r ConsumerNewParamsBody) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r ConsumerNewParamsBody) implementsQueuesConsumerNewParamsBodyUnion() {} + +// Satisfied by [queues.ConsumerNewParamsBodyMqWorkerConsumer], +// [queues.ConsumerNewParamsBodyMqHTTPConsumer], [ConsumerNewParamsBody]. +type ConsumerNewParamsBodyUnion interface { + implementsQueuesConsumerNewParamsBodyUnion() +} + +type ConsumerNewParamsBodyMqWorkerConsumer struct { + DeadLetterQueue param.Field[string] `json:"dead_letter_queue"` + // Name of a Worker + ScriptName param.Field[string] `json:"script_name"` + Settings param.Field[ConsumerNewParamsBodyMqWorkerConsumerSettings] `json:"settings"` + Type param.Field[ConsumerNewParamsBodyMqWorkerConsumerType] `json:"type"` +} + +func (r ConsumerNewParamsBodyMqWorkerConsumer) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r ConsumerNewParamsBodyMqWorkerConsumer) implementsQueuesConsumerNewParamsBodyUnion() {} + +type ConsumerNewParamsBodyMqWorkerConsumerSettings struct { + // The maximum number of messages to include in a batch. + BatchSize param.Field[float64] `json:"batch_size"` + // Maximum number of concurrent consumers that may consume from this Queue. Set to + // `null` to automatically opt in to the platform's maximum (recommended). + MaxConcurrency param.Field[float64] `json:"max_concurrency"` + // The maximum number of retries + MaxRetries param.Field[float64] `json:"max_retries"` + // The number of milliseconds to wait for a batch to fill up before attempting to + // deliver it + MaxWaitTimeMs param.Field[float64] `json:"max_wait_time_ms"` + // The number of seconds to delay before making the message available for another + // attempt. + RetryDelay param.Field[float64] `json:"retry_delay"` +} + +func (r ConsumerNewParamsBodyMqWorkerConsumerSettings) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +type ConsumerNewParamsBodyMqWorkerConsumerType string + +const ( + ConsumerNewParamsBodyMqWorkerConsumerTypeWorker ConsumerNewParamsBodyMqWorkerConsumerType = "worker" +) + +func (r ConsumerNewParamsBodyMqWorkerConsumerType) IsKnown() bool { + switch r { + case ConsumerNewParamsBodyMqWorkerConsumerTypeWorker: + return true + } + return false +} + +type ConsumerNewParamsBodyMqHTTPConsumer struct { + DeadLetterQueue param.Field[string] `json:"dead_letter_queue"` + Settings param.Field[ConsumerNewParamsBodyMqHTTPConsumerSettings] `json:"settings"` + Type param.Field[ConsumerNewParamsBodyMqHTTPConsumerType] `json:"type"` +} + +func (r ConsumerNewParamsBodyMqHTTPConsumer) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r ConsumerNewParamsBodyMqHTTPConsumer) implementsQueuesConsumerNewParamsBodyUnion() {} + +type ConsumerNewParamsBodyMqHTTPConsumerSettings struct { + // The maximum number of messages to include in a batch. + BatchSize param.Field[float64] `json:"batch_size"` + // The maximum number of retries + MaxRetries param.Field[float64] `json:"max_retries"` + // The number of seconds to delay before making the message available for another + // attempt. + RetryDelay param.Field[float64] `json:"retry_delay"` + // The number of milliseconds that a message is exclusively leased. After the + // timeout, the message becomes available for another attempt. + VisibilityTimeoutMs param.Field[float64] `json:"visibility_timeout_ms"` +} + +func (r ConsumerNewParamsBodyMqHTTPConsumerSettings) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +type ConsumerNewParamsBodyMqHTTPConsumerType string + +const ( + ConsumerNewParamsBodyMqHTTPConsumerTypeHTTPPull ConsumerNewParamsBodyMqHTTPConsumerType = "http_pull" +) + +func (r ConsumerNewParamsBodyMqHTTPConsumerType) IsKnown() bool { + switch r { + case ConsumerNewParamsBodyMqHTTPConsumerTypeHTTPPull: + return true + } + return false +} + +type ConsumerNewParamsBodyType string + +const ( + ConsumerNewParamsBodyTypeWorker ConsumerNewParamsBodyType = "worker" + ConsumerNewParamsBodyTypeHTTPPull ConsumerNewParamsBodyType = "http_pull" +) + +func (r ConsumerNewParamsBodyType) IsKnown() bool { + switch r { + case ConsumerNewParamsBodyTypeWorker, ConsumerNewParamsBodyTypeHTTPPull: + return true + } + return false +} + type ConsumerNewResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result ConsumerNewResponse `json:"result,required,nullable"` - // Whether the API call was successful. - Success ConsumerNewResponseEnvelopeSuccess `json:"success,required"` - ResultInfo ConsumerNewResponseEnvelopeResultInfo `json:"result_info"` - JSON consumerNewResponseEnvelopeJSON `json:"-"` + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + Result Consumer `json:"result"` + // Indicates if the API call was successful or not. + Success ConsumerNewResponseEnvelopeSuccess `json:"success"` + JSON consumerNewResponseEnvelopeJSON `json:"-"` } // consumerNewResponseEnvelopeJSON contains the JSON metadata for the struct @@ -326,7 +649,6 @@ type consumerNewResponseEnvelopeJSON struct { Messages apijson.Field Result apijson.Field Success apijson.Field - ResultInfo apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -339,7 +661,7 @@ func (r consumerNewResponseEnvelopeJSON) RawJSON() string { return r.raw } -// Whether the API call was successful. +// Indicates if the API call was successful or not. type ConsumerNewResponseEnvelopeSuccess bool const ( @@ -354,217 +676,202 @@ func (r ConsumerNewResponseEnvelopeSuccess) IsKnown() bool { return false } -type ConsumerNewResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON consumerNewResponseEnvelopeResultInfoJSON `json:"-"` -} - -// consumerNewResponseEnvelopeResultInfoJSON contains the JSON metadata for the -// struct [ConsumerNewResponseEnvelopeResultInfo] -type consumerNewResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field +type ConsumerUpdateParams struct { + // A Resource identifier. + AccountID param.Field[string] `path:"account_id,required"` + Body ConsumerUpdateParamsBodyUnion `json:"body,required"` } -func (r *ConsumerNewResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) +func (r ConsumerUpdateParams) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r.Body) } -func (r consumerNewResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw +type ConsumerUpdateParamsBody struct { + DeadLetterQueue param.Field[string] `json:"dead_letter_queue"` + // Name of a Worker + ScriptName param.Field[string] `json:"script_name"` + Settings param.Field[interface{}] `json:"settings"` + Type param.Field[ConsumerUpdateParamsBodyType] `json:"type"` } -type ConsumerUpdateParams struct { - // Identifier. - AccountID param.Field[string] `path:"account_id,required"` - Body interface{} `json:"body,required"` +func (r ConsumerUpdateParamsBody) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) } -func (r ConsumerUpdateParams) MarshalJSON() (data []byte, err error) { - return apijson.MarshalRoot(r.Body) +func (r ConsumerUpdateParamsBody) implementsQueuesConsumerUpdateParamsBodyUnion() {} + +// Satisfied by [queues.ConsumerUpdateParamsBodyMqWorkerConsumer], +// [queues.ConsumerUpdateParamsBodyMqHTTPConsumer], [ConsumerUpdateParamsBody]. +type ConsumerUpdateParamsBodyUnion interface { + implementsQueuesConsumerUpdateParamsBodyUnion() } -type ConsumerUpdateResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result ConsumerUpdateResponse `json:"result,required,nullable"` - // Whether the API call was successful. - Success ConsumerUpdateResponseEnvelopeSuccess `json:"success,required"` - ResultInfo ConsumerUpdateResponseEnvelopeResultInfo `json:"result_info"` - JSON consumerUpdateResponseEnvelopeJSON `json:"-"` +type ConsumerUpdateParamsBodyMqWorkerConsumer struct { + DeadLetterQueue param.Field[string] `json:"dead_letter_queue"` + // Name of a Worker + ScriptName param.Field[string] `json:"script_name"` + Settings param.Field[ConsumerUpdateParamsBodyMqWorkerConsumerSettings] `json:"settings"` + Type param.Field[ConsumerUpdateParamsBodyMqWorkerConsumerType] `json:"type"` } -// consumerUpdateResponseEnvelopeJSON contains the JSON metadata for the struct -// [ConsumerUpdateResponseEnvelope] -type consumerUpdateResponseEnvelopeJSON struct { - Errors apijson.Field - Messages apijson.Field - Result apijson.Field - Success apijson.Field - ResultInfo apijson.Field - raw string - ExtraFields map[string]apijson.Field +func (r ConsumerUpdateParamsBodyMqWorkerConsumer) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) } -func (r *ConsumerUpdateResponseEnvelope) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) +func (r ConsumerUpdateParamsBodyMqWorkerConsumer) implementsQueuesConsumerUpdateParamsBodyUnion() {} + +type ConsumerUpdateParamsBodyMqWorkerConsumerSettings struct { + // The maximum number of messages to include in a batch. + BatchSize param.Field[float64] `json:"batch_size"` + // Maximum number of concurrent consumers that may consume from this Queue. Set to + // `null` to automatically opt in to the platform's maximum (recommended). + MaxConcurrency param.Field[float64] `json:"max_concurrency"` + // The maximum number of retries + MaxRetries param.Field[float64] `json:"max_retries"` + // The number of milliseconds to wait for a batch to fill up before attempting to + // deliver it + MaxWaitTimeMs param.Field[float64] `json:"max_wait_time_ms"` + // The number of seconds to delay before making the message available for another + // attempt. + RetryDelay param.Field[float64] `json:"retry_delay"` } -func (r consumerUpdateResponseEnvelopeJSON) RawJSON() string { - return r.raw +func (r ConsumerUpdateParamsBodyMqWorkerConsumerSettings) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) } -// Whether the API call was successful. -type ConsumerUpdateResponseEnvelopeSuccess bool +type ConsumerUpdateParamsBodyMqWorkerConsumerType string const ( - ConsumerUpdateResponseEnvelopeSuccessTrue ConsumerUpdateResponseEnvelopeSuccess = true + ConsumerUpdateParamsBodyMqWorkerConsumerTypeWorker ConsumerUpdateParamsBodyMqWorkerConsumerType = "worker" ) -func (r ConsumerUpdateResponseEnvelopeSuccess) IsKnown() bool { +func (r ConsumerUpdateParamsBodyMqWorkerConsumerType) IsKnown() bool { switch r { - case ConsumerUpdateResponseEnvelopeSuccessTrue: + case ConsumerUpdateParamsBodyMqWorkerConsumerTypeWorker: return true } return false } -type ConsumerUpdateResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON consumerUpdateResponseEnvelopeResultInfoJSON `json:"-"` -} - -// consumerUpdateResponseEnvelopeResultInfoJSON contains the JSON metadata for the -// struct [ConsumerUpdateResponseEnvelopeResultInfo] -type consumerUpdateResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field +type ConsumerUpdateParamsBodyMqHTTPConsumer struct { + DeadLetterQueue param.Field[string] `json:"dead_letter_queue"` + Settings param.Field[ConsumerUpdateParamsBodyMqHTTPConsumerSettings] `json:"settings"` + Type param.Field[ConsumerUpdateParamsBodyMqHTTPConsumerType] `json:"type"` } -func (r *ConsumerUpdateResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) +func (r ConsumerUpdateParamsBodyMqHTTPConsumer) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) } -func (r consumerUpdateResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw +func (r ConsumerUpdateParamsBodyMqHTTPConsumer) implementsQueuesConsumerUpdateParamsBodyUnion() {} + +type ConsumerUpdateParamsBodyMqHTTPConsumerSettings struct { + // The maximum number of messages to include in a batch. + BatchSize param.Field[float64] `json:"batch_size"` + // The maximum number of retries + MaxRetries param.Field[float64] `json:"max_retries"` + // The number of seconds to delay before making the message available for another + // attempt. + RetryDelay param.Field[float64] `json:"retry_delay"` + // The number of milliseconds that a message is exclusively leased. After the + // timeout, the message becomes available for another attempt. + VisibilityTimeoutMs param.Field[float64] `json:"visibility_timeout_ms"` } -type ConsumerDeleteParams struct { - // Identifier. - AccountID param.Field[string] `path:"account_id,required"` +func (r ConsumerUpdateParamsBodyMqHTTPConsumerSettings) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) } -type ConsumerDeleteResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result []ConsumerDeleteResponse `json:"result,required,nullable"` - // Whether the API call was successful. - Success ConsumerDeleteResponseEnvelopeSuccess `json:"success,required"` - ResultInfo ConsumerDeleteResponseEnvelopeResultInfo `json:"result_info"` - JSON consumerDeleteResponseEnvelopeJSON `json:"-"` +type ConsumerUpdateParamsBodyMqHTTPConsumerType string + +const ( + ConsumerUpdateParamsBodyMqHTTPConsumerTypeHTTPPull ConsumerUpdateParamsBodyMqHTTPConsumerType = "http_pull" +) + +func (r ConsumerUpdateParamsBodyMqHTTPConsumerType) IsKnown() bool { + switch r { + case ConsumerUpdateParamsBodyMqHTTPConsumerTypeHTTPPull: + return true + } + return false } -// consumerDeleteResponseEnvelopeJSON contains the JSON metadata for the struct -// [ConsumerDeleteResponseEnvelope] -type consumerDeleteResponseEnvelopeJSON struct { +type ConsumerUpdateParamsBodyType string + +const ( + ConsumerUpdateParamsBodyTypeWorker ConsumerUpdateParamsBodyType = "worker" + ConsumerUpdateParamsBodyTypeHTTPPull ConsumerUpdateParamsBodyType = "http_pull" +) + +func (r ConsumerUpdateParamsBodyType) IsKnown() bool { + switch r { + case ConsumerUpdateParamsBodyTypeWorker, ConsumerUpdateParamsBodyTypeHTTPPull: + return true + } + return false +} + +type ConsumerUpdateResponseEnvelope struct { + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + Result Consumer `json:"result"` + // Indicates if the API call was successful or not. + Success ConsumerUpdateResponseEnvelopeSuccess `json:"success"` + JSON consumerUpdateResponseEnvelopeJSON `json:"-"` +} + +// consumerUpdateResponseEnvelopeJSON contains the JSON metadata for the struct +// [ConsumerUpdateResponseEnvelope] +type consumerUpdateResponseEnvelopeJSON struct { Errors apijson.Field Messages apijson.Field Result apijson.Field Success apijson.Field - ResultInfo apijson.Field raw string ExtraFields map[string]apijson.Field } -func (r *ConsumerDeleteResponseEnvelope) UnmarshalJSON(data []byte) (err error) { +func (r *ConsumerUpdateResponseEnvelope) UnmarshalJSON(data []byte) (err error) { return apijson.UnmarshalRoot(data, r) } -func (r consumerDeleteResponseEnvelopeJSON) RawJSON() string { +func (r consumerUpdateResponseEnvelopeJSON) RawJSON() string { return r.raw } -// Whether the API call was successful. -type ConsumerDeleteResponseEnvelopeSuccess bool +// Indicates if the API call was successful or not. +type ConsumerUpdateResponseEnvelopeSuccess bool const ( - ConsumerDeleteResponseEnvelopeSuccessTrue ConsumerDeleteResponseEnvelopeSuccess = true + ConsumerUpdateResponseEnvelopeSuccessTrue ConsumerUpdateResponseEnvelopeSuccess = true ) -func (r ConsumerDeleteResponseEnvelopeSuccess) IsKnown() bool { +func (r ConsumerUpdateResponseEnvelopeSuccess) IsKnown() bool { switch r { - case ConsumerDeleteResponseEnvelopeSuccessTrue: + case ConsumerUpdateResponseEnvelopeSuccessTrue: return true } return false } -type ConsumerDeleteResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON consumerDeleteResponseEnvelopeResultInfoJSON `json:"-"` -} - -// consumerDeleteResponseEnvelopeResultInfoJSON contains the JSON metadata for the -// struct [ConsumerDeleteResponseEnvelopeResultInfo] -type consumerDeleteResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *ConsumerDeleteResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r consumerDeleteResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw +type ConsumerDeleteParams struct { + // A Resource identifier. + AccountID param.Field[string] `path:"account_id,required"` } type ConsumerGetParams struct { - // Identifier. + // A Resource identifier. AccountID param.Field[string] `path:"account_id,required"` } type ConsumerGetResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result []Consumer `json:"result,required,nullable"` - // Whether the API call was successful. - Success ConsumerGetResponseEnvelopeSuccess `json:"success,required"` - ResultInfo ConsumerGetResponseEnvelopeResultInfo `json:"result_info"` - JSON consumerGetResponseEnvelopeJSON `json:"-"` + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + Result []Consumer `json:"result"` + // Indicates if the API call was successful or not. + Success ConsumerGetResponseEnvelopeSuccess `json:"success"` + JSON consumerGetResponseEnvelopeJSON `json:"-"` } // consumerGetResponseEnvelopeJSON contains the JSON metadata for the struct @@ -574,7 +881,6 @@ type consumerGetResponseEnvelopeJSON struct { Messages apijson.Field Result apijson.Field Success apijson.Field - ResultInfo apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -587,7 +893,7 @@ func (r consumerGetResponseEnvelopeJSON) RawJSON() string { return r.raw } -// Whether the API call was successful. +// Indicates if the API call was successful or not. type ConsumerGetResponseEnvelopeSuccess bool const ( @@ -601,36 +907,3 @@ func (r ConsumerGetResponseEnvelopeSuccess) IsKnown() bool { } return false } - -type ConsumerGetResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - TotalPages float64 `json:"total_pages"` - JSON consumerGetResponseEnvelopeResultInfoJSON `json:"-"` -} - -// consumerGetResponseEnvelopeResultInfoJSON contains the JSON metadata for the -// struct [ConsumerGetResponseEnvelopeResultInfo] -type consumerGetResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - TotalPages apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *ConsumerGetResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r consumerGetResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw -} diff --git a/queues/consumer_test.go b/queues/consumer_test.go index 3eb2ff4fd2d..76719a4cf5e 100644 --- a/queues/consumer_test.go +++ b/queues/consumer_test.go @@ -14,7 +14,7 @@ import ( "github.com/cloudflare/cloudflare-go/v3/queues" ) -func TestConsumerNew(t *testing.T) { +func TestConsumerNewWithOptionalParams(t *testing.T) { baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -32,16 +32,17 @@ func TestConsumerNew(t *testing.T) { "023e105f4ecef8ad9ca31a8372d0c353", queues.ConsumerNewParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), - Body: map[string]interface{}{ - "dead_letter_queue": "example-dlq", - "environment": "production", - "script_name": "example-consumer", - "settings": map[string]interface{}{ - "batch_size": int64(10), - "max_retries": int64(3), - "max_wait_time_ms": int64(5000), - }, - "type": "worker", + Body: queues.ConsumerNewParamsBodyMqWorkerConsumer{ + DeadLetterQueue: cloudflare.F("example-queue"), + ScriptName: cloudflare.F("my-consumer-worker"), + Settings: cloudflare.F(queues.ConsumerNewParamsBodyMqWorkerConsumerSettings{ + BatchSize: cloudflare.F(50.000000), + MaxConcurrency: cloudflare.F(10.000000), + MaxRetries: cloudflare.F(3.000000), + MaxWaitTimeMs: cloudflare.F(5000.000000), + RetryDelay: cloudflare.F(10.000000), + }), + Type: cloudflare.F(queues.ConsumerNewParamsBodyMqWorkerConsumerTypeWorker), }, }, ) @@ -54,7 +55,7 @@ func TestConsumerNew(t *testing.T) { } } -func TestConsumerUpdate(t *testing.T) { +func TestConsumerUpdateWithOptionalParams(t *testing.T) { baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -73,13 +74,17 @@ func TestConsumerUpdate(t *testing.T) { "023e105f4ecef8ad9ca31a8372d0c353", queues.ConsumerUpdateParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), - Body: map[string]interface{}{ - "dead_letter_queue": "updated-example-dlq", - "environment": "production", - "script_name": "example-consumer", - "settings": map[string]interface{}{ - "batch_size": int64(100), - }, + Body: queues.ConsumerUpdateParamsBodyMqWorkerConsumer{ + DeadLetterQueue: cloudflare.F("example-queue"), + ScriptName: cloudflare.F("my-consumer-worker"), + Settings: cloudflare.F(queues.ConsumerUpdateParamsBodyMqWorkerConsumerSettings{ + BatchSize: cloudflare.F(50.000000), + MaxConcurrency: cloudflare.F(10.000000), + MaxRetries: cloudflare.F(3.000000), + MaxWaitTimeMs: cloudflare.F(5000.000000), + RetryDelay: cloudflare.F(10.000000), + }), + Type: cloudflare.F(queues.ConsumerUpdateParamsBodyMqWorkerConsumerTypeWorker), }, }, ) diff --git a/queues/message.go b/queues/message.go index 92ebf618334..ba18afe4be0 100644 --- a/queues/message.go +++ b/queues/message.go @@ -34,7 +34,7 @@ func NewMessageService(opts ...option.RequestOption) (r *MessageService) { return } -// Acknowledge + Retry messages from a Queue. +// Acknowledge + Retry messages from a Queue func (r *MessageService) Ack(ctx context.Context, queueID string, params MessageAckParams, opts ...option.RequestOption) (res *MessageAckResponse, err error) { var env MessageAckResponseEnvelope opts = append(r.Options[:], opts...) @@ -55,7 +55,7 @@ func (r *MessageService) Ack(ctx context.Context, queueID string, params Message return } -// Pull a batch of messages from a Queue. +// Pull a batch of messages from a Queue func (r *MessageService) Pull(ctx context.Context, queueID string, params MessagePullParams, opts ...option.RequestOption) (res *[]MessagePullResponse, err error) { var env MessagePullResponseEnvelope opts = append(r.Options[:], opts...) @@ -104,9 +104,11 @@ func (r messageAckResponseJSON) RawJSON() string { } type MessagePullResponse struct { - ID string `json:"id"` - Attempts float64 `json:"attempts"` - Body string `json:"body"` + ID string `json:"id"` + Attempts float64 `json:"attempts"` + Body string `json:"body"` + // An ID that represents an "in-flight" message that has been pulled from a Queue. + // You must hold on to this ID and use it to acknowledge this message. LeaseID string `json:"lease_id"` Metadata interface{} `json:"metadata"` TimestampMs float64 `json:"timestamp_ms"` @@ -135,7 +137,7 @@ func (r messagePullResponseJSON) RawJSON() string { } type MessageAckParams struct { - // Identifier. + // A Resource identifier. AccountID param.Field[string] `path:"account_id,required"` Acks param.Field[[]MessageAckParamsAck] `json:"acks"` Retries param.Field[[]MessageAckParamsRetry] `json:"retries"` @@ -146,7 +148,8 @@ func (r MessageAckParams) MarshalJSON() (data []byte, err error) { } type MessageAckParamsAck struct { - // Lease ID for a message to acknowledge. + // An ID that represents an "in-flight" message that has been pulled from a Queue. + // You must hold on to this ID and use it to acknowledge this message. LeaseID param.Field[string] `json:"lease_id"` } @@ -158,7 +161,8 @@ type MessageAckParamsRetry struct { // The number of seconds to delay before making the message available for another // attempt. DelaySeconds param.Field[float64] `json:"delay_seconds"` - // Lease ID for a message to retry. + // An ID that represents an "in-flight" message that has been pulled from a Queue. + // You must hold on to this ID and use it to acknowledge this message. LeaseID param.Field[string] `json:"lease_id"` } @@ -167,13 +171,12 @@ func (r MessageAckParamsRetry) MarshalJSON() (data []byte, err error) { } type MessageAckResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result MessageAckResponse `json:"result,required,nullable"` - // Whether the API call was successful. - Success MessageAckResponseEnvelopeSuccess `json:"success,required"` - ResultInfo MessageAckResponseEnvelopeResultInfo `json:"result_info"` - JSON messageAckResponseEnvelopeJSON `json:"-"` + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + Result MessageAckResponse `json:"result"` + // Indicates if the API call was successful or not. + Success MessageAckResponseEnvelopeSuccess `json:"success"` + JSON messageAckResponseEnvelopeJSON `json:"-"` } // messageAckResponseEnvelopeJSON contains the JSON metadata for the struct @@ -183,7 +186,6 @@ type messageAckResponseEnvelopeJSON struct { Messages apijson.Field Result apijson.Field Success apijson.Field - ResultInfo apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -196,7 +198,7 @@ func (r messageAckResponseEnvelopeJSON) RawJSON() string { return r.raw } -// Whether the API call was successful. +// Indicates if the API call was successful or not. type MessageAckResponseEnvelopeSuccess bool const ( @@ -211,45 +213,14 @@ func (r MessageAckResponseEnvelopeSuccess) IsKnown() bool { return false } -type MessageAckResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON messageAckResponseEnvelopeResultInfoJSON `json:"-"` -} - -// messageAckResponseEnvelopeResultInfoJSON contains the JSON metadata for the -// struct [MessageAckResponseEnvelopeResultInfo] -type messageAckResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *MessageAckResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r messageAckResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw -} - type MessagePullParams struct { - // Identifier. + // A Resource identifier. AccountID param.Field[string] `path:"account_id,required"` // The maximum number of messages to include in a batch. BatchSize param.Field[float64] `json:"batch_size"` // The number of milliseconds that a message is exclusively leased. After the // timeout, the message becomes available for another attempt. - VisibilityTimeout param.Field[float64] `json:"visibility_timeout"` + VisibilityTimeoutMs param.Field[float64] `json:"visibility_timeout_ms"` } func (r MessagePullParams) MarshalJSON() (data []byte, err error) { @@ -257,13 +228,12 @@ func (r MessagePullParams) MarshalJSON() (data []byte, err error) { } type MessagePullResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result []MessagePullResponse `json:"result,required,nullable"` - // Whether the API call was successful. - Success MessagePullResponseEnvelopeSuccess `json:"success,required"` - ResultInfo MessagePullResponseEnvelopeResultInfo `json:"result_info"` - JSON messagePullResponseEnvelopeJSON `json:"-"` + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + Result []MessagePullResponse `json:"result"` + // Indicates if the API call was successful or not. + Success MessagePullResponseEnvelopeSuccess `json:"success"` + JSON messagePullResponseEnvelopeJSON `json:"-"` } // messagePullResponseEnvelopeJSON contains the JSON metadata for the struct @@ -273,7 +243,6 @@ type messagePullResponseEnvelopeJSON struct { Messages apijson.Field Result apijson.Field Success apijson.Field - ResultInfo apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -286,7 +255,7 @@ func (r messagePullResponseEnvelopeJSON) RawJSON() string { return r.raw } -// Whether the API call was successful. +// Indicates if the API call was successful or not. type MessagePullResponseEnvelopeSuccess bool const ( @@ -300,34 +269,3 @@ func (r MessagePullResponseEnvelopeSuccess) IsKnown() bool { } return false } - -type MessagePullResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON messagePullResponseEnvelopeResultInfoJSON `json:"-"` -} - -// messagePullResponseEnvelopeResultInfoJSON contains the JSON metadata for the -// struct [MessagePullResponseEnvelopeResultInfo] -type messagePullResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *MessagePullResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r messagePullResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw -} diff --git a/queues/message_test.go b/queues/message_test.go index 591abf09b9c..041b85cb77b 100644 --- a/queues/message_test.go +++ b/queues/message_test.go @@ -67,9 +67,9 @@ func TestMessagePullWithOptionalParams(t *testing.T) { context.TODO(), "023e105f4ecef8ad9ca31a8372d0c353", queues.MessagePullParams{ - AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), - BatchSize: cloudflare.F(50.000000), - VisibilityTimeout: cloudflare.F(6000.000000), + AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), + BatchSize: cloudflare.F(50.000000), + VisibilityTimeoutMs: cloudflare.F(6000.000000), }, ) if err != nil { diff --git a/queues/queue.go b/queues/queue.go index b925363823b..324d3832b8d 100644 --- a/queues/queue.go +++ b/queues/queue.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "net/http" + "reflect" "github.com/cloudflare/cloudflare-go/v3/internal/apijson" "github.com/cloudflare/cloudflare-go/v3/internal/param" @@ -14,6 +15,7 @@ import ( "github.com/cloudflare/cloudflare-go/v3/option" "github.com/cloudflare/cloudflare-go/v3/packages/pagination" "github.com/cloudflare/cloudflare-go/v3/shared" + "github.com/tidwall/gjson" ) // QueueService contains methods and other services that help with interacting with @@ -39,8 +41,8 @@ func NewQueueService(opts ...option.RequestOption) (r *QueueService) { return } -// Creates a new queue. -func (r *QueueService) New(ctx context.Context, params QueueNewParams, opts ...option.RequestOption) (res *QueueCreated, err error) { +// Create a new queue +func (r *QueueService) New(ctx context.Context, params QueueNewParams, opts ...option.RequestOption) (res *Queue, err error) { var env QueueNewResponseEnvelope opts = append(r.Options[:], opts...) if params.AccountID.Value == "" { @@ -56,8 +58,10 @@ func (r *QueueService) New(ctx context.Context, params QueueNewParams, opts ...o return } -// Updates a queue. -func (r *QueueService) Update(ctx context.Context, queueID string, params QueueUpdateParams, opts ...option.RequestOption) (res *QueueUpdated, err error) { +// Updates a Queue. Note that this endpoint does not support partial updates. If +// successful, the Queue's configuration is overwritten with the supplied +// configuration. +func (r *QueueService) Update(ctx context.Context, queueID string, params QueueUpdateParams, opts ...option.RequestOption) (res *Queue, err error) { var env QueueUpdateResponseEnvelope opts = append(r.Options[:], opts...) if params.AccountID.Value == "" { @@ -104,9 +108,8 @@ func (r *QueueService) ListAutoPaging(ctx context.Context, query QueueListParams return pagination.NewSinglePageAutoPager(r.List(ctx, query, opts...)) } -// Deletes a queue. -func (r *QueueService) Delete(ctx context.Context, queueID string, body QueueDeleteParams, opts ...option.RequestOption) (res *[]QueueDeleteResponse, err error) { - var env QueueDeleteResponseEnvelope +// Deletes a queue +func (r *QueueService) Delete(ctx context.Context, queueID string, body QueueDeleteParams, opts ...option.RequestOption) (res *QueueDeleteResponse, err error) { opts = append(r.Options[:], opts...) if body.AccountID.Value == "" { err = errors.New("missing required account_id parameter") @@ -117,15 +120,11 @@ func (r *QueueService) Delete(ctx context.Context, queueID string, body QueueDel return } path := fmt.Sprintf("accounts/%s/queues/%s", body.AccountID, queueID) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &env, opts...) - if err != nil { - return - } - res = &env.Result + err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...) return } -// Get information about a specific queue. +// Get details about a specific queue. func (r *QueueService) Get(ctx context.Context, queueID string, query QueueGetParams, opts ...option.RequestOption) (res *Queue, err error) { var env QueueGetResponseEnvelope opts = append(r.Options[:], opts...) @@ -155,6 +154,7 @@ type Queue struct { ProducersTotalCount float64 `json:"producers_total_count"` QueueID string `json:"queue_id"` QueueName string `json:"queue_name"` + Settings QueueSettings `json:"settings"` JSON queueJSON `json:"-"` } @@ -168,6 +168,7 @@ type queueJSON struct { ProducersTotalCount apijson.Field QueueID apijson.Field QueueName apijson.Field + Settings apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -181,83 +182,285 @@ func (r queueJSON) RawJSON() string { } type QueueProducer struct { - Environment string `json:"environment"` - Service string `json:"service"` - JSON queueProducerJSON `json:"-"` + BucketName string `json:"bucket_name"` + Script string `json:"script"` + Type QueueProducersType `json:"type"` + JSON queueProducerJSON `json:"-"` + union QueueProducersUnion } // queueProducerJSON contains the JSON metadata for the struct [QueueProducer] type queueProducerJSON struct { - Environment apijson.Field - Service apijson.Field + BucketName apijson.Field + Script apijson.Field + Type apijson.Field raw string ExtraFields map[string]apijson.Field } +func (r queueProducerJSON) RawJSON() string { + return r.raw +} + func (r *QueueProducer) UnmarshalJSON(data []byte) (err error) { + *r = QueueProducer{} + err = apijson.UnmarshalRoot(data, &r.union) + if err != nil { + return err + } + return apijson.Port(r.union, &r) +} + +// AsUnion returns a [QueueProducersUnion] interface which you can cast to the +// specific types for more type safety. +// +// Possible runtime types of the union are [queues.QueueProducersMqWorkerProducer], +// [queues.QueueProducersMqR2Producer]. +func (r QueueProducer) AsUnion() QueueProducersUnion { + return r.union +} + +// Union satisfied by [queues.QueueProducersMqWorkerProducer] or +// [queues.QueueProducersMqR2Producer]. +type QueueProducersUnion interface { + implementsQueuesQueueProducer() +} + +func init() { + apijson.RegisterUnion( + reflect.TypeOf((*QueueProducersUnion)(nil)).Elem(), + "", + apijson.UnionVariant{ + TypeFilter: gjson.JSON, + Type: reflect.TypeOf(QueueProducersMqWorkerProducer{}), + }, + apijson.UnionVariant{ + TypeFilter: gjson.JSON, + Type: reflect.TypeOf(QueueProducersMqR2Producer{}), + }, + ) +} + +type QueueProducersMqWorkerProducer struct { + Script string `json:"script"` + Type QueueProducersMqWorkerProducerType `json:"type"` + JSON queueProducersMqWorkerProducerJSON `json:"-"` +} + +// queueProducersMqWorkerProducerJSON contains the JSON metadata for the struct +// [QueueProducersMqWorkerProducer] +type queueProducersMqWorkerProducerJSON struct { + Script apijson.Field + Type apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *QueueProducersMqWorkerProducer) UnmarshalJSON(data []byte) (err error) { return apijson.UnmarshalRoot(data, r) } -func (r queueProducerJSON) RawJSON() string { +func (r queueProducersMqWorkerProducerJSON) RawJSON() string { return r.raw } -type QueueCreated struct { - CreatedOn string `json:"created_on"` - ModifiedOn string `json:"modified_on"` - QueueID string `json:"queue_id"` - QueueName string `json:"queue_name"` - JSON queueCreatedJSON `json:"-"` +func (r QueueProducersMqWorkerProducer) implementsQueuesQueueProducer() {} + +type QueueProducersMqWorkerProducerType string + +const ( + QueueProducersMqWorkerProducerTypeWorker QueueProducersMqWorkerProducerType = "worker" +) + +func (r QueueProducersMqWorkerProducerType) IsKnown() bool { + switch r { + case QueueProducersMqWorkerProducerTypeWorker: + return true + } + return false +} + +type QueueProducersMqR2Producer struct { + BucketName string `json:"bucket_name"` + Type QueueProducersMqR2ProducerType `json:"type"` + JSON queueProducersMqR2ProducerJSON `json:"-"` } -// queueCreatedJSON contains the JSON metadata for the struct [QueueCreated] -type queueCreatedJSON struct { - CreatedOn apijson.Field - ModifiedOn apijson.Field - QueueID apijson.Field - QueueName apijson.Field +// queueProducersMqR2ProducerJSON contains the JSON metadata for the struct +// [QueueProducersMqR2Producer] +type queueProducersMqR2ProducerJSON struct { + BucketName apijson.Field + Type apijson.Field raw string ExtraFields map[string]apijson.Field } -func (r *QueueCreated) UnmarshalJSON(data []byte) (err error) { +func (r *QueueProducersMqR2Producer) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) +} + +func (r queueProducersMqR2ProducerJSON) RawJSON() string { + return r.raw +} + +func (r QueueProducersMqR2Producer) implementsQueuesQueueProducer() {} + +type QueueProducersMqR2ProducerType string + +const ( + QueueProducersMqR2ProducerTypeR2Bucket QueueProducersMqR2ProducerType = "r2_bucket" +) + +func (r QueueProducersMqR2ProducerType) IsKnown() bool { + switch r { + case QueueProducersMqR2ProducerTypeR2Bucket: + return true + } + return false +} + +type QueueProducersType string + +const ( + QueueProducersTypeWorker QueueProducersType = "worker" + QueueProducersTypeR2Bucket QueueProducersType = "r2_bucket" +) + +func (r QueueProducersType) IsKnown() bool { + switch r { + case QueueProducersTypeWorker, QueueProducersTypeR2Bucket: + return true + } + return false +} + +type QueueSettings struct { + // Number of seconds to delay delivery of all messages to consumers. + DeliveryDelay float64 `json:"delivery_delay"` + // Number of seconds after which an unconsumed message will be delayed. + MessageRetentionPeriod float64 `json:"message_retention_period"` + JSON queueSettingsJSON `json:"-"` +} + +// queueSettingsJSON contains the JSON metadata for the struct [QueueSettings] +type queueSettingsJSON struct { + DeliveryDelay apijson.Field + MessageRetentionPeriod apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *QueueSettings) UnmarshalJSON(data []byte) (err error) { return apijson.UnmarshalRoot(data, r) } -func (r queueCreatedJSON) RawJSON() string { +func (r queueSettingsJSON) RawJSON() string { return r.raw } -type QueueUpdated struct { - CreatedOn string `json:"created_on"` - ModifiedOn string `json:"modified_on"` - QueueID string `json:"queue_id"` - QueueName string `json:"queue_name"` - JSON queueUpdatedJSON `json:"-"` +type QueueParam struct { + QueueName param.Field[string] `json:"queue_name"` + Settings param.Field[QueueSettingsParam] `json:"settings"` +} + +func (r QueueParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +type QueueProducerParam struct { + BucketName param.Field[string] `json:"bucket_name"` + Script param.Field[string] `json:"script"` + Type param.Field[QueueProducersType] `json:"type"` +} + +func (r QueueProducerParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r QueueProducerParam) implementsQueuesQueueProducersUnionParam() {} + +// Satisfied by [queues.QueueProducersMqWorkerProducerParam], +// [queues.QueueProducersMqR2ProducerParam], [QueueProducerParam]. +type QueueProducersUnionParam interface { + implementsQueuesQueueProducersUnionParam() +} + +type QueueProducersMqWorkerProducerParam struct { + Script param.Field[string] `json:"script"` + Type param.Field[QueueProducersMqWorkerProducerType] `json:"type"` +} + +func (r QueueProducersMqWorkerProducerParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r QueueProducersMqWorkerProducerParam) implementsQueuesQueueProducersUnionParam() {} + +type QueueProducersMqR2ProducerParam struct { + BucketName param.Field[string] `json:"bucket_name"` + Type param.Field[QueueProducersMqR2ProducerType] `json:"type"` +} + +func (r QueueProducersMqR2ProducerParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r QueueProducersMqR2ProducerParam) implementsQueuesQueueProducersUnionParam() {} + +type QueueSettingsParam struct { + // Number of seconds to delay delivery of all messages to consumers. + DeliveryDelay param.Field[float64] `json:"delivery_delay"` + // Number of seconds after which an unconsumed message will be delayed. + MessageRetentionPeriod param.Field[float64] `json:"message_retention_period"` +} + +func (r QueueSettingsParam) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +type QueueDeleteResponse struct { + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + // Indicates if the API call was successful or not. + Success QueueDeleteResponseSuccess `json:"success"` + JSON queueDeleteResponseJSON `json:"-"` } -// queueUpdatedJSON contains the JSON metadata for the struct [QueueUpdated] -type queueUpdatedJSON struct { - CreatedOn apijson.Field - ModifiedOn apijson.Field - QueueID apijson.Field - QueueName apijson.Field +// queueDeleteResponseJSON contains the JSON metadata for the struct +// [QueueDeleteResponse] +type queueDeleteResponseJSON struct { + Errors apijson.Field + Messages apijson.Field + Success apijson.Field raw string ExtraFields map[string]apijson.Field } -func (r *QueueUpdated) UnmarshalJSON(data []byte) (err error) { +func (r *QueueDeleteResponse) UnmarshalJSON(data []byte) (err error) { return apijson.UnmarshalRoot(data, r) } -func (r queueUpdatedJSON) RawJSON() string { +func (r queueDeleteResponseJSON) RawJSON() string { return r.raw } -type QueueDeleteResponse = interface{} +// Indicates if the API call was successful or not. +type QueueDeleteResponseSuccess bool + +const ( + QueueDeleteResponseSuccessTrue QueueDeleteResponseSuccess = true +) + +func (r QueueDeleteResponseSuccess) IsKnown() bool { + switch r { + case QueueDeleteResponseSuccessTrue: + return true + } + return false +} type QueueNewParams struct { - // Identifier. + // A Resource identifier. AccountID param.Field[string] `path:"account_id,required"` QueueName param.Field[string] `json:"queue_name,required"` } @@ -267,13 +470,12 @@ func (r QueueNewParams) MarshalJSON() (data []byte, err error) { } type QueueNewResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result QueueCreated `json:"result,required,nullable"` - // Whether the API call was successful. - Success QueueNewResponseEnvelopeSuccess `json:"success,required"` - ResultInfo QueueNewResponseEnvelopeResultInfo `json:"result_info"` - JSON queueNewResponseEnvelopeJSON `json:"-"` + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + Result Queue `json:"result"` + // Indicates if the API call was successful or not. + Success QueueNewResponseEnvelopeSuccess `json:"success"` + JSON queueNewResponseEnvelopeJSON `json:"-"` } // queueNewResponseEnvelopeJSON contains the JSON metadata for the struct @@ -283,7 +485,6 @@ type queueNewResponseEnvelopeJSON struct { Messages apijson.Field Result apijson.Field Success apijson.Field - ResultInfo apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -296,7 +497,7 @@ func (r queueNewResponseEnvelopeJSON) RawJSON() string { return r.raw } -// Whether the API call was successful. +// Indicates if the API call was successful or not. type QueueNewResponseEnvelopeSuccess bool const ( @@ -311,55 +512,23 @@ func (r QueueNewResponseEnvelopeSuccess) IsKnown() bool { return false } -type QueueNewResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON queueNewResponseEnvelopeResultInfoJSON `json:"-"` -} - -// queueNewResponseEnvelopeResultInfoJSON contains the JSON metadata for the struct -// [QueueNewResponseEnvelopeResultInfo] -type queueNewResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *QueueNewResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r queueNewResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw -} - type QueueUpdateParams struct { - // Identifier. + // A Resource identifier. AccountID param.Field[string] `path:"account_id,required"` - Body interface{} `json:"body,required"` + Queue QueueParam `json:"queue,required"` } func (r QueueUpdateParams) MarshalJSON() (data []byte, err error) { - return apijson.MarshalRoot(r.Body) + return apijson.MarshalRoot(r.Queue) } type QueueUpdateResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result QueueUpdated `json:"result,required,nullable"` - // Whether the API call was successful. - Success QueueUpdateResponseEnvelopeSuccess `json:"success,required"` - ResultInfo QueueUpdateResponseEnvelopeResultInfo `json:"result_info"` - JSON queueUpdateResponseEnvelopeJSON `json:"-"` + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + Result Queue `json:"result"` + // Indicates if the API call was successful or not. + Success QueueUpdateResponseEnvelopeSuccess `json:"success"` + JSON queueUpdateResponseEnvelopeJSON `json:"-"` } // queueUpdateResponseEnvelopeJSON contains the JSON metadata for the struct @@ -369,7 +538,6 @@ type queueUpdateResponseEnvelopeJSON struct { Messages apijson.Field Result apijson.Field Success apijson.Field - ResultInfo apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -382,7 +550,7 @@ func (r queueUpdateResponseEnvelopeJSON) RawJSON() string { return r.raw } -// Whether the API call was successful. +// Indicates if the API call was successful or not. type QueueUpdateResponseEnvelopeSuccess bool const ( @@ -397,136 +565,28 @@ func (r QueueUpdateResponseEnvelopeSuccess) IsKnown() bool { return false } -type QueueUpdateResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON queueUpdateResponseEnvelopeResultInfoJSON `json:"-"` -} - -// queueUpdateResponseEnvelopeResultInfoJSON contains the JSON metadata for the -// struct [QueueUpdateResponseEnvelopeResultInfo] -type queueUpdateResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *QueueUpdateResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r queueUpdateResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw -} - type QueueListParams struct { - // Identifier. + // A Resource identifier. AccountID param.Field[string] `path:"account_id,required"` } type QueueDeleteParams struct { - // Identifier. + // A Resource identifier. AccountID param.Field[string] `path:"account_id,required"` } -type QueueDeleteResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result []QueueDeleteResponse `json:"result,required,nullable"` - // Whether the API call was successful. - Success QueueDeleteResponseEnvelopeSuccess `json:"success,required"` - ResultInfo QueueDeleteResponseEnvelopeResultInfo `json:"result_info"` - JSON queueDeleteResponseEnvelopeJSON `json:"-"` -} - -// queueDeleteResponseEnvelopeJSON contains the JSON metadata for the struct -// [QueueDeleteResponseEnvelope] -type queueDeleteResponseEnvelopeJSON struct { - Errors apijson.Field - Messages apijson.Field - Result apijson.Field - Success apijson.Field - ResultInfo apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *QueueDeleteResponseEnvelope) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r queueDeleteResponseEnvelopeJSON) RawJSON() string { - return r.raw -} - -// Whether the API call was successful. -type QueueDeleteResponseEnvelopeSuccess bool - -const ( - QueueDeleteResponseEnvelopeSuccessTrue QueueDeleteResponseEnvelopeSuccess = true -) - -func (r QueueDeleteResponseEnvelopeSuccess) IsKnown() bool { - switch r { - case QueueDeleteResponseEnvelopeSuccessTrue: - return true - } - return false -} - -type QueueDeleteResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON queueDeleteResponseEnvelopeResultInfoJSON `json:"-"` -} - -// queueDeleteResponseEnvelopeResultInfoJSON contains the JSON metadata for the -// struct [QueueDeleteResponseEnvelopeResultInfo] -type queueDeleteResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *QueueDeleteResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r queueDeleteResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw -} - type QueueGetParams struct { - // Identifier. + // A Resource identifier. AccountID param.Field[string] `path:"account_id,required"` } type QueueGetResponseEnvelope struct { - Errors []shared.ResponseInfo `json:"errors,required"` - Messages []shared.ResponseInfo `json:"messages,required"` - Result Queue `json:"result,required,nullable"` - // Whether the API call was successful. - Success QueueGetResponseEnvelopeSuccess `json:"success,required"` - ResultInfo QueueGetResponseEnvelopeResultInfo `json:"result_info"` - JSON queueGetResponseEnvelopeJSON `json:"-"` + Errors []shared.ResponseInfo `json:"errors"` + Messages []string `json:"messages"` + Result Queue `json:"result"` + // Indicates if the API call was successful or not. + Success QueueGetResponseEnvelopeSuccess `json:"success"` + JSON queueGetResponseEnvelopeJSON `json:"-"` } // queueGetResponseEnvelopeJSON contains the JSON metadata for the struct @@ -536,7 +596,6 @@ type queueGetResponseEnvelopeJSON struct { Messages apijson.Field Result apijson.Field Success apijson.Field - ResultInfo apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -549,7 +608,7 @@ func (r queueGetResponseEnvelopeJSON) RawJSON() string { return r.raw } -// Whether the API call was successful. +// Indicates if the API call was successful or not. type QueueGetResponseEnvelopeSuccess bool const ( @@ -563,34 +622,3 @@ func (r QueueGetResponseEnvelopeSuccess) IsKnown() bool { } return false } - -type QueueGetResponseEnvelopeResultInfo struct { - // Total number of results for the requested service. - Count float64 `json:"count"` - // Current page within paginated list of results. - Page float64 `json:"page"` - // Number of results per page of results. - PerPage float64 `json:"per_page"` - // Total results available without any search parameters. - TotalCount float64 `json:"total_count"` - JSON queueGetResponseEnvelopeResultInfoJSON `json:"-"` -} - -// queueGetResponseEnvelopeResultInfoJSON contains the JSON metadata for the struct -// [QueueGetResponseEnvelopeResultInfo] -type queueGetResponseEnvelopeResultInfoJSON struct { - Count apijson.Field - Page apijson.Field - PerPage apijson.Field - TotalCount apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *QueueGetResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r queueGetResponseEnvelopeResultInfoJSON) RawJSON() string { - return r.raw -} diff --git a/queues/queue_test.go b/queues/queue_test.go index b21587b799a..4d731dd31a6 100644 --- a/queues/queue_test.go +++ b/queues/queue_test.go @@ -40,7 +40,7 @@ func TestQueueNew(t *testing.T) { } } -func TestQueueUpdate(t *testing.T) { +func TestQueueUpdateWithOptionalParams(t *testing.T) { baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -58,8 +58,12 @@ func TestQueueUpdate(t *testing.T) { "023e105f4ecef8ad9ca31a8372d0c353", queues.QueueUpdateParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), - Body: map[string]interface{}{ - "queue_name": "renamed-example-queue", + Queue: queues.QueueParam{ + QueueName: cloudflare.F("example-queue"), + Settings: cloudflare.F(queues.QueueSettingsParam{ + DeliveryDelay: cloudflare.F(5.000000), + MessageRetentionPeriod: cloudflare.F(345600.000000), + }), }, }, )