Isox.Registry (Isox v0.1.0)

Copy Markdown View Source

Descobre os módulos Isox.Generated.<Mensagem>.<Versao> já carregados e despacha o parse pela combinação namespace + MsgDefIdr (ADR 0002) — os dois precisam concordar, ou é erro.

Summary

Functions

Acha, entre os módulos gerados carregados, o que declara o namespace do XML; faz o parse com ele e confere que o MsgDefIdr recebido é exatamente o esperado por aquele módulo.

Todos os módulos gerados que expõem namespace/0 (exclui o Head001, que não é mensagem). Lê a lista de módulos da aplicação compilada (Application.spec/2) em vez de :code.all_loaded/0 — este só enxerga módulo já referenciado em tempo de execução, e nada aqui garante isso.

Namespace do elemento raiz (xmlns do <Envelope>), sem fazer o parse completo.

Functions

decode(xml)

@spec decode(binary()) ::
  {:ok, module(), term()}
  | {:error, {:unknown_namespace, String.t() | nil}}
  | {:error, {:msg_def_idr_mismatch, expected: String.t(), received: term()}}
  | {:error, String.t()}

Acha, entre os módulos gerados carregados, o que declara o namespace do XML; faz o parse com ele e confere que o MsgDefIdr recebido é exatamente o esperado por aquele módulo.

generated_modules()

@spec generated_modules() :: [module()]

Todos os módulos gerados que expõem namespace/0 (exclui o Head001, que não é mensagem). Lê a lista de módulos da aplicação compilada (Application.spec/2) em vez de :code.all_loaded/0 — este só enxerga módulo já referenciado em tempo de execução, e nada aqui garante isso.

xml_namespace(xml)

@spec xml_namespace(binary()) :: String.t() | nil

Namespace do elemento raiz (xmlns do <Envelope>), sem fazer o parse completo.