github.com/vcilabs/webrpc@v0.5.2-0.20201116131534-162e27b1b33b/schema/ridl/parser_util.go (about)

     1  package ridl
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  )
     7  
     8  func expectWord(tok *token, value string) error {
     9  	if tok.tt != tokenWord || tok.val != value {
    10  		return errUnexpectedToken
    11  	}
    12  	return nil
    13  }
    14  
    15  func unescapeString(in string) (string, error) {
    16  	size := len(in)
    17  	out := ""
    18  
    19  	for i := 0; i < size; i++ {
    20  		c := in[i]
    21  
    22  		if c == '\\' {
    23  			i++
    24  			if i < size {
    25  				switch n := in[i]; n {
    26  				case 'n':
    27  					out = out + "\n"
    28  				case 't':
    29  					out = out + "\t"
    30  				case '"':
    31  					out = out + string(n)
    32  				default:
    33  					return "", fmt.Errorf("unexpected character %q after backslash", c)
    34  				}
    35  			} else {
    36  				return "", errors.New("unexpected end after backslash")
    37  			}
    38  		} else {
    39  			out = out + string(c)
    40  		}
    41  	}
    42  
    43  	return out, nil
    44  }