Expand description
A crate provding a simple syntax inspired by the go programming language for conveying the idea of types.
§Universal Types
These are common datatype found in most languages.
- Boolean Types:
bool - Signed Integer Types:
intorisize,int8,int16,int32,int64,int128 - Unsigned Integer Types:
uintorusize,uint8,uint16,uint32,uint64,uint128 - Floating Point Types:
float16,float32,float64 - Char and String types:
char,string
§Extension Types
These are common special datatypes, prefixed with +.
+bytes+dateTime,+date,+time,+duration+decimal+uuid+rgb,+rgba
§Types and Paths
Any string segment not starting with an reserved symbol is a Type or a Path if it is not a Builtin Type. Buildin types use snake_case so you should use PascalCase to avoid collision.
- Named Types
MyType, Foöbár, Hello World, 2022
A validator can be provided to validate idents based on the user’s needs.
The RustIdent validator will fail Hello World and 2022,
while the AsciiIdent validator will fail Foöbár additionally.
Note type-protocol grammer treat whitespaces like normal characters, the user is responsible for stripping them if needed.
- Paths
path::to::Type
- Absolute Paths
::path::to::Type
§Optional Types
?T represents a optional type like Option<T> or a nullable pointer.
e.g. ?string
§Array Types
[N]T represents a fix sized array type like [[T;N]].
N has to be an integer.
e.g. [4]int
§Vec Types
[]T represents a dynamic sized array type like Vec<T>.
e.g. []int
§Set Types
[T] represents a collection of unique keys like HashSet<T>.
e.g. [string]
§Map Types
[TKey]TValue represents a collection of keys and values like HashMap<T>.
e.g. [string]int
§Hint Types
- Foreign Hint
@T hints that T is a foreign type.