|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // Copyright (C) MongoDB, Inc. 2017-present.
- //
- // Licensed 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
-
- package readpref
-
- import (
- "errors"
- "time"
-
- "go.mongodb.org/mongo-driver/tag"
- )
-
- // ErrInvalidTagSet indicates that an invalid set of tags was specified.
- var ErrInvalidTagSet = errors.New("an even number of tags must be specified")
-
- // Option configures a read preference
- type Option func(*ReadPref) error
-
- // WithMaxStaleness sets the maximum staleness a
- // server is allowed.
- func WithMaxStaleness(ms time.Duration) Option {
- return func(rp *ReadPref) error {
- rp.maxStaleness = ms
- rp.maxStalenessSet = true
- return nil
- }
- }
-
- // WithTags sets a single tag set used to match
- // a server. The last call to WithTags or WithTagSets
- // overrides all previous calls to either method.
- func WithTags(tags ...string) Option {
- return func(rp *ReadPref) error {
- length := len(tags)
- if length < 2 || length%2 != 0 {
- return ErrInvalidTagSet
- }
-
- tagset := make(tag.Set, 0, length/2)
-
- for i := 1; i < length; i += 2 {
- tagset = append(tagset, tag.Tag{Name: tags[i-1], Value: tags[i]})
- }
-
- return WithTagSets(tagset)(rp)
- }
- }
-
- // WithTagSets sets the tag sets used to match
- // a server. The last call to WithTags or WithTagSets
- // overrides all previous calls to either method.
- func WithTagSets(tagSets ...tag.Set) Option {
- return func(rp *ReadPref) error {
- rp.tagSets = tagSets
- return nil
- }
- }
|