All Projects → hexdigest → Gowrap

hexdigest / Gowrap

Licence: mit
GoWrap is a command line tool for generating decorators for Go interfaces

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Gowrap

Goreuse
Generic Code for Go
Stars: ✭ 93 (-79.96%)
Mutual labels:  golang-tools, code-generation
Deal
Design by contract for Python with static checker and tests' generation.
Stars: ✭ 164 (-64.66%)
Mutual labels:  decorators, interface
Typegql
Create GraphQL schema with TypeScript classes.
Stars: ✭ 415 (-10.56%)
Mutual labels:  decorators
Sppermissions
Ask permissions with ready-use interface. You can check status permission and if it has been requested before. Support SwiftUI.
Stars: ✭ 4,701 (+913.15%)
Mutual labels:  interface
Codemaker
A idea-plugin for Java/Scala, support custom code template.
Stars: ✭ 440 (-5.17%)
Mutual labels:  code-generation
Promptui
Interactive prompt for command-line applications
Stars: ✭ 4,621 (+895.91%)
Mutual labels:  interface
Goa
Design-based APIs and microservices in Go
Stars: ✭ 4,493 (+868.32%)
Mutual labels:  code-generation
Docs
Prometheus documentation: content and static site generator
Stars: ✭ 411 (-11.42%)
Mutual labels:  prometheus
Wizzy
Manage & automate Grafana with easy wizzy
Stars: ✭ 461 (-0.65%)
Mutual labels:  prometheus
Open Stage Control
Libre and modular OSC / MIDI controller
Stars: ✭ 436 (-6.03%)
Mutual labels:  interface
Cluster Monitoring
Cluster monitoring stack for clusters based on Prometheus Operator
Stars: ✭ 453 (-2.37%)
Mutual labels:  prometheus
Scirius
Scirius is a web application for Suricata ruleset management.
Stars: ✭ 435 (-6.25%)
Mutual labels:  interface
Typescript Ioc
A Lightweight annotation-based dependency injection container for typescript.
Stars: ✭ 427 (-7.97%)
Mutual labels:  decorators
Curlconverter
convert curl commands to Python, JavaScript, Go, PHP, R, Dart, Java, MATLAB, Rust, Elixir and more
Stars: ✭ 4,908 (+957.76%)
Mutual labels:  code-generation
Gnorm
A database-first code generator for any language
Stars: ✭ 415 (-10.56%)
Mutual labels:  code-generation
Typescript Rest
This is a lightweight annotation-based expressjs extension for typescript.
Stars: ✭ 458 (-1.29%)
Mutual labels:  decorators
Procfs
procfs provides functions to retrieve system, kernel and process metrics from the pseudo-filesystem proc.
Stars: ✭ 414 (-10.78%)
Mutual labels:  prometheus
Pinocchio
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Stars: ✭ 432 (-6.9%)
Mutual labels:  code-generation
Aspect.js
JavaScript library for aspect-oriented programming using modern syntax.
Stars: ✭ 443 (-4.53%)
Mutual labels:  decorators
Prometheus Cpp
Prometheus Client Library for Modern C++
Stars: ✭ 463 (-0.22%)
Mutual labels:  prometheus

GoWrap

License Build Status Coverage Status Go Report Card GoDoc Awesome Release

GoWrap is a command line tool that generates decorators for Go interface types using simple templates. With GoWrap you can easily add metrics, tracing, fallbacks, pools, and many other features into your existing code in a few seconds.

Demo

demo

Installation

go get -u github.com/hexdigest/gowrap/cmd/gowrap

Usage of gowrap

Usage: gowrap gen -p package -i interfaceName -t template -o output_file.go
  -g	don't put //go:generate instruction into the generated code
  -i string
    	the source interface name, i.e. "Reader"
  -o string
    	the output file name
  -p string
    	the source package import path, i.e. "io", "github.com/hexdigest/gowrap" or
    	a relative import path like "./generator"
  -t template
    	the template to use, it can be an HTTPS URL a local file or a
    	reference to one of the templates in the gowrap repository
  -v value
    	a key-value pair to parametrize the template,
    	arguments without an equal sign are treated as a bool values,
    	i.e. -v DecoratorName=MyDecorator -v disableChecks

This will generate an implementation of the io.Reader interface wrapped with prometheus metrics

  $ gowrap gen -p io -i Reader -t prometheus -o reader_with_metrics.go

This will generate a fallback decorator for the Connector interface that can be found in the ./connector subpackage:

  $ gowrap gen -p ./connector -i Connector -t fallback -o ./connector/with_metrics.go

Run gowrap help for more options

Hosted templates

When you specify a template with the "-t" flag, gowrap will first search for and use the local file with this name. If the file is not found, gowrap will look for the template here and use it if found.

List of available templates:

  • circuitbreaker stops executing methods of the wrapped interface after the specified number of consecutive errors and resumes execution after the specified delay
  • fallback takes several implementations of the source interface and concurrently runs each implementation if the previous attempt didn't return the result in a specified period of time, it returns the first non-error result
  • log instruments the source interface with logging using standard logger from the "log" package
  • logrus instruments the source interface with logging using popular sirupsen/logrus logger
  • opentracing instruments the source interface with opentracing spans
  • prometheus instruments the source interface with prometheus metrics
  • ratelimit instruments the source interface with RPS limit and concurrent calls limit
  • retry instruments the source interface with retries
  • robinpool puts several implementations of the source interface to the slice and for every method call it picks one implementation from the slice using the Round-robin algorithm
  • syncpool puts several implementations of the source interface to the sync.Pool and for every method call it gets one implementation from the pool and puts it back once finished
  • timeout instruments each method that accepts context with configurable timeout
  • validate runs func Validate() error method on each argument if it's present
  • twirp_error inject request data into twirp.Error as metadata
  • twirp_validate runs func Validate() error method on each argument if it's present and wraps returned error with twirp.Malformed error
  • grpc_validate runs func Validate() error method on each argument if it's present and returns InvalidArgument error in case when validation failed

By default GoWrap places the //go:generate instruction into the generated code. This allows you to regenerate decorators' code just by typing go generate ./... when you change the source interface type declaration. However if you used a remote template, the //go:generate instruction will contain the HTTPS URL of the template and therefore you will need to have internet connection in order to regenerate decorators. In order to avoid this, you can copy templates from the GoWrap repository to local files and add them to your version control system:

$ gowrap template copy fallback templates/fallback

The above command will fetch the fallback template and copy it to the templates/fallback local file. After template is copied, you can generate decorators using this local template:

$ gowrap gen -p io -i Reader -t templates/fallback reader_with_fallback.go

Custom templates

You can always write your own template that will provide the desired functionality to your interfaces. If you think that your template might be useful to others, please consider adding it to our template repository.

The structure of information passed to templates is documented with the TemplateInputs struct.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].