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

package ebs

import (
	"context"
	"fmt"
	smithy "github.com/aws/smithy-go"
	"github.com/aws/smithy-go/middleware"
)

type validateOpCompleteSnapshot struct {
}

func (*validateOpCompleteSnapshot) ID() string {
	return "OperationInputValidation"
}

func (m *validateOpCompleteSnapshot) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
) {
	input, ok := in.Parameters.(*CompleteSnapshotInput)
	if !ok {
		return out, metadata, fmt.Errorf("unknown input parameters type %T", in.Parameters)
	}
	if err := validateOpCompleteSnapshotInput(input); err != nil {
		return out, metadata, err
	}
	return next.HandleInitialize(ctx, in)
}

type validateOpGetSnapshotBlock struct {
}

func (*validateOpGetSnapshotBlock) ID() string {
	return "OperationInputValidation"
}

func (m *validateOpGetSnapshotBlock) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
) {
	input, ok := in.Parameters.(*GetSnapshotBlockInput)
	if !ok {
		return out, metadata, fmt.Errorf("unknown input parameters type %T", in.Parameters)
	}
	if err := validateOpGetSnapshotBlockInput(input); err != nil {
		return out, metadata, err
	}
	return next.HandleInitialize(ctx, in)
}

type validateOpListChangedBlocks struct {
}

func (*validateOpListChangedBlocks) ID() string {
	return "OperationInputValidation"
}

func (m *validateOpListChangedBlocks) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
) {
	input, ok := in.Parameters.(*ListChangedBlocksInput)
	if !ok {
		return out, metadata, fmt.Errorf("unknown input parameters type %T", in.Parameters)
	}
	if err := validateOpListChangedBlocksInput(input); err != nil {
		return out, metadata, err
	}
	return next.HandleInitialize(ctx, in)
}

type validateOpListSnapshotBlocks struct {
}

func (*validateOpListSnapshotBlocks) ID() string {
	return "OperationInputValidation"
}

func (m *validateOpListSnapshotBlocks) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
) {
	input, ok := in.Parameters.(*ListSnapshotBlocksInput)
	if !ok {
		return out, metadata, fmt.Errorf("unknown input parameters type %T", in.Parameters)
	}
	if err := validateOpListSnapshotBlocksInput(input); err != nil {
		return out, metadata, err
	}
	return next.HandleInitialize(ctx, in)
}

type validateOpPutSnapshotBlock struct {
}

func (*validateOpPutSnapshotBlock) ID() string {
	return "OperationInputValidation"
}

func (m *validateOpPutSnapshotBlock) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
) {
	input, ok := in.Parameters.(*PutSnapshotBlockInput)
	if !ok {
		return out, metadata, fmt.Errorf("unknown input parameters type %T", in.Parameters)
	}
	if err := validateOpPutSnapshotBlockInput(input); err != nil {
		return out, metadata, err
	}
	return next.HandleInitialize(ctx, in)
}

type validateOpStartSnapshot struct {
}

func (*validateOpStartSnapshot) ID() string {
	return "OperationInputValidation"
}

func (m *validateOpStartSnapshot) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
) {
	input, ok := in.Parameters.(*StartSnapshotInput)
	if !ok {
		return out, metadata, fmt.Errorf("unknown input parameters type %T", in.Parameters)
	}
	if err := validateOpStartSnapshotInput(input); err != nil {
		return out, metadata, err
	}
	return next.HandleInitialize(ctx, in)
}

func addOpCompleteSnapshotValidationMiddleware(stack *middleware.Stack) error {
	return stack.Initialize.Add(&validateOpCompleteSnapshot{}, middleware.After)
}

func addOpGetSnapshotBlockValidationMiddleware(stack *middleware.Stack) error {
	return stack.Initialize.Add(&validateOpGetSnapshotBlock{}, middleware.After)
}

func addOpListChangedBlocksValidationMiddleware(stack *middleware.Stack) error {
	return stack.Initialize.Add(&validateOpListChangedBlocks{}, middleware.After)
}

func addOpListSnapshotBlocksValidationMiddleware(stack *middleware.Stack) error {
	return stack.Initialize.Add(&validateOpListSnapshotBlocks{}, middleware.After)
}

