OxL Справочник OxL
РусскийEnglish

kw enum

Зарезервированное слово

Список слов: §1.4

Синтаксис

ebnf
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 — исключительное.

Примеры

oxl
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

oxl
@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)
}

— 6.5 Ошибки

Связанные диагностики

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

См. также