github.com/vcilabs/webrpc@v0.5.2-0.20201116131534-162e27b1b33b/_examples/golang-basics/main.go (about) 1 //go:generate ../../bin/webrpc-gen -schema=example.ridl -target=go -pkg=main -server -client -out=./example.gen.go 2 package main 3 4 import ( 5 "context" 6 "errors" 7 "log" 8 "net/http" 9 10 "github.com/go-chi/chi" 11 "github.com/go-chi/chi/middleware" 12 ) 13 14 func main() { 15 err := startServer() 16 if err != nil { 17 log.Fatal(err) 18 } 19 } 20 21 func startServer() error { 22 r := chi.NewRouter() 23 r.Use(middleware.RequestID) 24 r.Use(middleware.Logger) 25 r.Use(middleware.Recoverer) 26 27 r.Get("/", func(w http.ResponseWriter, r *http.Request) { 28 w.Write([]byte(".")) 29 }) 30 31 webrpcHandler := NewExampleServiceServer(&ExampleServiceRPC{}) 32 r.Handle("/*", webrpcHandler) 33 34 return http.ListenAndServe(":4242", r) 35 } 36 37 type ExampleServiceRPC struct { 38 } 39 40 func (s *ExampleServiceRPC) Ping(ctx context.Context) error { 41 return nil 42 } 43 44 func (s *ExampleServiceRPC) Status(ctx context.Context) (bool, error) { 45 return true, nil 46 } 47 48 func (s *ExampleServiceRPC) Version(ctx context.Context) (*Version, error) { 49 return &Version{ 50 WebrpcVersion: WebRPCVersion(), 51 SchemaVersion: WebRPCSchemaVersion(), 52 SchemaHash: WebRPCSchemaHash(), 53 }, nil 54 } 55 56 func (s *ExampleServiceRPC) GetUser(ctx context.Context, header map[string]string, userID uint64) (uint32, *User, error) { 57 if userID == 911 { 58 return 0, nil, WrapError(ErrInternal, errors.New("bad"), "app msg here") 59 // return 0, nil, ErrorNotFound("unknown userID %d", 911) 60 // return 0, nil, Errorf(ErrNotFound, "unknown userID %d", 911) 61 // return 0, nil, WrapError(ErrNotFound, nil, "unknown userID %d", 911) 62 } 63 64 return 200, &User{ 65 ID: userID, 66 Username: "hihi", 67 }, nil 68 } 69 70 func (s *ExampleServiceRPC) FindUser(ctx context.Context, f *SearchFilter) (string, *User, error) { 71 name := f.Q 72 return f.Q, &User{ 73 ID: 123, Username: name, 74 }, nil 75 }