2021-12-02 17:54:14 +01:00
|
|
|
package toml
|
|
|
|
|
|
|
|
// tomlType represents any Go type that corresponds to a TOML type.
|
|
|
|
// While the first draft of the TOML spec has a simplistic type system that
|
|
|
|
// probably doesn't need this level of sophistication, we seem to be militating
|
|
|
|
// toward adding real composite types.
|
|
|
|
type tomlType interface {
|
|
|
|
typeString() string
|
|
|
|
}
|
|
|
|
|
|
|
|
// typeEqual accepts any two types and returns true if they are equal.
|
|
|
|
func typeEqual(t1, t2 tomlType) bool {
|
|
|
|
if t1 == nil || t2 == nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return t1.typeString() == t2.typeString()
|
|
|
|
}
|
|
|
|
|
2022-11-11 11:22:50 +01:00
|
|
|
func typeIsTable(t tomlType) bool {
|
2021-12-02 17:54:14 +01:00
|
|
|
return typeEqual(t, tomlHash) || typeEqual(t, tomlArrayHash)
|
|
|
|
}
|
|
|
|
|
|
|
|
type tomlBaseType string
|
|
|
|
|
|
|
|
func (btype tomlBaseType) typeString() string {
|
|
|
|
return string(btype)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (btype tomlBaseType) String() string {
|
|
|
|
return btype.typeString()
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
tomlInteger tomlBaseType = "Integer"
|
|
|
|
tomlFloat tomlBaseType = "Float"
|
|
|
|
tomlDatetime tomlBaseType = "Datetime"
|
|
|
|
tomlString tomlBaseType = "String"
|
|
|
|
tomlBool tomlBaseType = "Bool"
|
|
|
|
tomlArray tomlBaseType = "Array"
|
|
|
|
tomlHash tomlBaseType = "Hash"
|
|
|
|
tomlArrayHash tomlBaseType = "ArrayHash"
|
|
|
|
)
|
|
|
|
|
|
|
|
// typeOfPrimitive returns a tomlType of any primitive value in TOML.
|
|
|
|
// Primitive values are: Integer, Float, Datetime, String and Bool.
|
|
|
|
//
|
|
|
|
// Passing a lexer item other than the following will cause a BUG message
|
|
|
|
// to occur: itemString, itemBool, itemInteger, itemFloat, itemDatetime.
|
|
|
|
func (p *parser) typeOfPrimitive(lexItem item) tomlType {
|
|
|
|
switch lexItem.typ {
|
|
|
|
case itemInteger:
|
|
|
|
return tomlInteger
|
|
|
|
case itemFloat:
|
|
|
|
return tomlFloat
|
|
|
|
case itemDatetime:
|
|
|
|
return tomlDatetime
|
|
|
|
case itemString:
|
|
|
|
return tomlString
|
|
|
|
case itemMultilineString:
|
|
|
|
return tomlString
|
|
|
|
case itemRawString:
|
|
|
|
return tomlString
|
|
|
|
case itemRawMultilineString:
|
|
|
|
return tomlString
|
|
|
|
case itemBool:
|
|
|
|
return tomlBool
|
|
|
|
}
|
|
|
|
p.bug("Cannot infer primitive type of lex item '%s'.", lexItem)
|
|
|
|
panic("unreachable")
|
|
|
|
}
|