package http
import (
)
type ComputeContentLength struct {
}
func ( *middleware.Stack) error {
return .Build.Add(&ComputeContentLength{}, middleware.After)
}
func ( *ComputeContentLength) () string { return "ComputeContentLength" }
func ( *ComputeContentLength) (
context.Context, middleware.BuildInput, middleware.BuildHandler,
) (
middleware.BuildOutput, middleware.Metadata, error,
) {
, := .Request.(*Request)
if ! {
return , , fmt.Errorf("unknown request type %T", )
}
if .ContentLength >= 0 {
return .HandleBuild(, )
}
if , , := .StreamLength(); != nil {
return , , fmt.Errorf(
"failed getting length of request stream, %w", )
} else if {
.ContentLength =
}
return .HandleBuild(, )
}
type validateContentLength struct{}
func ( *middleware.Stack) error {
return .Build.Add(&validateContentLength{}, middleware.After)
}
func ( *validateContentLength) () string { return "ValidateContentLength" }
func ( *validateContentLength) (
context.Context, middleware.BuildInput, middleware.BuildHandler,
) (
middleware.BuildOutput, middleware.Metadata, error,
) {
, := .Request.(*Request)
if ! {
return , , fmt.Errorf("unknown request type %T", )
}
if .ContentLength < 0 {
return , , fmt.Errorf(
"content length for payload is required and must be at least 0")
}
return .HandleBuild(, )
}