// Code generated by github.com/ecordell/optgen. DO NOT EDIT.
package datastore

import (
	types "github.com/authzed/spicedb/pkg/caveats/types"
	defaults "github.com/creasty/defaults"
	helpers "github.com/ecordell/optgen/helpers"
	"time"
)

type ConfigOption func(c *Config)

// NewConfigWithOptions creates a new Config with the passed in options set
func NewConfigWithOptions(opts ...ConfigOption) *Config {
	c := &Config{}
	for _, o := range opts {
		o(c)
	}
	return c
}

// NewConfigWithOptionsAndDefaults creates a new Config with the passed in options set starting from the defaults
func NewConfigWithOptionsAndDefaults(opts ...ConfigOption) *Config {
	c := &Config{}
	defaults.MustSet(c)
	for _, o := range opts {
		o(c)
	}
	return c
}

// ToOption returns a new ConfigOption that sets the values from the passed in Config
func (c *Config) ToOption() ConfigOption {
	return func(to *Config) {
		to.Engine = c.Engine
		to.URI = c.URI
		to.GCWindow = c.GCWindow
		to.LegacyFuzzing = c.LegacyFuzzing
		to.RevisionQuantization = c.RevisionQuantization
		to.MaxRevisionStalenessPercent = c.MaxRevisionStalenessPercent
		to.CredentialsProviderName = c.CredentialsProviderName
		to.FilterMaximumIDCount = c.FilterMaximumIDCount
		to.ReadConnPool = c.ReadConnPool
		to.WriteConnPool = c.WriteConnPool
		to.ReadOnly = c.ReadOnly
		to.EnableDatastoreMetrics = c.EnableDatastoreMetrics
		to.DisableStats = c.DisableStats
		to.IncludeQueryParametersInTraces = c.IncludeQueryParametersInTraces
		to.ReadReplicaConnPool = c.ReadReplicaConnPool
		to.OldReadReplicaConnPool = c.OldReadReplicaConnPool
		to.ReadReplicaURIs = c.ReadReplicaURIs
		to.ReadReplicaCredentialsProviderName = c.ReadReplicaCredentialsProviderName
		to.BootstrapFiles = c.BootstrapFiles
		to.BootstrapFileContents = c.BootstrapFileContents
		to.BootstrapOverwrite = c.BootstrapOverwrite
		to.BootstrapTimeout = c.BootstrapTimeout
		to.CaveatTypeSet = c.CaveatTypeSet
		to.RequestHedgingEnabled = c.RequestHedgingEnabled
		to.RequestHedgingInitialSlowValue = c.RequestHedgingInitialSlowValue
		to.RequestHedgingMaxRequests = c.RequestHedgingMaxRequests
		to.RequestHedgingQuantile = c.RequestHedgingQuantile
		to.FollowerReadDelay = c.FollowerReadDelay
		to.MaxRetries = c.MaxRetries
		to.OverlapKey = c.OverlapKey
		to.OverlapStrategy = c.OverlapStrategy
		to.EnableConnectionBalancing = c.EnableConnectionBalancing
		to.ConnectRate = c.ConnectRate
		to.WriteAcquisitionTimeout = c.WriteAcquisitionTimeout
		to.GCInterval = c.GCInterval
		to.GCMaxOperationTime = c.GCMaxOperationTime
		to.RelaxedIsolationLevel = c.RelaxedIsolationLevel
		to.SpannerCredentialsFile = c.SpannerCredentialsFile
		to.SpannerCredentialsJSON = c.SpannerCredentialsJSON
		to.SpannerEmulatorHost = c.SpannerEmulatorHost
		to.SpannerMinSessions = c.SpannerMinSessions
		to.SpannerMaxSessions = c.SpannerMaxSessions
		to.SpannerDatastoreMetricsOption = c.SpannerDatastoreMetricsOption
		to.TablePrefix = c.TablePrefix
		to.RelationshipIntegrityEnabled = c.RelationshipIntegrityEnabled
		to.RelationshipIntegrityCurrentKey = c.RelationshipIntegrityCurrentKey
		to.RelationshipIntegrityExpiredKeys = c.RelationshipIntegrityExpiredKeys
		to.WatchBufferLength = c.WatchBufferLength
		to.WatchBufferWriteTimeout = c.WatchBufferWriteTimeout
		to.WatchConnectTimeout = c.WatchConnectTimeout
		to.DisableWatchSupport = c.DisableWatchSupport
		to.MigrationPhase = c.MigrationPhase
		to.AllowedMigrations = c.AllowedMigrations
		to.ExperimentalColumnOptimization = c.ExperimentalColumnOptimization
		to.EnableExperimentalRelationshipExpiration = c.EnableExperimentalRelationshipExpiration
		to.EnableRevisionHeartbeat = c.EnableRevisionHeartbeat
	}
}

