github.com/frostornge/solgen@v0.1.3/proto/message.go (about) 1 package proto 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/ethereum/go-ethereum/accounts/abi" 8 ) 9 10 type argument struct { 11 Name string 12 Repeated bool 13 Type string 14 Count int 15 } 16 17 func (arg argument) printArg(prefix string) string { 18 str := fmt.Sprintf("%s %s = %d;", arg.Type, arg.Name, arg.Count) 19 if arg.Repeated { 20 str = "repeated " + str 21 } 22 return prefix + str + "\n" 23 } 24 25 type message struct { 26 Comment string 27 Name string 28 Msgs []message 29 Args []argument 30 31 contractName string 32 typeOptions Options 33 } 34 35 func (msg *message) parseArguments(args []abi.Argument) { 36 for index, arg := range args { 37 m, a := parseType(index+1, arg, msg.typeOptions[msg.contractName]) 38 if m != nil { 39 msg.Msgs = append(msg.Msgs, *m) 40 } 41 msg.Args[index] = *a 42 } 43 } 44 45 func (msg message) PrintMessage() string { 46 return msg.printMessage("") 47 } 48 49 func (msg message) printMessage(prefix string) string { 50 var builder strings.Builder 51 52 builder.WriteString(prefix + fmt.Sprintf("// %s", msg.Comment) + "\n") 53 builder.WriteString(prefix + fmt.Sprintf("message %s {", msg.Name) + "\n") 54 55 for _, m := range msg.Msgs { 56 builder.WriteString(m.printMessage(prefix + "\t")) 57 } 58 59 for _, a := range msg.Args { 60 builder.WriteString(a.printArg(prefix + "\t")) 61 } 62 63 builder.WriteString(prefix + "}" + "\n") 64 65 return builder.String() 66 }