kw enum
Зарезервированное слово
Список слов: §1.4
Синтаксис
Enum = "enum" Ident [ Generics ] "{" Variant { ( "," | NL ) Variant } "}" ;Грамматика: Прил. A
Определяется в
- 4.4 enum — Вариант: без полей, с позиционными или с именованными полями.
- 9.3 Wire-формат OxL — Бинарный формат OxL — кодирование protobuf 3 со следующими отображениями
- 9.2 Номера полей и схема — Каждое поле data и каждый вариант enum имеет стабильный тег (номер в wire-формате).
- 3.4 Объявляемые типы — data — тип-произведение с именованными полями (§4.2).
- 3.9 Copy и move — Типы Copy: примитивы, str, bytes, Duration, Time и другие типы времени, distinct/уточнённые над Copy-типом, кортежи и массивы из Copy-типов,
- 4.6 Интерфейсы — Интерфейсы структурные
- 6.5 Ошибки — Исключений нет. Ошибка — значение типа, помеченного @error, возвращаемое через объединение.
- 7.2 Заимствования — &x создаёт разделяемое заимствование, &var x — исключительное.
Примеры
pub(api) enum Role { User, Support, Admin }
pub(api) enum Shape {
Circle(r: f64)
Rect(w: f64, h: f64)
Empty
}
@error enum PayError { Declined(reason: str), Fraud, Limit(max: Money) }
@open pub(api) enum Status { New = 1, Paid = 2, Shipped = 3 }— 4.4 enum
@error data NotFound { what: str }
@error enum PayError { Declined(reason: str), Fraud }
fn charge(card: Card, sum: Money) -> Receipt | PayError | NetError net {
let token = Vault.tokenize(card)? // ? пробрасывает ошибки вызова
if sum <= Money.zero() { fail PayError.Declined("zero sum") }
Bank.pay(token, sum)
}Связанные диагностики
secret-json, schema-attr, schema-break, unknown-type, use-after-move, explicit-interface, interface-not-satisfied, fail-type, question-context, unhandled-error, borrow-conflict, borrow-escape