// DebugMap returns a map form of Config for debugging
func (c Config) DebugMap() map[string]any {
	debugMap := map[string]any{}
	debugMap["Engine"] = helpers.DebugValue(c.Engine, false)
	debugMap["URI"] = helpers.SensitiveDebugValue(c.URI)
	debugMap["GCWindow"] = helpers.DebugValue(c.GCWindow, false)
	debugMap["LegacyFuzzing"] = helpers.DebugValue(c.LegacyFuzzing, false)
	debugMap["RevisionQuantization"] = helpers.DebugValue(c.RevisionQuantization, false)
	debugMap["MaxRevisionStalenessPercent"] = helpers.DebugValue(c.MaxRevisionStalenessPercent, false)
	debugMap["CredentialsProviderName"] = helpers.DebugValue(c.CredentialsProviderName, false)
	debugMap["ReadConnPool"] = helpers.DebugValue(c.ReadConnPool, false)
	debugMap["WriteConnPool"] = helpers.DebugValue(c.WriteConnPool, false)
	debugMap["ReadOnly"] = helpers.DebugValue(c.ReadOnly, false)
	debugMap["EnableDatastoreMetrics"] = helpers.DebugValue(c.EnableDatastoreMetrics, false)
	debugMap["DisableStats"] = helpers.DebugValue(c.DisableStats, false)
	debugMap["IncludeQueryParametersInTraces"] = helpers.DebugValue(c.IncludeQueryParametersInTraces, false)
	debugMap["ReadReplicaConnPool"] = helpers.DebugValue(c.ReadReplicaConnPool, false)
	debugMap["ReadReplicaURIs"] = helpers.SensitiveDebugValue(c.ReadReplicaURIs)
	debugMap["ReadReplicaCredentialsProviderName"] = helpers.DebugValue(c.ReadReplicaCredentialsProviderName, false)
	debugMap["BootstrapFiles"] = helpers.DebugValue(c.BootstrapFiles, true)
	debugMap["BootstrapFileContents"] = helpers.DebugValue(c.BootstrapFileContents, false)
	debugMap["BootstrapOverwrite"] = helpers.DebugValue(c.BootstrapOverwrite, false)
	debugMap["BootstrapTimeout"] = helpers.DebugValue(c.BootstrapTimeout, false)
	debugMap["RequestHedgingEnabled"] = helpers.DebugValue(c.RequestHedgingEnabled, false)
	debugMap["RequestHedgingInitialSlowValue"] = helpers.DebugValue(c.RequestHedgingInitialSlowValue, false)
	debugMap["RequestHedgingMaxRequests"] = helpers.DebugValue(c.RequestHedgingMaxRequests, false)
	debugMap["RequestHedgingQuantile"] = helpers.DebugValue(c.RequestHedgingQuantile, false)
	debugMap["FollowerReadDelay"] = helpers.DebugValue(c.FollowerReadDelay, false)
	debugMap["MaxRetries"] = helpers.DebugValue(c.MaxRetries, false)
	debugMap["OverlapKey"] = helpers.DebugValue(c.OverlapKey, false)
	debugMap["OverlapStrategy"] = helpers.DebugValue(c.OverlapStrategy, false)
	debugMap["EnableConnectionBalancing"] = helpers.DebugValue(c.EnableConnectionBalancing, false)
	debugMap["ConnectRate"] = helpers.DebugValue(c.ConnectRate, false)
	debugMap["WriteAcquisitionTimeout"] = helpers.DebugValue(c.WriteAcquisitionTimeout, false)
	debugMap["GCInterval"] = helpers.DebugValue(c.GCInterval, false)
	debugMap["GCMaxOperationTime"] = helpers.DebugValue(c.GCMaxOperationTime, false)
	debugMap["RelaxedIsolationLevel"] = helpers.DebugValue(c.RelaxedIsolationLevel, false)
	debugMap["SpannerCredentialsFile"] = helpers.DebugValue(c.SpannerCredentialsFile, false)
	debugMap["SpannerCredentialsJSON"] = helpers.SensitiveDebugValue(c.SpannerCredentialsJSON)
	debugMap["SpannerEmulatorHost"] = helpers.DebugValue(c.SpannerEmulatorHost, false)
	debugMap["SpannerMinSessions"] = helpers.DebugValue(c.SpannerMinSessions, false)
	debugMap["SpannerMaxSessions"] = helpers.DebugValue(c.SpannerMaxSessions, false)
	debugMap["SpannerDatastoreMetricsOption"] = helpers.DebugValue(c.SpannerDatastoreMetricsOption, false)
	debugMap["TablePrefix"] = helpers.DebugValue(c.TablePrefix, false)
	debugMap["RelationshipIntegrityEnabled"] = helpers.DebugValue(c.RelationshipIntegrityEnabled, false)
	debugMap["RelationshipIntegrityCurrentKey"] = helpers.DebugValue(c.RelationshipIntegrityCurrentKey, false)
	debugMap["RelationshipIntegrityExpiredKeys"] = helpers.DebugValue(c.RelationshipIntegrityExpiredKeys, false)
	debugMap["WatchBufferLength"] = helpers.DebugValue(c.WatchBufferLength, false)
	debugMap["WatchBufferWriteTimeout"] = helpers.DebugValue(c.WatchBufferWriteTimeout, false)
	debugMap["WatchConnectTimeout"] = helpers.DebugValue(c.WatchConnectTimeout, false)
	debugMap["MigrationPhase"] = helpers.DebugValue(c.MigrationPhase, false)
	debugMap["AllowedMigrations"] = helpers.DebugValue(c.AllowedMigrations, false)
	debugMap["ExperimentalColumnOptimization"] = helpers.DebugValue(c.ExperimentalColumnOptimization, false)
	debugMap["EnableExperimentalRelationshipExpiration"] = helpers.DebugValue(c.EnableExperimentalRelationshipExpiration, false)
	debugMap["EnableRevisionHeartbeat"] = helpers.DebugValue(c.EnableRevisionHeartbeat, false)
	return debugMap
}