func addOpPutSnapshotBlockValidationMiddleware(stack *middleware.Stack) error {
	return stack.Initialize.Add(&validateOpPutSnapshotBlock{}, middleware.After)
}

func addOpStartSnapshotValidationMiddleware(stack *middleware.Stack) error {
	return stack.Initialize.Add(&validateOpStartSnapshot{}, middleware.After)
}

func validateOpCompleteSnapshotInput(v *CompleteSnapshotInput) error {
	if v == nil {
		return nil
	}
	invalidParams := smithy.InvalidParamsError{Context: "CompleteSnapshotInput"}
	if v.SnapshotId == nil {
		invalidParams.Add(smithy.NewErrParamRequired("SnapshotId"))
	}
	if v.ChangedBlocksCount == nil {
		invalidParams.Add(smithy.NewErrParamRequired("ChangedBlocksCount"))
	}
	if invalidParams.Len() > 0 {
		return invalidParams
	} else {
		return nil
	}
}

func validateOpGetSnapshotBlockInput(v *GetSnapshotBlockInput) error {
	if v == nil {
		return nil
	}
	invalidParams := smithy.InvalidParamsError{Context: "GetSnapshotBlockInput"}
	if v.SnapshotId == nil {
		invalidParams.Add(smithy.NewErrParamRequired("SnapshotId"))
	}
	if v.BlockIndex == nil {
		invalidParams.Add(smithy.NewErrParamRequired("BlockIndex"))
	}
	if v.BlockToken == nil {
		invalidParams.Add(smithy.NewErrParamRequired("BlockToken"))
	}
	if invalidParams.Len() > 0 {
		return invalidParams
	} else {
		return nil
	}
}

func validateOpListChangedBlocksInput(v *ListChangedBlocksInput) error {
	if v == nil {
		return nil
	}
	invalidParams := smithy.InvalidParamsError{Context: "ListChangedBlocksInput"}
	if v.SecondSnapshotId == nil {
		invalidParams.Add(smithy.NewErrParamRequired("SecondSnapshotId"))
	}
	if invalidParams.Len() > 0 {
		return invalidParams
	} else {
		return nil
	}
}

func validateOpListSnapshotBlocksInput(v *ListSnapshotBlocksInput) error {
	if v == nil {
		return nil
	}
	invalidParams := smithy.InvalidParamsError{Context: "ListSnapshotBlocksInput"}
	if v.SnapshotId == nil {
		invalidParams.Add(smithy.NewErrParamRequired("SnapshotId"))
	}
	if invalidParams.Len() > 0 {
		return invalidParams
	} else {
		return nil
	}
}

func validateOpPutSnapshotBlockInput(v *PutSnapshotBlockInput) error {
	if v == nil {
		return nil
	}
	invalidParams := smithy.InvalidParamsError{Context: "PutSnapshotBlockInput"}
	if v.SnapshotId == nil {
		invalidParams.Add(smithy.NewErrParamRequired("SnapshotId"))
	}
	if v.BlockIndex == nil {
		invalidParams.Add(smithy.NewErrParamRequired("BlockIndex"))
	}
	if v.BlockData == nil {
		invalidParams.Add(smithy.NewErrParamRequired("BlockData"))
	}
	if v.DataLength == nil {
		invalidParams.Add(smithy.NewErrParamRequired("DataLength"))
	}
	if v.Checksum == nil {
		invalidParams.Add(smithy.NewErrParamRequired("Checksum"))
	}
	if len(v.ChecksumAlgorithm) == 0 {
		invalidParams.Add(smithy.NewErrParamRequired("ChecksumAlgorithm"))
	}
	if invalidParams.Len() > 0 {
		return invalidParams
	} else {
		return nil
	}
}

func validateOpStartSnapshotInput(v *StartSnapshotInput) error {
	if v == nil {
		return nil
	}
	invalidParams := smithy.InvalidParamsError{Context: "StartSnapshotInput"}
	if v.VolumeSize == nil {
		invalidParams.Add(smithy.NewErrParamRequired("VolumeSize"))
	}
	if invalidParams.Len() > 0 {
		return invalidParams
	} else {
		return nil
	}
}
