mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-24 22:15:45 +03:00
f5602d9c46
Merge in DNS/adguard-home from hup-reload to master Squashed commit of the following: commit 5cd4ab85bdc7544a4eded2a61f5a5571175daa44 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Fri Oct 7 19:58:17 2022 +0300 next: imp signal hdlr commit 8fd18e749fec46982d26fc408e661bd802586c37 Merge: a8780455f1dd3334
Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Fri Oct 7 19:46:48 2022 +0300 Merge branch 'master' into hup-reload commit a87804550e15d7fe3d9ded2e5a736c395f96febd Merge: 349dbe54960a7a75
Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Fri Oct 7 15:49:23 2022 +0300 Merge branch 'master' into hup-reload commit 349dbe54fe27eeaf56776c73c3cc5649018d4c60 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Fri Oct 7 15:43:52 2022 +0300 next: imp docs, names commit 7287a86d283489127453009267911003cea5227e Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Fri Oct 7 13:39:44 2022 +0300 WIP all: impl dynamic reconfiguration
63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
// Package agh contains common entities and interfaces of AdGuard Home.
|
|
package agh
|
|
|
|
import "context"
|
|
|
|
// Service is the interface for API servers.
|
|
//
|
|
// TODO(a.garipov): Consider adding a context to Start.
|
|
//
|
|
// TODO(a.garipov): Consider adding a Wait method or making an extension
|
|
// interface for that.
|
|
type Service interface {
|
|
// Start starts the service. It does not block.
|
|
Start() (err error)
|
|
|
|
// Shutdown gracefully stops the service. ctx is used to determine
|
|
// a timeout before trying to stop the service less gracefully.
|
|
Shutdown(ctx context.Context) (err error)
|
|
}
|
|
|
|
// type check
|
|
var _ Service = EmptyService{}
|
|
|
|
// EmptyService is a [Service] that does nothing.
|
|
//
|
|
// TODO(a.garipov): Remove if unnecessary.
|
|
type EmptyService struct{}
|
|
|
|
// Start implements the [Service] interface for EmptyService.
|
|
func (EmptyService) Start() (err error) { return nil }
|
|
|
|
// Shutdown implements the [Service] interface for EmptyService.
|
|
func (EmptyService) Shutdown(_ context.Context) (err error) { return nil }
|
|
|
|
// ServiceWithConfig is an extension of the [Service] interface for services
|
|
// that can return their configuration.
|
|
//
|
|
// TODO(a.garipov): Consider removing this generic interface if we figure out
|
|
// how to make it testable in a better way.
|
|
type ServiceWithConfig[ConfigType any] interface {
|
|
Service
|
|
|
|
Config() (c ConfigType)
|
|
}
|
|
|
|
// type check
|
|
var _ ServiceWithConfig[struct{}] = (*EmptyServiceWithConfig[struct{}])(nil)
|
|
|
|
// EmptyServiceWithConfig is a ServiceWithConfig that does nothing. Its Config
|
|
// method returns Conf.
|
|
//
|
|
// TODO(a.garipov): Remove if unnecessary.
|
|
type EmptyServiceWithConfig[ConfigType any] struct {
|
|
EmptyService
|
|
|
|
Conf ConfigType
|
|
}
|
|
|
|
// Config implements the [ServiceWithConfig] interface for
|
|
// *EmptyServiceWithConfig.
|
|
func (s *EmptyServiceWithConfig[ConfigType]) Config() (conf ConfigType) {
|
|
return s.Conf
|
|
}
|