Files
godoxy-yusing/internal/types/routes.go
yusing 6da7227f9b refactor(errs): migrate from gperr.Error to standard Go error interface
This is a large-scale refactoring across the codebase that replaces the custom
`gperr.Error` type with Go's standard `error` interface. The changes include:

- Replacing `gperr.Error` return types with `error` in function signatures
- Using `errors.New()` and `fmt.Errorf()` instead of `gperr.New()` and `gperr.Errorf()`
- Using `%w` format verb for error wrapping instead of `.With()` method
- Replacing `gperr.Subject()` calls with `gperr.PrependSubject()`
- Converting error logging from `gperr.Log*()` functions to zerolog's `.Err().Msg()` pattern
- Update NewLogger to handle multiline error message
- Updating `goutils` submodule to latest commit

This refactoring aligns with Go idioms and removes the dependency on
custom error handling abstractions in favor of standard library patterns.
2026-02-08 12:07:36 +08:00

81 lines
1.8 KiB
Go

package types
import (
"net/http"
"github.com/rs/zerolog"
"github.com/yusing/godoxy/internal/agentpool"
"github.com/yusing/godoxy/internal/homepage"
nettypes "github.com/yusing/godoxy/internal/net/types"
provider "github.com/yusing/godoxy/internal/route/provider/types"
"github.com/yusing/goutils/http/reverseproxy"
"github.com/yusing/goutils/pool"
"github.com/yusing/goutils/task"
)
type (
Route interface {
task.TaskStarter
task.TaskFinisher
pool.Object
zerolog.LogObjectMarshaler
ProviderName() string
GetProvider() RouteProvider
ListenURL() *nettypes.URL
TargetURL() *nettypes.URL
HealthMonitor() HealthMonitor
SetHealthMonitor(m HealthMonitor)
References() []string
ShouldExclude() bool
Started() <-chan struct{}
IdlewatcherConfig() *IdlewatcherConfig
HealthCheckConfig() HealthCheckConfig
LoadBalanceConfig() *LoadBalancerConfig
HomepageItem() homepage.Item
DisplayName() string
ContainerInfo() *Container
GetAgent() *agentpool.Agent
IsDocker() bool
IsAgent() bool
UseLoadBalance() bool
UseIdleWatcher() bool
UseHealthCheck() bool
UseAccessLog() bool
}
HTTPRoute interface {
Route
http.Handler
}
ReverseProxyRoute interface {
HTTPRoute
ReverseProxy() *reverseproxy.ReverseProxy
}
FileServerRoute interface {
HTTPRoute
RootPath() string
}
StreamRoute interface {
Route
nettypes.Stream
Stream() nettypes.Stream
}
RouteProvider interface {
Start(parent task.Parent) error
LoadRoutes() error
GetRoute(alias string) (r Route, ok bool)
// should be used like `for _, r := range p.IterRoutes` (no braces), not calling it directly
IterRoutes(yield func(alias string, r Route) bool)
NumRoutes() int
FindService(project, service string) (r Route, ok bool)
Statistics() ProviderStats
GetType() provider.Type
ShortName() string
String() string
}
)