status-go/vendor/github.com/koron/go-ssdp/location.go

41 lines
1.1 KiB
Go

package ssdp
import (
"fmt"
"net"
)
// LocationProvider provides address for Location header which can be reached from
// "from" address network.
type LocationProvider interface {
// Location provides an address be reachable from the network located
// by "from" address or "ifi" interface.
// One of "from" or "ifi" must not be nil.
Location(from net.Addr, ifi *net.Interface) string
}
// LocationProviderFunc type is an adapter to allow the use of ordinary
// functions are location providers.
type LocationProviderFunc func(net.Addr, *net.Interface) string
func (f LocationProviderFunc) Location(from net.Addr, ifi *net.Interface) string {
return f(from, ifi)
}
type fixedLocation string
func (s fixedLocation) Location(net.Addr, *net.Interface) string {
return string(s)
}
func toLocationProvider(v interface{}) (LocationProvider, error) {
switch w := v.(type) {
case string:
return fixedLocation(w), nil
case LocationProvider:
return w, nil
default:
return nil, fmt.Errorf("location should be a string or a ssdp.LocationProvider but got %T", w)
}
}