1package rest_test 2 3import ( 4 "bytes" 5 "fmt" 6 "net/http" 7 "net/http/httptest" 8 "sync/atomic" 9 "time" 10 11 "github.com/pascaldekloe/goe/rest" 12) 13 14func ExampleCRUDRepo_SetCreateFunc() { 15 type Data struct { 16 Version int64 `json:"version"` 17 Msg string `json:"msg"` 18 } 19 var v atomic.Value 20 v.Store(&Data{}) 21 22 repo := rest.NewCRUD("/", "/Version") 23 repo.SetCreateFunc(func(d *Data) (int64, error) { 24 d.Version = time.Now().UnixNano() 25 v.Store(d) 26 return 42, nil 27 }) 28 29 server := httptest.NewServer(repo) 30 defer server.Close() 31 32 res, err := http.Post(server.URL, "application/json", bytes.NewBufferString(`{"msg": "Hello World!"}`)) 33 if err != nil { 34 panic(err) 35 } 36 fmt.Printf("Got HTTP %s %s: %s\n", res.Status, res.Header.Get("Location"), v.Load().(*Data).Msg) 37 38 // Output: Got HTTP 201 Created /42: Hello World! 39} 40 41func ExampleCRUDRepo_SetReadFunc() { 42 type Data struct { 43 Version int64 `json:"version"` 44 Msg string `json:"msg"` 45 } 46 47 repo := rest.NewCRUD("/", "/Version") 48 repo.SetReadFunc(func(id, version int64) (*Data, error) { 49 if id != 42 { 50 return nil, rest.ErrNotFound 51 } 52 return &Data{1456260879956532222, "Hello World!"}, nil 53 }) 54 55 server := httptest.NewServer(repo) 56 defer server.Close() 57 58 req, err := http.NewRequest("GET", server.URL+"/42", nil) 59 if err != nil { 60 panic(err) 61 } 62 req.Header.Set("If-None-Match", `"1456260879956532222"`) 63 64 res, err := http.DefaultClient.Do(req) 65 if err != nil { 66 panic(err) 67 } 68 fmt.Printf("Got HTTP %s: %s\n", res.Status, res.Header.Get("Content-Location")) 69 70 // Output: Got HTTP 304 Not Modified: /42?v=1456260879956532222 71} 72