// ConfigWithOptions configures an existing Config with the passed in options set
func ConfigWithOptions(c *Config, opts ...ConfigOption) *Config {
	for _, o := range opts {
		o(c)
	}
	return c
}

// WithOptions configures the receiver Config with the passed in options set
func (c *Config) WithOptions(opts ...ConfigOption) *Config {
	for _, o := range opts {
		o(c)
	}
	return c
}

// WithEngine returns an option that can set Engine on a Config
func WithEngine(engine string) ConfigOption {
	return func(c *Config) {
		c.Engine = engine
	}
}

// WithURI returns an option that can set URI on a Config
func WithURI(uRI string) ConfigOption {
	return func(c *Config) {
		c.URI = uRI
	}
}

// WithGCWindow returns an option that can set GCWindow on a Config
func WithGCWindow(gCWindow time.Duration) ConfigOption {
	return func(c *Config) {
		c.GCWindow = gCWindow
	}
}

// WithLegacyFuzzing returns an option that can set LegacyFuzzing on a Config
func WithLegacyFuzzing(legacyFuzzing time.Duration) ConfigOption {
	return func(c *Config) {
		c.LegacyFuzzing = legacyFuzzing
	}
}

// WithRevisionQuantization returns an option that can set RevisionQuantization on a Config
func WithRevisionQuantization(revisionQuantization time.Duration) ConfigOption {
	return func(c *Config) {
		c.RevisionQuantization = revisionQuantization
	}
}

