Skip to content

MottoStreaming/gcpconnect.go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Google Cloud Connect package

PkgGoDev

This package makes it easier to create a Connect server running in GCP environment.

We customize JSON marshaller to include unpopulated fields in the response.

Example:

package main

import (
	"context"
	"errors"
	"log/slog"
	"net/http"

	"buf.build/gen/go/bufbuild/eliza/connectrpc/go/buf/connect/demo/eliza/v1/elizav1connect"
	elizav1 "buf.build/gen/go/bufbuild/eliza/protocolbuffers/go/buf/connect/demo/eliza/v1"
	"connectrpc.com/connect"
	"github.com/MottoStreaming/ctxslog.go"
	"github.com/MottoStreaming/gcpconnect.go"
)

func main() {
	ctx := context.Background()
	logger := slog.Default()

	service := &mockService{}

	path, handler := elizav1connect.NewElizaServiceHandler(
		service,
		gcpconnect.GetHandlerOptions(logger)...,
	)

	srv, err := gcpconnect.NewServer(ctx, "localhost:8080", path, handler)
	if err != nil {
		logger.Error("failed to create server", "error", err)
	}

	logger.InfoContext(ctx, "server started",
		"addr", "localhost:8080",
	)

	err = srv.ListenAndServe()
	if err != nil && !errors.Is(err, http.ErrServerClosed) {
		logger.Error("failed to start server", "error", err)
	}
}

type mockService struct{}

func (mockService) Say(ctx context.Context, req *connect.Request[elizav1.SayRequest]) (*connect.Response[elizav1.SayResponse], error) {
	ctxslog.AddArgs(ctx, slog.Int("state", 5), "sentence", req.Msg.GetSentence())
	return connect.NewResponse(&elizav1.SayResponse{}), nil
}

func (mockService) Converse(ctx context.Context, c *connect.BidiStream[elizav1.ConverseRequest, elizav1.ConverseResponse]) error {
	// TODO implement me
	panic("implement me")
}

func (mockService) Introduce(ctx context.Context, req *connect.Request[elizav1.IntroduceRequest], c2 *connect.ServerStream[elizav1.IntroduceResponse]) error {
	ctxslog.AddArgs(ctx, slog.String("name", req.Msg.GetName()))
	panic("implement me")
}

About

This package makes it easier to create a Connect server running in GCP environment.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages