code: func (nDB *NetworkDB) Watch(tname, nid, key string) (*events.Channel, func()) {
  	var matcher events.Matcher
  
  	if tname != "" || nid != "" || key != "" {
  		matcher = events.MatcherFunc(func(ev events.Event) bool {
  			var evt event
  			switch ev := ev.(type) {
  			case CreateEvent:
  				evt = event(ev)
  			case UpdateEvent:
  				evt = event(ev)
  			case DeleteEvent:
  				evt = event(ev)
  			}
  
  			if tname != "" && evt.Table != tname {
  				return false
  			}
  
  			if nid != "" && evt.NetworkID != nid {
  				return false
  			}
  
  			if key != "" && evt.Key != key {
  				return false
  			}
  
  			return true
  		})
  	}
  
  	ch := events.NewChannel(0)
  	sink := events.Sink(events.NewQueue(ch))
  
  	if matcher != nil {
  		sink = events.NewFilter(sink, matcher)
  	}
  
  	nDB.broadcaster.Add(sink)
  	return ch, func() {
  		nDB.broadcaster.Remove(sink)
  		ch.Close()
  		sink.Close()
  	}
  }
docs: // Watch creates a watcher with filters for a particular table or
  // network or key or any combination of the tuple. If any of the
  // filter is an empty string it acts as a wildcard for that
  // field. Watch returns a channel of events, where the events will be
  // sent.