// WithMaxRevisionStalenessPercent returns an option that can set MaxRevisionStalenessPercent on a Config
func WithMaxRevisionStalenessPercent(maxRevisionStalenessPercent float64) ConfigOption {
	return func(c *Config) {
		c.MaxRevisionStalenessPercent = maxRevisionStalenessPercent
	}
}

// WithCredentialsProviderName returns an option that can set CredentialsProviderName on a Config
func WithCredentialsProviderName(credentialsProviderName string) ConfigOption {
	return func(c *Config) {
		c.CredentialsProviderName = credentialsProviderName
	}
}

// WithFilterMaximumIDCount returns an option that can set FilterMaximumIDCount on a Config
func WithFilterMaximumIDCount(filterMaximumIDCount uint16) ConfigOption {
	return func(c *Config) {
		c.FilterMaximumIDCount = filterMaximumIDCount
	}
}

// WithReadConnPool returns an option that can set ReadConnPool on a Config
func WithReadConnPool(readConnPool ConnPoolConfig) ConfigOption {
	return func(c *Config) {
		c.ReadConnPool = readConnPool
	}
}

// WithWriteConnPool returns an option that can set WriteConnPool on a Config
func WithWriteConnPool(writeConnPool ConnPoolConfig) ConfigOption {
	return func(c *Config) {
		c.WriteConnPool = writeConnPool
	}
}

// WithReadOnly returns an option that can set ReadOnly on a Config
func WithReadOnly(readOnly bool) ConfigOption {
	return func(c *Config) {
		c.ReadOnly = readOnly
	}
}

// WithEnableDatastoreMetrics returns an option that can set EnableDatastoreMetrics on a Config
func WithEnableDatastoreMetrics(enableDatastoreMetrics bool) ConfigOption {
	return func(c *Config) {
		c.EnableDatastoreMetrics = enableDatastoreMetrics
	}
}

// WithDisableStats returns an option that can set DisableStats on a Config
func WithDisableStats(disableStats bool) ConfigOption {
	return func(c *Config) {
		c.DisableStats = disableStats
	}
}

// WithIncludeQueryParametersInTraces returns an option that can set IncludeQueryParametersInTraces on a Config
func WithIncludeQueryParametersInTraces(includeQueryParametersInTraces bool) ConfigOption {
	return func(c *Config) {
		c.IncludeQueryParametersInTraces = includeQueryParametersInTraces
	}
}

// WithReadReplicaConnPool returns an option that can set ReadReplicaConnPool on a Config
func WithReadReplicaConnPool(readReplicaConnPool ConnPoolConfig) ConfigOption {
	return func(c *Config) {
		c.ReadReplicaConnPool = readReplicaConnPool
	}
}

// WithOldReadReplicaConnPool returns an option that can set OldReadReplicaConnPool on a Config
func WithOldReadReplicaConnPool(oldReadReplicaConnPool ConnPoolConfig) ConfigOption {
	return func(c *Config) {
		c.OldReadReplicaConnPool = oldReadReplicaConnPool
	}
}

// WithReadReplicaURIs returns an option that can append ReadReplicaURIss to Config.ReadReplicaURIs
func WithReadReplicaURIs(readReplicaURIs string) ConfigOption {
	return func(c *Config) {
		c.ReadReplicaURIs = append(c.ReadReplicaURIs, readReplicaURIs)
	}
}

// SetReadReplicaURIs returns an option that can set ReadReplicaURIs on a Config
func SetReadReplicaURIs(readReplicaURIs []string) ConfigOption {
	return func(c *Config) {
		c.ReadReplicaURIs = readReplicaURIs
	}
}

// WithReadReplicaCredentialsProviderName returns an option that can set ReadReplicaCredentialsProviderName on a Config
func WithReadReplicaCredentialsProviderName(readReplicaCredentialsProviderName string) ConfigOption {
	return func(c *Config) {
		c.ReadReplicaCredentialsProviderName = readReplicaCredentialsProviderName
	}
}

// WithBootstrapFiles returns an option that can append BootstrapFiless to Config.BootstrapFiles
func WithBootstrapFiles(bootstrapFiles string) ConfigOption {
	return func(c *Config) {
		c.BootstrapFiles = append(c.BootstrapFiles, bootstrapFiles)
	}
}

