45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
package portforward
|
|
|
|
import (
|
|
"github.com/qdm12/gluetun/internal/portforward/service"
|
|
"github.com/qdm12/gosettings"
|
|
)
|
|
|
|
type Settings struct {
|
|
// VPNIsUp can be optionally set to signal the loop
|
|
// the VPN is up (true) or down (false). If left to nil,
|
|
// it is assumed the VPN is in the same previous state.
|
|
VPNIsUp *bool
|
|
Service service.Settings
|
|
}
|
|
|
|
// updateWith deep copies the receiving settings, overrides the copy with
|
|
// fields set in the partialUpdate argument, validates the new settings
|
|
// and returns them if they are valid, or returns an error otherwise.
|
|
// In all cases, the receiving settings are unmodified.
|
|
func (s Settings) updateWith(partialUpdate Settings,
|
|
forStartup bool) (updated Settings, err error) {
|
|
updated = s.copy()
|
|
updated.overrideWith(partialUpdate)
|
|
err = updated.validate(forStartup)
|
|
if err != nil {
|
|
return updated, err
|
|
}
|
|
return updated, nil
|
|
}
|
|
|
|
func (s Settings) copy() (copied Settings) {
|
|
copied.VPNIsUp = gosettings.CopyPointer(s.VPNIsUp)
|
|
copied.Service = s.Service.Copy()
|
|
return copied
|
|
}
|
|
|
|
func (s *Settings) overrideWith(update Settings) {
|
|
s.VPNIsUp = gosettings.OverrideWithPointer(s.VPNIsUp, update.VPNIsUp)
|
|
s.Service.OverrideWith(update.Service)
|
|
}
|
|
|
|
func (s Settings) validate(forStartup bool) (err error) {
|
|
return s.Service.Validate(forStartup)
|
|
}
|