package udp

import (
	"github.com/traefik/traefik/v2/pkg/safe"
)

// HandlerSwitcher is a switcher implementation of the Handler interface.
type HandlerSwitcher struct {
	handler safe.Safe
}

// ServeUDP implements the Handler interface.
func (s *HandlerSwitcher) ServeUDP(conn *Conn) {
	handler := s.handler.Get()
	h, ok := handler.(Handler)
	if ok {
		h.ServeUDP(conn)
	} else {
		conn.Close()
	}
}

// Switch replaces s handler with the given handler.
func (s *HandlerSwitcher) Switch(handler Handler) {
	s.handler.Set(handler)
}
