Crate type_protocol

Source
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: int or isize, int8, int16, int32, int64, int128
  • Unsigned Integer Types: uint or usize, 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.

Structs§

AlwaysValid
AsciiIdent
RustIdent
UnicodeXID

Enums§

Error
ExtensionType
Typing
UniversalType

Traits§

IdentValidation
ToTypeProtocol