package getsvc import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" "go.uber.org/zap" ) // Option is a Service's constructor option. type Option func(*Service) // Service utility serving requests of Object.Get service. type Service struct { log *logger.Logger localStorage localStorage traverserGenerator traverserGenerator epochSource epochSource keyStore keyStorage remoteStorageConstructor remoteStorageConstructor } // New creates, initializes and returns utility serving // Object.Get service requests. func New( ks keyStorage, es epochSource, e localStorageEngine, tg traverserGenerator, cc clientConstructor, opts ...Option, ) *Service { result := &Service{ keyStore: ks, epochSource: es, log: &logger.Logger{Logger: zap.L()}, localStorage: &engineLocalStorage{ engine: e, }, traverserGenerator: tg, remoteStorageConstructor: &multiclientRemoteStorageConstructor{ clientConstructor: cc, }, } for _, option := range opts { option(result) } return result } // WithLogger returns option to specify Get service's logger. func WithLogger(l *logger.Logger) Option { return func(s *Service) { s.log = &logger.Logger{Logger: l.With(zap.String("component", "Object.Get service"))} } }