internal/mcp/internal/util: add Wrapf

Add Wrapf, a function that helps with error wrapping.

Change-Id: I102695f75e4d217e09f828f4723cbfcbbe83f887
Reviewed-on: https://go-review.googlesource.com/c/tools/+/679177
Reviewed-by: Robert Findley <rfindley@google.com>
Reviewed-by: Sam Thanawalla <samthanawalla@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Jonathan Amsterdam 2025-06-09 07:11:18 -04:00
commit d9a7859c3b
3 changed files with 17 additions and 20 deletions

View file

@ -26,6 +26,8 @@ import (
"reflect"
"strconv"
"strings"
"github.com/modelcontextprotocol/go-sdk/internal/util"
)
var (
@ -69,7 +71,7 @@ func parseJSONPointer(ptr string) (segments []string, err error) {
// This implementation suffices for JSON Schema: pointers are applied only to Schemas,
// and refer only to Schemas.
func dereferenceJSONPointer(s *Schema, sptr string) (_ *Schema, err error) {
defer wrapf(&err, "JSON Pointer %q", sptr)
defer util.Wrapf(&err, "JSON Pointer %q", sptr)
segments, err := parseJSONPointer(sptr)
if err != nil {

View file

@ -282,10 +282,3 @@ func assert(cond bool, msg string) {
panic("assertion failed: " + msg)
}
}
// wrapf wraps *errp with the given formatted message if *errp is not nil.
func wrapf(errp *error, format string, args ...any) {
if *errp != nil {
*errp = fmt.Errorf("%s: %w", fmt.Sprintf(format, args...), *errp)
}
}

View file

@ -73,7 +73,7 @@ type state struct {
// validate validates the reflected value of the instance.
func (st *state) validate(instance reflect.Value, schema *Schema, callerAnns *annotations) (err error) {
defer wrapf(&err, "validating %s", schema)
defer util.Wrapf(&err, "validating %s", schema)
// Maintain a stack for dynamic schema resolution.
st.stack = append(st.stack, schema) // push
@ -607,7 +607,7 @@ func (rs *Resolved) ApplyDefaults(instancep any) error {
// Leave this as a potentially recursive helper function, because we'll surely want
// to apply defaults on sub-schemas someday.
func (st *state) applyDefaults(instancep reflect.Value, schema *Schema) (err error) {
defer wrapf(&err, "applyDefaults: schema %s, instance %v", schema, instancep)
defer util.Wrapf(&err, "applyDefaults: schema %s, instance %v", schema, instancep)
instance := instancep.Elem()
if instance.Kind() == reflect.Map || instance.Kind() == reflect.Struct {