Nfse.Schema.SimpleType (nfse v0.1.0)

Copy Markdown View Source

Uso interno da biblioteca: não faz parte da API pública.

Valor de um tipo simples do XSD: conversão, validação, escrita e leitura.

As regras vêm do módulo de tipos simples do schema, que responde facets/1 com as facetas já achatadas (as da base primeiro, depois as do próprio tipo) e kind/1 com a representação em Elixir. Os detalhes e as divergências em relação ao XSD estão em Nfse.Schema.Runtime.

Summary

Functions

Converte o valor de entrada para a representação canônica do tipo.

Lê o texto de um elemento ou atributo. As facetas são conferidas no texto antes de qualquer conversão, para que um decimal com expoente nunca chegue ao Decimal.

Devolve a forma escrita do valor, sem escaping.

Confere o tipo, os dígitos de um decimal e cada faceta sobre a forma escrita do valor.

Types

error()

@type error() ::
  :type
  | :length
  | :min_length
  | :max_length
  | :enumeration
  | :pattern
  | :integer_digits
  | :fraction_digits

kind()

@type kind() :: :string | :date | :datetime | {:decimal, pos_integer(), pos_integer()}

Functions

cast(simple_types, name, value)

@spec cast(module(), String.t(), term()) :: term()

Converte o valor de entrada para a representação canônica do tipo.

Inteiro vira string num tipo :string, e decimal válido passa a ter exatamente as casas do tipo. Qualquer outro valor volta como veio, para que validate/3 aponte o erro.

parse(simple_types, name, text)

@spec parse(module(), String.t(), String.t()) :: {:ok, term()} | {:error, error()}

Lê o texto de um elemento ou atributo. As facetas são conferidas no texto antes de qualquer conversão, para que um decimal com expoente nunca chegue ao Decimal.

to_lexical(simple_types, name, value)

@spec to_lexical(module(), String.t(), term()) :: String.t()

Devolve a forma escrita do valor, sem escaping.

Levanta ArgumentError para um valor do tipo errado ou um decimal com dígitos demais, porque escrevê-lo exigiria arredondar ou truncar.

validate(simple_types, name, value)

@spec validate(module(), String.t(), term()) :: :ok | {:error, error()}

Confere o tipo, os dígitos de um decimal e cada faceta sobre a forma escrita do valor.