github.com/qiniu/dyn@v1.3.0/cmdarg/unmarshal.go (about)

     1  package cmdarg
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/qiniu/dyn/jsonext"
     7  )
     8  
     9  // ---------------------------------------------------------------------------
    10  
    11  func UnmarshalText(text string) (v interface{}, err error) {
    12  
    13  	if strings.HasPrefix(text, "$(") {
    14  		err = jsonext.UnmarshalString(text, &v)
    15  		return
    16  	}
    17  	return text, nil
    18  }
    19  
    20  func Unmarshal(text string) (v interface{}, err error) {
    21  
    22  	if len(text) == 0 {
    23  		return "", nil
    24  	}
    25  
    26  	c := text[0] // true, false, null
    27  	if c <= 33 || (c >= 'A' && c <= 'Z') || c == '/' {
    28  		return text, nil
    29  	}
    30  
    31  	if c >= 'a' && c <= 'z' {
    32  		switch text {
    33  		case "true":
    34  			return true, nil
    35  		case "false":
    36  			return false, nil
    37  		case "null":
    38  			return nil, nil
    39  		default:
    40  			return text, nil
    41  		}
    42  	}
    43  
    44  	err = jsonext.UnmarshalString(text, &v)
    45  	return
    46  }
    47  
    48  // ---------------------------------------------------------------------------