package handlers import ( "fmt" "sync" "time" "github.com/paulmach/orb/geojson" "github.com/spf13/viper" ) type MultimodalRoutingHandler struct { Carpool *CarpoolRoutingHandler } func NewMultimodalRoutingHandler(cfg *viper.Viper) (*MultimodalRoutingHandler, error) { carpoolHandler, err := NewCarpoolRoutingHandler(cfg.Sub("carpool")) if err != nil { return nil, fmt.Errorf("could not initialize carpool handler : %w", err) } return &MultimodalRoutingHandler{ Carpool: carpoolHandler, }, nil } func (h *MultimodalRoutingHandler) Search(departure geojson.Feature, destination geojson.Feature, departureDate time.Time) ([]*geojson.FeatureCollection, error) { ch := make(chan *geojson.FeatureCollection) journeys := []*geojson.FeatureCollection{} var wg sync.WaitGroup // Carpool go h.Carpool.Search(ch, departure, destination, departureDate) wg.Add(1) go func() { defer wg.Done() for journey := range ch { journeys = append(journeys, journey) } }() wg.Wait() return journeys, nil }