github.com/NYtimes/gizmo (go): Package gizmo is a toolkit that provides packages to put together server and pubsub daemons with the following features:  ## The `config` packages  The `config` package contains a handful of useful functions to load to configuration structs from JSON files, JSON blobs in Consul k/v or environment variables.  The subpackages contain structs meant for managing common configuration options and credentials. There are currently configs for:  The package also has a generic `Config` type in the `config/combined` subpackage that contains all of the above types. It's meant to be a 'catch all' convenience struct that many applications should be able to use. The `server` package  This package is the bulk of the toolkit and relies on `server.Config` for any managing `Server` implementations. A server must implement the following interface:  The package offers 2 server implementations:  `SimpleServer`, which is capable of handling basic HTTP and JSON requests via 3 of the available `Service` implementations: `SimpleService`, `JSONService`, `ContextService`, `MixedService` and `MixedContextService`. A service and these implenetations will be defined below.  `RPCServer`, which is capable of serving a gRPC server on one port and JSON endpoints on another. This kind of server can only handle the `RPCService` implementation.  The `Service` interface is minimal to allow for maximum flexibility:  The 3 service types that are accepted and hostable on the `SimpleServer`:  Where `JSONEndpoint`, `JSONContextEndpoint`, `ContextHandler` and `ContextHandlerFunc` are defined as:  Also, the one service type that works with an `RPCServer`:  The `Middleware(..)` functions offer each service a 'hook' to wrap each of its endpoints. This may be handy for adding additional headers or context to the request. This is also the point where other, third-party middleware could be easily be plugged in (ie. oauth, tracing, metrics, logging, etc.)  This package contains two generic interfaces for publishing data to queues and subscribing and consuming data from those queues.  Where a `SubscriberMessage` is an interface that gives implementations a hook for acknowledging/delete messages. Take a look at the docs for each implementation in `pubsub` to see how they behave.  There are currently 3 implementations of each type of `pubsub` interfaces:  For pubsub via Amazon's SNS/SQS, you can use the `pubsub/aws` package.  For pubsub via Google's Pubsub, you can use the `pubsub/gcp` package.  For pubsub via Kafka topics, you can use the `pubsub/kafka` package.  For publishing via HTTP, you can use the `pubsub/http` package.  The `pubsub/pubsubtest` package  This package contains 'test' implementations of the `pubsub.Publisher` and `pubsub.Subscriber` interfaces that will allow developers to easily mock out and test their `pubsub` implementations:  This package contains a handful of very useful functions for parsing types from request queries and payloads.  For examples of how to use the gizmo `server` and `pubsub` packages, take a look at the 'examples' subdirectory.  The Gizmo logo was based on the Go mascot designed by Renée French and copyrighted under the Creative Commons Attribution 3.0 license.
Keywords: gizmo|go|google-pubsub|googlecloud|http-server|kafka|pubsub|sns|sqs