100 lines
2 KiB
Go
100 lines
2 KiB
Go
// / Generate pkgs/translators/vehicles_map.gen.go
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"regexp"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type VehicleResponse struct {
|
|
VehicleList []Vehicle `json:"vehicle_list"`
|
|
}
|
|
|
|
type Vehicle struct {
|
|
VehicleID string `json:"vehicle_id"`
|
|
Name LocaleString `json:"name"`
|
|
}
|
|
|
|
type LocaleString struct {
|
|
En string `json:"en"`
|
|
}
|
|
|
|
func fetchCensusVehicles() (VehicleResponse, error) {
|
|
var vehicleResponse VehicleResponse
|
|
|
|
client := http.Client{
|
|
Timeout: time.Second * 30,
|
|
}
|
|
|
|
resp, err := client.Get("https://census.lithafalcon.cc/get/ps2/vehicle")
|
|
if err != nil {
|
|
return vehicleResponse, fmt.Errorf("census request failed: %w", err)
|
|
}
|
|
|
|
err = json.NewDecoder(resp.Body).Decode(&vehicleResponse)
|
|
if err != nil {
|
|
return vehicleResponse, fmt.Errorf("census response decode failed: %w", err)
|
|
}
|
|
|
|
return vehicleResponse, nil
|
|
}
|
|
|
|
func generateRegexp(vehicles []string) *regexp.Regexp {
|
|
pipes := strings.Join(vehicles, "|")
|
|
expr := fmt.Sprintf("(%s)", pipes)
|
|
|
|
log.Println(expr)
|
|
|
|
return regexp.MustCompile(expr)
|
|
}
|
|
|
|
func main() {
|
|
filterRegexp := generateRegexp(AllVehicles)
|
|
|
|
censusVehicles, err := fetchCensusVehicles()
|
|
if err != nil {
|
|
log.Fatalln("fetch census failed", err)
|
|
}
|
|
|
|
vehicles := []VehicleItem{}
|
|
for _, vehicle := range censusVehicles.VehicleList {
|
|
if vehicle.Name.En == "" || strings.Contains(vehicle.Name.En, "Turret") {
|
|
continue
|
|
}
|
|
|
|
match := filterRegexp.FindString(strings.ToLower(vehicle.Name.En))
|
|
if match == "" {
|
|
continue
|
|
}
|
|
|
|
switch match {
|
|
case "wasp":
|
|
match = "valkyrie"
|
|
case "deliverer":
|
|
match = "ant"
|
|
case "lodestar":
|
|
match = "galaxy"
|
|
}
|
|
|
|
enumName := fmt.Sprintf("%s%s", strings.ToUpper(match[0:1]), match[1:])
|
|
|
|
vehicles = append(vehicles, VehicleItem{
|
|
VehicleID: vehicle.VehicleID,
|
|
VehicleEnumName: enumName,
|
|
})
|
|
}
|
|
|
|
output, err := renderTemplate(TemplateData{
|
|
Vehicles: vehicles,
|
|
})
|
|
if err != nil {
|
|
log.Fatalln("render failed", err)
|
|
}
|
|
|
|
fmt.Println(output)
|
|
}
|