80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package router
 | |
| 
 | |
| // QueryOption sets routing table query options
 | |
| type QueryOption func(*QueryOptions)
 | |
| 
 | |
| // QueryOptions are routing table query options
 | |
| type QueryOptions struct {
 | |
| 	// Service is destination service name
 | |
| 	Service string
 | |
| 	// Gateway is route gateway
 | |
| 	Gateway string
 | |
| 	// Network is network address
 | |
| 	Network string
 | |
| 	// Router is router id
 | |
| 	Router string
 | |
| }
 | |
| 
 | |
| // QueryService sets service to query
 | |
| func QueryService(s string) QueryOption {
 | |
| 	return func(o *QueryOptions) {
 | |
| 		o.Service = s
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // QueryGateway sets gateway address to query
 | |
| func QueryGateway(g string) QueryOption {
 | |
| 	return func(o *QueryOptions) {
 | |
| 		o.Gateway = g
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // QueryNetwork sets network name to query
 | |
| func QueryNetwork(n string) QueryOption {
 | |
| 	return func(o *QueryOptions) {
 | |
| 		o.Network = n
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // QueryRouter sets router id to query
 | |
| func QueryRouter(r string) QueryOption {
 | |
| 	return func(o *QueryOptions) {
 | |
| 		o.Router = r
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Query is routing table query
 | |
| type Query interface {
 | |
| 	// Options returns query options
 | |
| 	Options() QueryOptions
 | |
| }
 | |
| 
 | |
| // query is a basic implementation of Query
 | |
| type query struct {
 | |
| 	opts QueryOptions
 | |
| }
 | |
| 
 | |
| // NewQuery creates new query and returns it
 | |
| func NewQuery(opts ...QueryOption) Query {
 | |
| 	// default options
 | |
| 	qopts := QueryOptions{
 | |
| 		Service: "*",
 | |
| 		Gateway: "*",
 | |
| 		Network: "*",
 | |
| 		Router:  "*",
 | |
| 	}
 | |
| 
 | |
| 	for _, o := range opts {
 | |
| 		o(&qopts)
 | |
| 	}
 | |
| 
 | |
| 	return &query{
 | |
| 		opts: qopts,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Options returns query options
 | |
| func (q *query) Options() QueryOptions {
 | |
| 	return q.opts
 | |
| }
 |