Skip to content

akmsg/goimpl

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goimpl Build Status

Forked from goimpl to add an improvement for my personal project, in which I needed to plugin this to go generate for linking the generated stub to their implementations.

A tool to generate stub implementation of an interface.

The output is printed to stdout, errors (if any) — to stderr.

Installation

go get github.com/anandmishra01/goimpl/cmd/goimpl

In a nutshell

goimpl io.ReadWriteCloser "*pkg.impl"

Would print

package pkg

type impl struct{}

func (i *impl) Close() (err error) {
    return close()
}

func (i *impl) Read(u []uint8) (i1 int, err error) {
    return read(u)
}

func (i *impl) Write(u []uint8) (i1 int, err error) {
    return write(u)
}

Let's say you already have this (the Writer is almost http.ResponseWriter, but not quite):

package w12

import "net/http"

type Writer struct{}

func (w Writer) Write(float64) (error, *int) {
    return nil, nil
}

func (Writer) Header() http.Header {
    return nil
}

Running

goimpl -existing http.ResponseWriter "w12.Writer"

Gives

package w12

type Writer struct{}

// inputs[0]: had `float64` want `[]uint8`; outputs[0]: had `error` want `int`; outputs[1]: had `*int` want `error`
func (w Writer) Write(u []uint8) (i int, err error) {
	return
}

func (w Writer) WriteHeader(i int) {
	return
}

Here only the missing methods and the methods with wrong signature are generates.

Usage

Usage: goimpl [flags] [import1] [import2...] package.interfaceTypeName [(*|&)][package2.]typeName
This would generate empty implementation of the interfaceTypeName.
  -existing=false: Would trigger generation of missing method for the existing type(struct). Note, that if you want to use a pointer receiver prefix the type with '&'.
  -goimports=true: Run goimports on the generated code. The generated code might not compile if this is not set.
  -named=true: Generate named return values. The genrated code might not compile if this is not set.

Alternative(s)

impl

  • impl is parsing AST, goimpl is using reflection.
  • impl is much faster and has better error reporting.
  • goimpl generates complete code that (usually) compiles (package/ imports).
  • goimpl can generate a minimum update for the exising implementation.
  • goimpl can work with ambiguous package names.

About

A tool to generate stub implementation of an interface (go).

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%