| // Copyright 2024 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | package github | 
 |  | 
 | import ( | 
 | 	"iter" | 
 | 	"slices" | 
 |  | 
 | 	"golang.org/x/oscar/internal/docs" | 
 | 	"golang.org/x/oscar/internal/storage/timed" | 
 | ) | 
 |  | 
 | var _ docs.Source[*Event] = (*Client)(nil) | 
 |  | 
 | const DocWatcherID = "githubdocs" | 
 |  | 
 | // DocWatcher returns the event watcher with name "githubdocs". | 
 | // Implements [docs.Source.DocWatcher]. | 
 | func (c *Client) DocWatcher() *timed.Watcher[*Event] { | 
 | 	return c.EventWatcher(DocWatcherID) | 
 | } | 
 |  | 
 | // ToDocs converts an event containing an issue to an | 
 | // embeddable document. | 
 | // It returns (nil, false) if the event is not an issue. | 
 | // Implements [docs.Source.ToDocs]. | 
 | func (*Client) ToDocs(e *Event) (iter.Seq[*docs.Doc], bool) { | 
 | 	issue, ok := e.Typed.(*Issue) | 
 | 	if !ok { | 
 | 		return nil, false | 
 | 	} | 
 | 	return slices.Values([]*docs.Doc{ | 
 | 		{ | 
 | 			ID:    issue.DocID(), | 
 | 			Title: CleanTitle(issue.Title), | 
 | 			Text:  CleanBody(issue.Body), | 
 | 		}, | 
 | 	}), true | 
 | } |