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  }