github.com/packtpublishing/learning-functional-programming-in-go@v0.0.0-20230130084745-8b849f6d58c4/Chapter03/hof/main.go (about)

     1  package main
     2  
     3  import (
     4  	. "hof"
     5  	"log"
     6  	"os"
     7  	"github.com/julienschmidt/httprouter"
     8  	"net/http"
     9  )
    10  
    11  func init() {
    12  	log.SetFlags(log.Lshortfile | log.Ldate)
    13  	log.SetOutput(os.Stdout)
    14  }
    15  
    16  
    17  func main() {
    18  
    19  	if os.Getenv("RUN_HTTP_SERVER") == "TRUE" {
    20  		router := httprouter.New()
    21  		router.GET("/cars", CarsIndexHandler)
    22  		router.GET("/cars/:id", CarHandler)
    23  		log.Println("Listening on port 8000")
    24  		log.Fatal(http.ListenAndServe(":8000", router))
    25  	} else {
    26  
    27  		cars := LoadCars()
    28  
    29  		//PrintCars("ByMake - Honda", cars.Filter(ByMake("Honda")))
    30  		//
    31  		//PrintCars("Numeric", cars.Filter(ByHasNumber()))
    32  		//
    33  		//PrintCars("Foreign, Numeric, Toyota",
    34  		//	cars.Filter(ByForeign()).
    35  		//		Filter(ByHasNumber()).
    36  		//		Filter(ByMake("Toyota")))
    37  		//
    38  		//PrintCars("Domestic, Numeric, GM",
    39  		//	cars.Filter(ByDomestic()).
    40  		//		Filter(ByHasNumber()).
    41  		//		Filter(ByMake("GM")))
    42  		//
    43  		//moreCars := LoadMoreCars()
    44  		//
    45  		//PrintCars("More Cars, Domestic, Numeric, GM",
    46  		//	cars.AddCars(moreCars).
    47  		//		Filter(ByDomestic()).
    48  		//		Filter(ByHasNumber()).
    49  		//		Filter(ByMake("GM")))
    50  		//
    51  		//PrintCars("More Cars, Domestic, Numeric, Ford",
    52  		//	cars.AddCars(moreCars).
    53  		//		Filter(ByDomestic()).
    54  		//		Filter(ByHasNumber()).
    55  		//		Filter(ByMake("Ford")))
    56  		//
    57  		//
    58  		//PrintCars("Numeric, Foreign, Map Upgraded",
    59  		//	cars.Filter(ByHasNumber()).
    60  		//		Filter(ByForeign()).
    61  		//		Map(Upgrade()))
    62  		//
    63  		//PrintCars("Filter Honda, Reduce JSON",
    64  		//	cars.Filter(ByMake("Honda")).
    65  		//		Reduce(JsonReducer(cars), Collection{}))
    66  		//
    67  		//PrintCars("Reduce, Honda, JSON",
    68  		//	cars.Reduce(MakeReducer("Honda", cars), Collection{}).
    69  		//		Reduce(JsonReducer(cars), Collection{}))
    70  		//
    71  		//PrintCars2("Reduce - Lexus",
    72  		//	cars.Filter(ByMake("Lexus")).
    73  		//		Reduce2(CarTypeReducer(cars), []CarType{}))
    74  		//
    75  		//PrintCars("ByModel - Accord up/downgraded",
    76  		//	cars.Filter(ByModel("Accord")).
    77  		//		Map(Upgrade()).
    78  		//		Map(Downgrade()))
    79  
    80  		PrintCars("GenerateCars(1, 3)",
    81  			cars.GenerateCars(1, 3))
    82  
    83  		PrintCars("GenerateCars(1, 14), Domestic, Numeric, JSON",
    84  			cars.GenerateCars(1, 14).
    85  				Filter(ByDomestic()).
    86  				Map(Upgrade()).
    87  				Filter(ByHasNumber()).
    88  				Reduce(JsonReducer(cars), Collection{}))
    89  
    90  	}
    91  }
    92