github.com/chrislusf/greenpack@v3.7.1-0.20170911073826-ad5bd10b7c47+incompatible/msgp/clue.go (about)

     1  package msgp
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  )
     8  
     9  func Clue2Field(name string, clue string, zid int64) string {
    10  	if zid >= 0 {
    11  		return fmt.Sprintf("%s_zid%02d_%s", name, zid, clue)
    12  	}
    13  	// handle the missing zid, and don't write -1 as the zid.
    14  	return fmt.Sprintf("%s__%s", name, clue)
    15  }
    16  
    17  func Field2Clue(fieldname string) (name string, clue string, zid int64, err error) {
    18  	parts := strings.Split(fieldname, "_")
    19  	n := len(parts)
    20  	if n < 3 {
    21  		err = fmt.Errorf("too few underscore (expect at least two) in fieldname '%s'", fieldname)
    22  		return
    23  	}
    24  	clue = parts[n-1]
    25  	if strings.HasPrefix(parts[n-2], "zid") {
    26  		tmp, err2 := strconv.Atoi(parts[n-2][3:])
    27  		if err2 == nil {
    28  			zid = int64(tmp)
    29  		} else {
    30  			err = fmt.Errorf("problem parsing out _zid field in fieldname '%s': '%v'", fieldname, err2)
    31  			return
    32  		}
    33  	}
    34  	used := len(parts[n-1]) + len(parts[n-2]) + 2
    35  	name = fieldname[:len(fieldname)-used]
    36  	return
    37  }