// SetBootstrapFiles returns an option that can set BootstrapFiles on a Config
func SetBootstrapFiles(bootstrapFiles []string) ConfigOption {
	return func(c *Config) {
		c.BootstrapFiles = bootstrapFiles
	}
}

// WithBootstrapFileContents returns an option that can append BootstrapFileContentss to Config.BootstrapFileContents
func WithBootstrapFileContents(key string, value []byte) ConfigOption {
	return func(c *Config) {
		c.BootstrapFileContents[key] = value
	}
}

// SetBootstrapFileContents returns an option that can set BootstrapFileContents on a Config
func SetBootstrapFileContents(bootstrapFileContents map[string][]byte) ConfigOption {
	return func(c *Config) {
		c.BootstrapFileContents = bootstrapFileContents
	}
}

// WithBootstrapOverwrite returns an option that can set BootstrapOverwrite on a Config
func WithBootstrapOverwrite(bootstrapOverwrite bool) ConfigOption {
	return func(c *Config) {
		c.BootstrapOverwrite = bootstrapOverwrite
	}
}

// WithBootstrapTimeout returns an option that can set BootstrapTimeout on a Config
func WithBootstrapTimeout(bootstrapTimeout time.Duration) ConfigOption {
	return func(c *Config) {
		c.BootstrapTimeout = bootstrapTimeout
	}
}

// WithCaveatTypeSet returns an option that can set CaveatTypeSet on a Config
func WithCaveatTypeSet(caveatTypeSet *types.TypeSet) ConfigOption {
	return func(c *Config) {
		c.CaveatTypeSet = caveatTypeSet
	}
}

// WithRequestHedgingEnabled returns an option that can set RequestHedgingEnabled on a Config
func WithRequestHedgingEnabled(requestHedgingEnabled bool) ConfigOption {
	return func(c *Config) {
		c.RequestHedgingEnabled = requestHedgingEnabled
	}
}

// WithRequestHedgingInitialSlowValue returns an option that can set RequestHedgingInitialSlowValue on a Config
func WithRequestHedgingInitialSlowValue(requestHedgingInitialSlowValue time.Duration) ConfigOption {
	return func(c *Config) {
		c.RequestHedgingInitialSlowValue = requestHedgingInitialSlowValue
	}
}

// WithRequestHedgingMaxRequests returns an option that can set RequestHedgingMaxRequests on a Config
func WithRequestHedgingMaxRequests(requestHedgingMaxRequests uint64) ConfigOption {
	return func(c *Config) {
		c.RequestHedgingMaxRequests = requestHedgingMaxRequests
	}
}

// WithRequestHedgingQuantile returns an option that can set RequestHedgingQuantile on a Config
func WithRequestHedgingQuantile(requestHedgingQuantile float64) ConfigOption {
	return func(c *Config) {
		c.RequestHedgingQuantile = requestHedgingQuantile
	}
}

// WithFollowerReadDelay returns an option that can set FollowerReadDelay on a Config
func WithFollowerReadDelay(followerReadDelay time.Duration) ConfigOption {
	return func(c *Config) {
		c.FollowerReadDelay = followerReadDelay
	}
}

// WithMaxRetries returns an option that can set MaxRetries on a Config
func WithMaxRetries(maxRetries int) ConfigOption {
	return func(c *Config) {
		c.MaxRetries = maxRetries
	}
}

// WithOverlapKey returns an option that can set OverlapKey on a Config
func WithOverlapKey(overlapKey string) ConfigOption {
	return func(c *Config) {
		c.OverlapKey = overlapKey
	}
}

// WithOverlapStrategy returns an option that can set OverlapStrategy on a Config
func WithOverlapStrategy(overlapStrategy string) ConfigOption {
	return func(c *Config) {
		c.OverlapStrategy = overlapStrategy
	}
}

// WithEnableConnectionBalancing returns an option that can set EnableConnectionBalancing on a Config
func WithEnableConnectionBalancing(enableConnectionBalancing bool) ConfigOption {
	return func(c *Config) {
		c.EnableConnectionBalancing = enableConnectionBalancing
	}
}

