github.com/goravel/framework@v1.13.9/route/route.go (about)

     1  package route
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/gookit/color"
     7  
     8  	"github.com/goravel/framework/contracts/config"
     9  	"github.com/goravel/framework/contracts/route"
    10  )
    11  
    12  type Driver string
    13  
    14  type Route struct {
    15  	route.Route
    16  	config config.Config
    17  }
    18  
    19  func NewRoute(config config.Config) *Route {
    20  	defaultDriver := config.GetString("http.default")
    21  	if defaultDriver == "" {
    22  		color.Redln("[http] please set default driver")
    23  
    24  		return nil
    25  	}
    26  
    27  	driver, err := NewDriver(config, defaultDriver)
    28  	if err != nil {
    29  		color.Redf("[http] %s\n", err)
    30  
    31  		return nil
    32  	}
    33  
    34  	return &Route{
    35  		Route:  driver,
    36  		config: config,
    37  	}
    38  }
    39  
    40  func NewDriver(config config.Config, driver string) (route.Route, error) {
    41  	engine, ok := config.Get("http.drivers." + driver + ".route").(route.Route)
    42  	if ok {
    43  		return engine, nil
    44  	}
    45  
    46  	engineCallback, ok := config.Get("http.drivers." + driver + ".route").(func() (route.Route, error))
    47  	if ok {
    48  		return engineCallback()
    49  	}
    50  
    51  	return nil, fmt.Errorf("init route driver fail: route must be implement route.Route or func() (route.Route, error)")
    52  }