refusaldomain

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2026 License: AGPL-3.0 Imports: 4 Imported by: 0

Documentation

Overview

Package refusaldomain — ЕДИНСТВЕННОЕ объявление того, чем продукт называет себя в теле отказа (задача продукта #2099, приёмка WIRE-1, предмет ПР-3, сценарии WIRE-3-01…03).

Предмет

Клиент различает полосы отказа по ПАРЕ «домен + признак полосы», а не разбором прозы сообщения — так предписывают конвенции. Значит `ErrorInfo.domain` есть часть контракта отказа, а не косметика, и то, что в нём стоит, читается как имя продукта, произведшего отказ.

Служба выносится самостоятельным продуктом. По проверочному вопросу нормы разделения — «это имя, которым продукт себя называет, или код, который он исполняет?» — домен отказа есть первое: его читает арендатор чужого облака, не открывая наш исходный код, достаточно посмотреть в тело ответа.

Почему объявление, а не константа по месту

До этого пакета суффикс стоял ТРЕМЯ литералами в трёх производителях отказа, и каждый нёс комментарий «совпадает с доменом соседних полос: сервис один». Совпадение при этом ничем не держалось: три места об одном предмете расходятся на первой же правке, и расходятся молча — покраснеть их различию нечем, потому что оно нигде не выражено.

Почему СУФФИКС, а не готовый домен

Домен собирается из двух половин: имя службы наследуется как КОД (форма `<служба>.<суффикс>` принадлежит платформе и не переизобретается), суффикс — это ИМЯ, и он не наследуется. Объявляй здесь готовую строку — и вторая служба того же продукта завела бы вторую строку, то есть тот же класс на уровень выше.

Почему объявление ПРОЦЕССА, а не значение в подписи каждого производителя

Производители отказа — функции уровня пакета, и ближайший из них зовётся общим отображателем ошибок (`shared.MapRepoErr`), который зовут отовсюду. Протащить величину в подпись значило бы внести имя продукта в сигнатуру каждого вызывающего в дереве — то есть сделать предметом всякого места ровно то, что этот пакет из всех мест и убирает.

Цена решения названа честно: величина живёт в процессе, и её невыполненное объявление — состояние, представимое в коде. Оно и есть предмет стража Require: сборка, объявления не сделавшая, НЕ ПОДНИМАЕТСЯ. Умолчания здесь нет намеренно — величина, которую построение подставляет молча, предметом стража быть не может, он зелен при любом входе.

Index

Constants

View Source
const ProductSuffix = "kaname.cloud"

ProductSuffix — суффикс, которым ЭТОТ продукт называет себя в домене отказа.

Значение решено приёмкой WIRE-1 (решение W3): Kachō объявляет `kacho.cloud`, Kaname — свой. Здесь оно ОБЪЯВЛЕНО, а не выведено: вывести имя продукта из имени платформы значило бы вернуть ту связь, ради разрыва которой продукт и получил своё имя.

View Source
const ServiceIAM = "iam"

ServiceIAM — половина домена, называющая СЛУЖБУ.

Наследуется как код: форма `<служба>.<суффикс>` принадлежит платформе, и переизобретать её незачем. Объявлена здесь затем, чтобы производители отказа не носили своей копии строки — той самой, которой их было три.

Variables

View Source
var ErrUndeclared = errors.New("refusaldomain: суффикс домена отказа не объявлен")

ErrUndeclared — суффикс не объявлен.

Отдельная величина, а не текст: страж старта и проба обязаны узнавать именно это состояние, а не сравнивать прозу.

Functions

func Compose

func Compose(suffix, service string) string

Compose собирает домен из двух половин.

Чистая функция: она и есть форма домена, и проверять её можно, не трогая объявления процесса. Пустая половина даёт пустой домен — «половина имени» не является именем, и отдавать `iam.` либо `.kaname.cloud` значило бы выдать огрызок за координату.

func Declare

func Declare(suffix string) error

Declare объявляет суффикс на процесс. Зовётся композиционным корнем.

Повтор ТЕМ ЖЕ значением — не находка: корень и проба объявляют одно и то же, и запрещать это значило бы запрещать проверяемость. Второе объявление ДРУГИМ значением отвергается: два имени одного продукта расходятся молча, и расходятся они у клиента, который уже ключуется на первое.

func Declared

func Declared() (string, bool)

Declared — объявленный суффикс и признак объявленности.

Второй результат обязателен: без него «не объявлено» неотличимо от «объявлено пустым», и решение по первому в одиночку читало бы умолчание как утверждение.

func For

func For(service string) string

For — домен отказа названной службы по ОБЪЯВЛЕННОМУ суффиксу.

Пустая строка при необъявленном суффиксе — не умолчание, а отсутствие величины: в работающем процессе это состояние недостижимо, его отвергает Require до подъёма слушателей. В пробе оно означает, что проба суффикса не объявила, и всякое её утверждение о домене покраснеет.

func Require

func Require() error

Require — страж старта: суффикс объявлен.

Текст отказа называет ТО, ЧТО не объявлено, и место объявления: без этого собирающий узнаёт о пропуске по пустому домену в чужом отчёте, а не при пуске.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL