gotypeconverter 
gotypeconverter generates a function that converts two structurally different types.
Install
go get github.com/fuji8/gotypeconverter/cmd/type-converter
Usage
> type-converter
gotypeconverter: gotypeconverter generates a function that converts two different named types.
Usage: gotypeconverter [-flag] [package]
Flags:
-d string
destination struct
-o string
output file; if nil, output stdout
-s string
source struct
Examples
see testdata
Basic example
package basic
type basicSrc struct {
foo int
bar float64
x string
y string
}
type basicDst struct {
foo int
bar float32
x string
y bool
}
> type-converter -s basicSrc -d basicDst .
// Code generated by gotypeconverter; DO NOT EDIT.
package basic
func ConvertbasicSrcTobasicDst(src basicSrc) (dst basicDst) {
dst.foo = src.foo
dst.x = src.x
return
}
Normal example
package normal
type e struct {
e bool
m string
x int
members []uint8
}
type ug struct {
uaiueo uint8
gaaaa uint8
}
type normalSrc struct {
x struct {
A int
B bool
C string
D string
}
y int
z float64
m string
members []ug
}
type normalDst struct {
e
x string
y int
z float64
}
> type-converter -s normalSrc -d normalDst .
// Code generated by gotypeconverter; DO NOT EDIT.
package normal
func ConvertnormalSrcTonormalDst(src normalSrc) (dst normalDst) {
dst.e.m = src.m
dst.e.x = src.x.A
dst.e.members = make([]uint8, len(src.members))
for i := range src.members {
dst.e.members[i] = src.members[i].uaiueo
}
dst.x = src.x.C
dst.y = src.y
dst.z = src.z
return
}
Conversion rules