// WithConnectRate returns an option that can set ConnectRate on a Config
func WithConnectRate(connectRate time.Duration) ConfigOption {
	return func(c *Config) {
		c.ConnectRate = connectRate
	}
}

// WithWriteAcquisitionTimeout returns an option that can set WriteAcquisitionTimeout on a Config
func WithWriteAcquisitionTimeout(writeAcquisitionTimeout time.Duration) ConfigOption {
	return func(c *Config) {
		c.WriteAcquisitionTimeout = writeAcquisitionTimeout
	}
}

// WithGCInterval returns an option that can set GCInterval on a Config
func WithGCInterval(gCInterval time.Duration) ConfigOption {
	return func(c *Config) {
		c.GCInterval = gCInterval
	}
}

// WithGCMaxOperationTime returns an option that can set GCMaxOperationTime on a Config
func WithGCMaxOperationTime(gCMaxOperationTime time.Duration) ConfigOption {
	return func(c *Config) {
		c.GCMaxOperationTime = gCMaxOperationTime
	}
}

// WithRelaxedIsolationLevel returns an option that can set RelaxedIsolationLevel on a Config
func WithRelaxedIsolationLevel(relaxedIsolationLevel bool) ConfigOption {
	return func(c *Config) {
		c.RelaxedIsolationLevel = relaxedIsolationLevel
	}
}

// WithSpannerCredentialsFile returns an option that can set SpannerCredentialsFile on a Config
func WithSpannerCredentialsFile(spannerCredentialsFile string) ConfigOption {
	return func(c *Config) {
		c.SpannerCredentialsFile = spannerCredentialsFile
	}
}

// WithSpannerCredentialsJSON returns an option that can append SpannerCredentialsJSONs to Config.SpannerCredentialsJSON
func WithSpannerCredentialsJSON(spannerCredentialsJSON byte) ConfigOption {
	return func(c *Config) {
		c.SpannerCredentialsJSON = append(c.SpannerCredentialsJSON, spannerCredentialsJSON)
	}
}

// SetSpannerCredentialsJSON returns an option that can set SpannerCredentialsJSON on a Config
func SetSpannerCredentialsJSON(spannerCredentialsJSON []byte) ConfigOption {
	return func(c *Config) {
		c.SpannerCredentialsJSON = spannerCredentialsJSON
	}
}

// WithSpannerEmulatorHost returns an option that can set SpannerEmulatorHost on a Config
func WithSpannerEmulatorHost(spannerEmulatorHost string) ConfigOption {
	return func(c *Config) {
		c.SpannerEmulatorHost = spannerEmulatorHost
	}
}

// WithSpannerMinSessions returns an option that can set SpannerMinSessions on a Config
func WithSpannerMinSessions(spannerMinSessions uint64) ConfigOption {
	return func(c *Config) {
		c.SpannerMinSessions = spannerMinSessions
	}
}

// WithSpannerMaxSessions returns an option that can set SpannerMaxSessions on a Config
func WithSpannerMaxSessions(spannerMaxSessions uint64) ConfigOption {
	return func(c *Config) {
		c.SpannerMaxSessions = spannerMaxSessions
	}
}

// WithSpannerDatastoreMetricsOption returns an option that can set SpannerDatastoreMetricsOption on a Config
func WithSpannerDatastoreMetricsOption(spannerDatastoreMetricsOption string) ConfigOption {
	return func(c *Config) {
		c.SpannerDatastoreMetricsOption = spannerDatastoreMetricsOption
	}
}

// WithTablePrefix returns an option that can set TablePrefix on a Config
func WithTablePrefix(tablePrefix string) ConfigOption {
	return func(c *Config) {
		c.TablePrefix = tablePrefix
	}
}

// WithRelationshipIntegrityEnabled returns an option that can set RelationshipIntegrityEnabled on a Config
func WithRelationshipIntegrityEnabled(relationshipIntegrityEnabled bool) ConfigOption {
	return func(c *Config) {
		c.RelationshipIntegrityEnabled = relationshipIntegrityEnabled
	}
}

