blob: 379e8a0bd371b54a1b7112baa287827d9e7169eb [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package provider
import (
"time"
)
type Option interface {
ApplyToList(*Options)
}
type Options struct {
SyncTimeout time.Duration
SyncPeriod time.Duration
InitSyncDelay time.Duration
BackendMode string
ResolveEndpoints bool
}
func (o *Options) ApplyToList(lo *Options) {
if o.SyncTimeout > 0 {
lo.SyncTimeout = o.SyncTimeout
}
if o.SyncPeriod > 0 {
lo.SyncPeriod = o.SyncPeriod
}
if o.InitSyncDelay > 0 {
lo.InitSyncDelay = o.InitSyncDelay
}
if o.BackendMode != "" {
lo.BackendMode = o.BackendMode
}
if o.ResolveEndpoints {
lo.ResolveEndpoints = o.ResolveEndpoints
}
}
func (o *Options) ApplyOptions(opts []Option) *Options {
for _, opt := range opts {
opt.ApplyToList(o)
}
return o
}
type backendModeOption string
func (b backendModeOption) ApplyToList(o *Options) {
o.BackendMode = string(b)
}
func WithBackendMode(mode string) Option {
return backendModeOption(mode)
}
type resolveEndpointsOption bool
func (r resolveEndpointsOption) ApplyToList(o *Options) {
o.ResolveEndpoints = bool(r)
}
func WithResolveEndpoints() Option {
return resolveEndpointsOption(true)
}