1// Copyright (C) MongoDB, Inc. 2017-present. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); you may 4// not use this file except in compliance with the License. You may obtain 5// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 6 7package readpref 8 9import ( 10 "fmt" 11 "strings" 12) 13 14// Mode indicates the user's preference on reads. 15type Mode uint8 16 17// Mode constants 18const ( 19 _ Mode = iota 20 // PrimaryMode indicates that only a primary is 21 // considered for reading. This is the default 22 // mode. 23 PrimaryMode 24 // PrimaryPreferredMode indicates that if a primary 25 // is available, use it; otherwise, eligible 26 // secondaries will be considered. 27 PrimaryPreferredMode 28 // SecondaryMode indicates that only secondaries 29 // should be considered. 30 SecondaryMode 31 // SecondaryPreferredMode indicates that only secondaries 32 // should be considered when one is available. If none 33 // are available, then a primary will be considered. 34 SecondaryPreferredMode 35 // NearestMode indicates that all primaries and secondaries 36 // will be considered. 37 NearestMode 38) 39 40// ModeFromString returns a mode corresponding to 41// mode. 42func ModeFromString(mode string) (Mode, error) { 43 switch strings.ToLower(mode) { 44 case "primary": 45 return PrimaryMode, nil 46 case "primarypreferred": 47 return PrimaryPreferredMode, nil 48 case "secondary": 49 return SecondaryMode, nil 50 case "secondarypreferred": 51 return SecondaryPreferredMode, nil 52 case "nearest": 53 return NearestMode, nil 54 } 55 return Mode(0), fmt.Errorf("unknown read preference %v", mode) 56} 57