github.com/tickoalcantara12/micro/v3@v3.0.0-20221007104245-9d75b9bcbab9/util/selector/selector.go (about)

     1  // Licensed under the Apache License, Version 2.0 (the "License");
     2  // you may not use this file except in compliance with the License.
     3  // You may obtain a copy of the License at
     4  //
     5  //     https://www.apache.org/licenses/LICENSE-2.0
     6  //
     7  // Unless required by applicable law or agreed to in writing, software
     8  // distributed under the License is distributed on an "AS IS" BASIS,
     9  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    10  // See the License for the specific language governing permissions and
    11  // limitations under the License.
    12  //
    13  // Original source: github.com/micro/go-micro/v3/selector/selector.go
    14  
    15  // Package selector is for node selection and load balancing
    16  package selector
    17  
    18  import (
    19  	"errors"
    20  )
    21  
    22  var (
    23  	// ErrNoneAvailable is returned by select when no routes were provided to select from
    24  	ErrNoneAvailable = errors.New("none available")
    25  )
    26  
    27  // Selector selects a route from a pool
    28  type Selector interface {
    29  	// Select a route from the pool using the strategy
    30  	Select([]string, ...SelectOption) (Next, error)
    31  	// Record the error returned from a route to inform future selection
    32  	Record(string, error) error
    33  	// Reset the selector
    34  	Reset() error
    35  	// String returns the name of the selector
    36  	String() string
    37  }
    38  
    39  // Next returns the next node
    40  type Next func() string