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  }