package server_test import ( "context" "fmt" "log" "github.com/creachadair/jrpc2" "github.com/creachadair/jrpc2/channel" "github.com/creachadair/jrpc2/handler" "github.com/creachadair/jrpc2/server" ) func ExampleNewLocal() { loc := server.NewLocal(handler.Map{ "Hello": handler.New(func(context.Context) (string, error) { return "Hello, world!", nil }), }, nil) defer loc.Close() var result string if err := loc.Client.CallResult(context.Background(), "Hello", nil, &result); err != nil { log.Fatalf("Call failed: %v", err) } fmt.Println(result) // Output: // Hello, world! } // Service is a trivial service for testing purposes. type Service struct { done chan struct{} } func (Service) Assigner() (jrpc2.Assigner, error) { fmt.Println("SERVICE STARTED") return handler.Map{"Hello": handler.New(func(ctx context.Context) error { fmt.Println("Hello human") return nil })}, nil } func (s Service) Finish(stat jrpc2.ServerStatus) { fmt.Printf("SERVICE FINISHED err=%v\n", stat.Err) close(s.done) } func ExampleNewSimple() { done := make(chan struct{}) cch, sch := channel.Direct() go server.NewSimple(Service{done}, nil).Run(sch) cli := jrpc2.NewClient(cch, nil) if _, err := cli.Call(context.Background(), "Hello", nil); err != nil { log.Fatalf("Call failed: %v", err) } cli.Close() <-done // Output: // SERVICE STARTED // Hello human // SERVICE FINISHED err= }