github.com/m3db/m3@v1.5.0/src/aggregator/server/m3msg/options.go (about)

     1  // Copyright (c) 2020 Uber Technologies, Inc.
     2  //
     3  // Permission is hereby granted, free of charge, to any person obtaining a copy
     4  // of this software and associated documentation files (the "Software"), to deal
     5  // in the Software without restriction, including without limitation the rights
     6  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     7  // copies of the Software, and to permit persons to whom the Software is
     8  // furnished to do so, subject to the following conditions:
     9  //
    10  // The above copyright notice and this permission notice shall be included in
    11  // all copies or substantial portions of the Software.
    12  //
    13  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    14  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    15  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    16  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    17  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    18  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    19  // THE SOFTWARE.
    20  
    21  package m3msg
    22  
    23  import (
    24  	"errors"
    25  
    26  	"github.com/m3db/m3/src/msg/consumer"
    27  	"github.com/m3db/m3/src/x/instrument"
    28  	xserver "github.com/m3db/m3/src/x/server"
    29  )
    30  
    31  var (
    32  	errNoInstrumentOptions = errors.New("no instrument options")
    33  	errNoServerOptions     = errors.New("no server options")
    34  	errNoConsumerOptions   = errors.New("no consumer options")
    35  )
    36  
    37  // Options is a set of M3Msg options.
    38  type Options interface {
    39  	// Validate validates the options.
    40  	Validate() error
    41  
    42  	// SetInstrumentOptions sets the instrument options.
    43  	SetInstrumentOptions(value instrument.Options) Options
    44  
    45  	// InstrumentOptions returns the instrument options.
    46  	InstrumentOptions() instrument.Options
    47  
    48  	// SetServerOptions sets the server options.
    49  	SetServerOptions(value xserver.Options) Options
    50  
    51  	// ServerOptions returns the server options.
    52  	ServerOptions() xserver.Options
    53  
    54  	// SetConsumerOptions sets the consumer options.
    55  	SetConsumerOptions(value consumer.Options) Options
    56  
    57  	// ConsumerOptions returns the consumer options.
    58  	ConsumerOptions() consumer.Options
    59  }
    60  
    61  type options struct {
    62  	instrumentOpts instrument.Options
    63  	serverOpts     xserver.Options
    64  	consumerOpts   consumer.Options
    65  }
    66  
    67  // NewOptions returns a set of M3Msg options.
    68  func NewOptions() Options {
    69  	return &options{}
    70  }
    71  
    72  func (o *options) Validate() error {
    73  	if o.instrumentOpts == nil {
    74  		return errNoInstrumentOptions
    75  	}
    76  	if o.serverOpts == nil {
    77  		return errNoServerOptions
    78  	}
    79  	if o.consumerOpts == nil {
    80  		return errNoConsumerOptions
    81  	}
    82  	return nil
    83  }
    84  
    85  func (o *options) SetInstrumentOptions(value instrument.Options) Options {
    86  	opts := *o
    87  	opts.instrumentOpts = value
    88  	return &opts
    89  }
    90  
    91  func (o *options) InstrumentOptions() instrument.Options {
    92  	return o.instrumentOpts
    93  }
    94  
    95  func (o *options) SetServerOptions(value xserver.Options) Options {
    96  	opts := *o
    97  	opts.serverOpts = value
    98  	return &opts
    99  }
   100  
   101  func (o *options) ServerOptions() xserver.Options {
   102  	return o.serverOpts
   103  }
   104  
   105  func (o *options) SetConsumerOptions(value consumer.Options) Options {
   106  	opts := *o
   107  	opts.consumerOpts = value
   108  	return &opts
   109  }
   110  
   111  func (o *options) ConsumerOptions() consumer.Options {
   112  	return o.consumerOpts
   113  }