micro/router/router.go
Milos Gajdos ee8b6b3114
Redefeind interfaces; Added better modelled data strauctures
Router interface has been redefined which fits better with what we are
looking for.

Routing table now offers a comprehensive set of information about its
entries which will make up for rich queries in the future

Query interface has been defined to enable current basic and more
advanced queries in the future.
2019-06-19 18:03:41 +01:00

57 lines
1.4 KiB
Go

// Package router provides an interface for micro network routers
package router
import (
"github.com/micro/go-micro/registry"
)
var (
// DefaultRouter returns default micro router
DefaultRouter = NewRouter()
)
// Router is micro network router
type Router interface {
// Initi initializes Router with options
Init(...Option) error
// Options returns Router options
Options() Options
// Add adds new entry into routing table
Add(*Entry, ...RouteOption) error
// Remove removes entry from the routing table
Remove(*Entry) error
// Update updates entry in the routing table
Update(*Entry) error
// Lookup queries the routing table and returns matching entries
Lookup(Query) ([]*Entry, error)
// Table returns routing table
Table() *Table
// Address is Router adddress
Address() string
// String implemens fmt.Stringer interface
String() string
}
// Option used by the Router
type Option func(*Options)
// RouteOption is used by Router for adding routing table entries
type RouteOption func(*RouteOptions)
// QueryOption is used to defined routing table lookup query
type QueryOption func(*QueryOptions)
// NewRouter creates new Router and returns it
func NewRouter(opts ...Option) Router {
// router registry to DefaultRegistry
ropts := Options{
Registry: registry.DefaultRegistry,
}
for _, o := range opts {
o(&ropts)
}
return newRouter(opts...)
}