1package generator
2
3import (
4	"strings"
5)
6
7// Returns is a slice of Return.
8type Returns []Return
9
10// Return is the result of a method's invocation.
11type Return struct {
12	Name string
13	Type string
14}
15
16// HasLength is true if there are returns, else false.
17func (r Returns) HasLength() bool {
18	return len(r) > 0
19}
20
21func (r Returns) WithPrefix(p string) string {
22	if len(r) == 0 {
23		return ""
24	}
25
26	rets := []string{}
27	for i := range r {
28		if p == "" {
29			rets = append(rets, unexport(r[i].Name))
30		} else {
31			rets = append(rets, p+unexport(r[i].Name))
32		}
33	}
34	return strings.Join(rets, ", ")
35}
36
37func (r Returns) AsArgs() string {
38	if len(r) == 0 {
39		return ""
40	}
41
42	rets := []string{}
43	for i := range r {
44		rets = append(rets, r[i].Type)
45	}
46	return strings.Join(rets, ", ")
47}
48
49func (r Returns) AsNamedArgsWithTypes() string {
50	if len(r) == 0 {
51		return ""
52	}
53
54	rets := []string{}
55	for i := range r {
56		rets = append(rets, unexport(r[i].Name)+" "+r[i].Type)
57	}
58	return strings.Join(rets, ", ")
59}
60
61func (r Returns) AsNamedArgs() string {
62	if len(r) == 0 {
63		return ""
64	}
65
66	rets := []string{}
67	for i := range r {
68		rets = append(rets, unexport(r[i].Name))
69	}
70	return strings.Join(rets, ", ")
71}
72
73func (r Returns) AsReturnSignature() string {
74	if len(r) == 0 {
75		return ""
76	}
77	if len(r) == 1 {
78		return r[0].Type
79	}
80	result := "("
81	for i := range r {
82		result = result + r[i].Type
83		if i < len(r) {
84			result = result + ", "
85		}
86	}
87	result = result + ")"
88	return result
89}
90