kw rpc
Зарезервированное слово
Список слов: §1.4
Синтаксис
RpcSig = "rpc" Ident "(" [ Params ] ")" "->" Type ;Rpc = "rpc" Ident "(" [ IdentList ] ")" ( Block | "=>" Expr ) ;Грамматика: Прил. A
Определяется в
- 10.2 Атрибуты rpc — Значения по умолчанию для всех rpc задаются в cluster { defaults { …
- 10.1 Сервисы — service объявляет контракт
- 10.3 Стримы — Тип stream<T, E = never>.
- 13.4 Авторизация и политики — Объект политики
- 4.9 Атрибуты — Синтаксис: @имя или @имя(аргументы) перед объявлением, полем, параметром или rpc.
- 10.4 Broadcast — локальная рассылка — Broadcast<T> доставляет каждый опубликованный элемент всем текущим подписчикам.
- 10.6 Пайплайны — Пайплайн — линейная цепочка шагов, каждый из которых выполняется на своём узле; данные передаются от узла к узлу напрямую, вызывающий получа
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
Примеры
policy Orders {
allow get(id) if caller.isUser(db.find(Order, id)?.userId)
allow list, recent if caller.has(role: .Support)
allow * if caller.service("billing")
deny delete unless caller.has(role: .Admin) && caller is .User(mfa: true, ..)
}
@public rpc health() -> Ok
@allow(role: .Admin) rpc purge() -> Ok
@internal rpc create(…) -> Orderlet prices = Broadcast<Tick>(buffer: TICK_BUFFER, slow: .DropOldest, replay: 1)
scope {
spawn { for await t in Exchange.feed() { prices.publish(t) } }
spawn { for await t in prices.subscribe() { ui.render(t) } }
spawn { for await t in prices.subscribe() { stats.add(t) } }
}
impl Market {
rpc ticks() -> stream<Shared<Tick>, Lagged> => prices.subscribe() // каждому клиенту
}— 10.4 Broadcast — локальная рассылка
Связанные диагностики
attribute-not-applicable, cache-not-readonly, invalid-window, retry-not-idempotent, rpc-attr, duplicate-impl, impl-signature-mismatch, missing-impl, missing-rpc-impl, unknown-rpc, yield-outside-stream, data-rights, missing-policy, unknown-policy-target