package controllers import ( "addrss/pkg/postal" "addrss/pkg/router" "golang.org/x/text/cases" "golang.org/x/text/language" ) type Api struct{} func (a Api) AddRoutes() { router.AddGet("/suggestions", suggestions).Anonymous() router.AddGet("/parse", parse).Anonymous() } func suggestions(ctx *router.Context) { address, err := ctx.Request.Query("address") if err != nil { ctx.Response.BadRequest(err) } var parsedSlice []map[string]any expansions := postal.ExpandAddress(address.(string)) for i := 0; i < len(expansions); i++ { parsed := parseAddress(expansions[i]) parsedSlice = append(parsedSlice, parsed) } ctx.Response.OK(parsedSlice) } func parse(ctx *router.Context) { address, err := ctx.Request.Query("address") if err != nil { ctx.Response.BadRequest(err) } parsed := parseAddress(address.(string)) ctx.Response.OK(parsed) } func parseAddress(address string) map[string]any { pa := postal.ParseAddress(address) addr := map[string]any{} caser := cases.Caser{} for i := 0; i < len(pa); i++ { if pa[i].Label == "state" { caser = cases.Upper(language.AmericanEnglish) } else { caser = cases.Title(language.AmericanEnglish) } addr[pa[i].Label] = caser.String(pa[i].Value) } return addr }