form - examples_test.go
1 package form_test
2
3 import (
4 "encoding/json"
5 "fmt"
6 "net/http"
7 "net/http/httptest"
8 "net/url"
9 "strings"
10
11 "vimagination.zapto.org/form"
12 )
13
14 func Example() {
15 type Form struct {
16 Username string `form:"user,required,regex=^[a-zA-Z0-9_]{3,16}$"`
17 Age int `form:"age,required,min=18,max=120"`
18 Active bool `form:"isActive"`
19 Tags []string `form:"tags,regex=^[a-z]+$"`
20 IQ *float64 `form:"iq,min=0,max=200"`
21 Token string `form:"token,post,required"`
22 }
23
24 handler := func(w http.ResponseWriter, r *http.Request) {
25 var f Form
26
27 if err := form.Process(r, &f); err != nil {
28 http.Error(w, err.Error(), http.StatusBadRequest)
29
30 return
31 }
32
33 json.NewEncoder(w).Encode(f)
34 }
35
36 data := url.Values{}
37 data.Set("user", "exampleUser")
38 data.Set("age", "30")
39 data.Set("isActive", "true")
40 data.Add("tags", "example")
41 data.Add("tags", "tag")
42 data.Set("iq", "123.45")
43 data.Set("token", "my_token")
44
45 req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(data.Encode()))
46
47 req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
48
49 w := httptest.NewRecorder()
50
51 handler(w, req)
52
53 fmt.Println(w.Body.String())
54
55 // Output: {"Username":"exampleUser","Age":30,"Active":true,"Tags":["example","tag"],"IQ":123.45,"Token":"my_token"}
56 }
57