// Code generated by tools/cmd/genoptions/main.go. DO NOT EDIT.

package jwa

import (
	"github.com/lestrrat-go/option/v2"
)

type Option = option.Interface

// NewAlgorithmOption represents an option that can be passed to any of the constructor functions
type NewAlgorithmOption interface {
	Option
	newSignatureAlgorithmOption()
	newKeyEncryptionAlgorithmOption()
	newSignatureKeyEncryptionAlgorithmOption()
}

type newAlgorithmOption struct {
	Option
}

func (*newAlgorithmOption) newSignatureAlgorithmOption() {}

func (*newAlgorithmOption) newKeyEncryptionAlgorithmOption() {}

func (*newAlgorithmOption) newSignatureKeyEncryptionAlgorithmOption() {}

// NewKeyEncryptionAlgorithmOption represents an option that can be passed to the NewKeyEncryptionAlgorithm
type NewKeyEncryptionAlgorithmOption interface {
	Option
	newKeyEncryptionAlgorithmOption()
}

type newKeyEncryptionAlgorithmOption struct {
	Option
}

func (*newKeyEncryptionAlgorithmOption) newKeyEncryptionAlgorithmOption() {}

// NewSignatureAlgorithmOption represents an option that can be passed to the NewSignatureAlgorithm
type NewSignatureAlgorithmOption interface {
	Option
	newSignatureAlgorithmOption()
}

type newSignatureAlgorithmOption struct {
	Option
}

func (*newSignatureAlgorithmOption) newSignatureAlgorithmOption() {}

// NewSignatureKeyEncryptionAlgorithmOption represents an option that can be passed to both
// NewSignatureAlgorithm and NewKeyEncryptionAlgorithm
type NewSignatureKeyEncryptionAlgorithmOption interface {
	Option
	newSignatureAlgorithmOption()
	newKeyEncryptionAlgorithmOption()
}

type newSignatureKeyEncryptionAlgorithmOption struct {
	Option
}

func (*newSignatureKeyEncryptionAlgorithmOption) newSignatureAlgorithmOption() {}

func (*newSignatureKeyEncryptionAlgorithmOption) newKeyEncryptionAlgorithmOption() {}

type identDeprecated struct{}
type identIsSymmetric struct{}

func (identDeprecated) String() string {
	return "WithDeprecated"
}

func (identIsSymmetric) String() string {
	return "WithIsSymmetric"
}

// WithDeprecated specifies that the algorithm is deprecated. In order to
// un-deprecate an algorithm, you will have to create a new algorithm
// with the same values but with the Deprecated option set to false, and
// then call RegisterXXXXAlgorithm with the new algorithm.
func WithDeprecated(v bool) NewAlgorithmOption {
	return &newAlgorithmOption{option.New(identDeprecated{}, v)}
}

// IsSymmetric specifies that the algorithm is symmetric
func WithIsSymmetric(v bool) NewSignatureKeyEncryptionAlgorithmOption {
	return &newSignatureKeyEncryptionAlgorithmOption{option.New(identIsSymmetric{}, v)}
}
