code: func (c *Client) NewWatcher(ctx context.Context, watch services.Watch) (services.Watcher, error) {
  	clt, err := c.grpc()
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  	cancelCtx, cancel := context.WithCancel(ctx)
  	var protoWatch proto.Watch
  	for _, kind := range watch.Kinds {
  		protoWatch.Kinds = append(protoWatch.Kinds, proto.WatchKind{
  			Name:        kind.Name,
  			Kind:        kind.Kind,
  			LoadSecrets: kind.LoadSecrets,
  		})
  	}
  	stream, err := clt.WatchEvents(cancelCtx, &protoWatch)
  	if err != nil {
  		cancel()
  		return nil, trail.FromGRPC(err)
  	}
  	w := &streamWatcher{
  		stream:  stream,
  		ctx:     cancelCtx,
  		cancel:  cancel,
  		eventsC: make(chan services.Event),
  	}
  	go w.receiveEvents()
  	return w, nil
  }
docs: // NewWatcher returns a new event watcher