internal/mcp: iterators return pointers
Iterators return pointers instead of values, to be consistent. Move tests out of example file. Factor out iterator tests. Change-Id: Icb14edf99d738de9d9dc08c1169057cb3dc5894b Reviewed-on: https://go-review.googlesource.com/c/tools/+/680295 Reviewed-by: Robert Findley <rfindley@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Sam Thanawalla <samthanawalla@google.com>
This commit is contained in:
parent
f211cc8e4a
commit
77fe91dca0
1 changed files with 154 additions and 139 deletions
|
|
@ -336,9 +336,9 @@ func (c *Client) callLoggingHandler(ctx context.Context, cs *ClientSession, para
|
|||
|
||||
// Tools provides an iterator for all tools available on the server,
|
||||
// automatically fetching pages and managing cursors.
|
||||
// The `params` argument can set the initial cursor.
|
||||
// The params argument can set the initial cursor.
|
||||
// Iteration stops at the first encountered error, which will be yielded.
|
||||
func (cs *ClientSession) Tools(ctx context.Context, params *ListToolsParams) iter.Seq2[Tool, error] {
|
||||
func (cs *ClientSession) Tools(ctx context.Context, params *ListToolsParams) iter.Seq2[*Tool, error] {
|
||||
if params == nil {
|
||||
params = &ListToolsParams{}
|
||||
}
|
||||
|
|
@ -349,9 +349,9 @@ func (cs *ClientSession) Tools(ctx context.Context, params *ListToolsParams) ite
|
|||
|
||||
// Resources provides an iterator for all resources available on the server,
|
||||
// automatically fetching pages and managing cursors.
|
||||
// The `params` argument can set the initial cursor.
|
||||
// The params argument can set the initial cursor.
|
||||
// Iteration stops at the first encountered error, which will be yielded.
|
||||
func (cs *ClientSession) Resources(ctx context.Context, params *ListResourcesParams) iter.Seq2[Resource, error] {
|
||||
func (cs *ClientSession) Resources(ctx context.Context, params *ListResourcesParams) iter.Seq2[*Resource, error] {
|
||||
if params == nil {
|
||||
params = &ListResourcesParams{}
|
||||
}
|
||||
|
|
@ -364,7 +364,7 @@ func (cs *ClientSession) Resources(ctx context.Context, params *ListResourcesPar
|
|||
// automatically fetching pages and managing cursors.
|
||||
// The `params` argument can set the initial cursor.
|
||||
// Iteration stops at the first encountered error, which will be yielded.
|
||||
func (cs *ClientSession) ResourceTemplates(ctx context.Context, params *ListResourceTemplatesParams) iter.Seq2[ResourceTemplate, error] {
|
||||
func (cs *ClientSession) ResourceTemplates(ctx context.Context, params *ListResourceTemplatesParams) iter.Seq2[*ResourceTemplate, error] {
|
||||
if params == nil {
|
||||
params = &ListResourceTemplatesParams{}
|
||||
}
|
||||
|
|
@ -375,9 +375,9 @@ func (cs *ClientSession) ResourceTemplates(ctx context.Context, params *ListReso
|
|||
|
||||
// Prompts provides an iterator for all prompts available on the server,
|
||||
// automatically fetching pages and managing cursors.
|
||||
// The `params` argument can set the initial cursor.
|
||||
// The params argument can set the initial cursor.
|
||||
// Iteration stops at the first encountered error, which will be yielded.
|
||||
func (cs *ClientSession) Prompts(ctx context.Context, params *ListPromptsParams) iter.Seq2[Prompt, error] {
|
||||
func (cs *ClientSession) Prompts(ctx context.Context, params *ListPromptsParams) iter.Seq2[*Prompt, error] {
|
||||
if params == nil {
|
||||
params = &ListPromptsParams{}
|
||||
}
|
||||
|
|
@ -387,17 +387,16 @@ func (cs *ClientSession) Prompts(ctx context.Context, params *ListPromptsParams)
|
|||
}
|
||||
|
||||
// paginate is a generic helper function to provide a paginated iterator.
|
||||
func paginate[P listParams, R listResult[T], T any](ctx context.Context, params P, listFunc func(context.Context, P) (R, error), items func(R) []*T) iter.Seq2[T, error] {
|
||||
return func(yield func(T, error) bool) {
|
||||
func paginate[P listParams, R listResult[T], T any](ctx context.Context, params P, listFunc func(context.Context, P) (R, error), items func(R) []*T) iter.Seq2[*T, error] {
|
||||
return func(yield func(*T, error) bool) {
|
||||
for {
|
||||
res, err := listFunc(ctx, params)
|
||||
if err != nil {
|
||||
var zero T
|
||||
yield(zero, err)
|
||||
yield(nil, err)
|
||||
return
|
||||
}
|
||||
for _, r := range items(res) {
|
||||
if !yield(*r, nil) {
|
||||
if !yield(r, nil) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue