resolverForSharedResultObject returns a resolver that can instantiate the cached object's concrete type, rebuilding a dependency-aware schema from the result's call graph if the current resolver does not have the type. This is the fallback path for object reconstruction; the common path reuses the
(ctx context.Context, resolver TypeResolver, res *sharedResult, typeName string)
| 1608 | // Persisted-envelope decoding still uses this directly because there is no |
| 1609 | // in-memory value to derive a class from at decode time. |
| 1610 | func resolverForSharedResultObject(ctx context.Context, resolver TypeResolver, res *sharedResult, typeName string) (TypeResolver, error) { |
| 1611 | if resolver == nil || res == nil || typeName == "" { |
| 1612 | return resolver, nil |
| 1613 | } |
| 1614 | if _, ok := resolver.ObjectType(typeName); ok { |
| 1615 | return resolver, nil |
| 1616 | } |
| 1617 | srv, ok := resolver.(*Server) |
| 1618 | if !ok || srv.resultServerForCall == nil { |
| 1619 | return resolver, nil |
| 1620 | } |
| 1621 | resultCall := res.loadResultCall() |
| 1622 | if resultCall == nil { |
| 1623 | return resolver, nil |
| 1624 | } |
| 1625 | resolved, err := srv.resultServerForCall(ctx, resultCall) |
| 1626 | if err != nil { |
| 1627 | return nil, fmt.Errorf("resolve schema for result %d type %q: %w", res.id, typeName, err) |
| 1628 | } |
| 1629 | if resolved == nil { |
| 1630 | return resolver, nil |
| 1631 | } |
| 1632 | return resolved, nil |
| 1633 | } |
| 1634 | |
| 1635 | func wrapSharedResultWithResolver(ctx context.Context, res *sharedResult, hitCache bool, resolver TypeResolver) (AnyResult, error) { |
| 1636 | ret := Result[Typed]{ |
no test coverage detected