sub2api/backend/internal/service/http_upstream_profile.go
2026-05-26 13:57:59 +08:00

43 lines
1.1 KiB
Go

package service
import "context"
// HTTPUpstreamProfile marks HTTP upstream requests that need provider-specific
// transport policy.
type HTTPUpstreamProfile string
const (
HTTPUpstreamProfileDefault HTTPUpstreamProfile = ""
HTTPUpstreamProfileOpenAI HTTPUpstreamProfile = "openai"
)
type httpUpstreamProfileContextKey struct{}
// WithHTTPUpstreamProfile injects an upstream transport profile into ctx.
func WithHTTPUpstreamProfile(ctx context.Context, profile HTTPUpstreamProfile) context.Context {
if ctx == nil {
ctx = context.Background()
}
if profile == HTTPUpstreamProfileDefault {
return ctx
}
return context.WithValue(ctx, httpUpstreamProfileContextKey{}, profile)
}
// HTTPUpstreamProfileFromContext resolves the upstream transport profile from ctx.
func HTTPUpstreamProfileFromContext(ctx context.Context) HTTPUpstreamProfile {
if ctx == nil {
return HTTPUpstreamProfileDefault
}
profile, ok := ctx.Value(httpUpstreamProfileContextKey{}).(HTTPUpstreamProfile)
if !ok {
return HTTPUpstreamProfileDefault
}
switch profile {
case HTTPUpstreamProfileOpenAI:
return profile
default:
return HTTPUpstreamProfileDefault
}
}