// WithRelationshipIntegrityCurrentKey returns an option that can set RelationshipIntegrityCurrentKey on a Config
func WithRelationshipIntegrityCurrentKey(relationshipIntegrityCurrentKey RelIntegrityKey) ConfigOption {
	return func(c *Config) {
		c.RelationshipIntegrityCurrentKey = relationshipIntegrityCurrentKey
	}
}

// WithRelationshipIntegrityExpiredKeys returns an option that can append RelationshipIntegrityExpiredKeyss to Config.RelationshipIntegrityExpiredKeys
func WithRelationshipIntegrityExpiredKeys(relationshipIntegrityExpiredKeys string) ConfigOption {
	return func(c *Config) {
		c.RelationshipIntegrityExpiredKeys = append(c.RelationshipIntegrityExpiredKeys, relationshipIntegrityExpiredKeys)
	}
}

// SetRelationshipIntegrityExpiredKeys returns an option that can set RelationshipIntegrityExpiredKeys on a Config
func SetRelationshipIntegrityExpiredKeys(relationshipIntegrityExpiredKeys []string) ConfigOption {
	return func(c *Config) {
		c.RelationshipIntegrityExpiredKeys = relationshipIntegrityExpiredKeys
	}
}

// WithWatchBufferLength returns an option that can set WatchBufferLength on a Config
func WithWatchBufferLength(watchBufferLength uint16) ConfigOption {
	return func(c *Config) {
		c.WatchBufferLength = watchBufferLength
	}
}

// WithWatchBufferWriteTimeout returns an option that can set WatchBufferWriteTimeout on a Config
func WithWatchBufferWriteTimeout(watchBufferWriteTimeout time.Duration) ConfigOption {
	return func(c *Config) {
		c.WatchBufferWriteTimeout = watchBufferWriteTimeout
	}
}

// WithWatchConnectTimeout returns an option that can set WatchConnectTimeout on a Config
func WithWatchConnectTimeout(watchConnectTimeout time.Duration) ConfigOption {
	return func(c *Config) {
		c.WatchConnectTimeout = watchConnectTimeout
	}
}

// WithDisableWatchSupport returns an option that can set DisableWatchSupport on a Config
func WithDisableWatchSupport(disableWatchSupport bool) ConfigOption {
	return func(c *Config) {
		c.DisableWatchSupport = disableWatchSupport
	}
}

// WithMigrationPhase returns an option that can set MigrationPhase on a Config
func WithMigrationPhase(migrationPhase string) ConfigOption {
	return func(c *Config) {
		c.MigrationPhase = migrationPhase
	}
}

// WithAllowedMigrations returns an option that can append AllowedMigrationss to Config.AllowedMigrations
func WithAllowedMigrations(allowedMigrations string) ConfigOption {
	return func(c *Config) {
		c.AllowedMigrations = append(c.AllowedMigrations, allowedMigrations)
	}
}

// SetAllowedMigrations returns an option that can set AllowedMigrations on a Config
func SetAllowedMigrations(allowedMigrations []string) ConfigOption {
	return func(c *Config) {
		c.AllowedMigrations = allowedMigrations
	}
}

// WithExperimentalColumnOptimization returns an option that can set ExperimentalColumnOptimization on a Config
func WithExperimentalColumnOptimization(experimentalColumnOptimization bool) ConfigOption {
	return func(c *Config) {
		c.ExperimentalColumnOptimization = experimentalColumnOptimization
	}
}

// WithEnableExperimentalRelationshipExpiration returns an option that can set EnableExperimentalRelationshipExpiration on a Config
func WithEnableExperimentalRelationshipExpiration(enableExperimentalRelationshipExpiration bool) ConfigOption {
	return func(c *Config) {
		c.EnableExperimentalRelationshipExpiration = enableExperimentalRelationshipExpiration
	}
}

// WithEnableRevisionHeartbeat returns an option that can set EnableRevisionHeartbeat on a Config
func WithEnableRevisionHeartbeat(enableRevisionHeartbeat bool) ConfigOption {
	return func(c *Config) {
		c.EnableRevisionHeartbeat = enableRevisionHeartbeat
	}
}
