go-transaction-manager

Форк
0
73 строки · 1.4 Кб
1
package sql
2

3
import (
4
	"database/sql"
5

6
	trm "github.com/avito-tech/go-transaction-manager/trm/v2"
7
)
8

9
// Opt is a type to configure Settings.
10
type Opt func(*Settings) error
11

12
// WithTxOptions sets up sql.TxOptions for the Settings.
13
func WithTxOptions(opts *sql.TxOptions) Opt {
14
	return func(s *Settings) error {
15
		*s = s.setTrOpts(opts)
16

17
		return nil
18
	}
19
}
20

21
// Settings contains settings for sql.Transaction.
22
type Settings struct {
23
	trm.Settings
24
	txOpts *sql.TxOptions
25
}
26

27
// NewSettings creates Settings.
28
func NewSettings(trms trm.Settings, oo ...Opt) (Settings, error) {
29
	s := &Settings{Settings: trms, txOpts: nil}
30

31
	for _, o := range oo {
32
		if err := o(s); err != nil {
33
			return Settings{}, err
34
		}
35
	}
36

37
	return *s, nil
38
}
39

40
// MustSettings returns Settings if err is nil and panics otherwise.
41
func MustSettings(trms trm.Settings, oo ...Opt) Settings {
42
	s, err := NewSettings(trms, oo...)
43
	if err != nil {
44
		panic(err)
45
	}
46

47
	return s
48
}
49

50
// EnrichBy fills nil properties from external Settings.
51
func (s Settings) EnrichBy(in trm.Settings) trm.Settings {
52
	external, ok := in.(Settings)
53
	if ok {
54
		if s.TxOpts() == nil {
55
			s = s.setTrOpts(external.TxOpts())
56
		}
57
	}
58

59
	s.Settings = s.Settings.EnrichBy(in)
60

61
	return s
62
}
63

64
// TxOpts returns trm.CtxKey for the trm.Transaction.
65
func (s Settings) TxOpts() *sql.TxOptions {
66
	return s.txOpts
67
}
68

69
func (s Settings) setTrOpts(opts *sql.TxOptions) Settings {
70
	s.txOpts = opts
71

72
	return s
73
}
74

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.