defmodule ApiBrasil.Data.Vehicles do @moduledoc """ Veículos por placa (device-based): `POST /vehicles/{action}`. Além das funções nomeadas, `request/4` aceita qualquer action do catálogo e `queue/4` executa a mesma action por fila. {:ok, envelope} = ApiBrasil.Data.Vehicles.dados(client, %{"placa" => "ABC1234"}) ApiBrasil.Core.DeviceResponse.response(envelope) """ use ApiBrasil.Core.Service, device: "vehicles" action( :dados, "dados", "Dados do veículo pela placa: `POST /vehicles/dados` — body `%{\"placa\" => \"...\"}`." ) action( :fipe, "fipe", "FIPE pela placa: `POST /vehicles/fipe` — body `%{\"placa\" => \"...\"}`." ) action(:base_dados, "base/000/dados", "Base nacional: `POST /vehicles/base/000/dados`.") action(:base_fipe, "base/000/fipe", "FIPE na base nacional: `POST /vehicles/base/000/fipe`.") @doc """ Consulta a FIPE por placa na rota dedicada: `POST /vehicles/consultafipe/{placa}`. """ @spec consulta_fipe(Client.t(), String.t(), keyword()) :: {:ok, DeviceResponse.t()} | {:error, Error.t()} def consulta_fipe(client, placa, opts \\ []) do Service.device(client, "vehicles", "consultafipe/" <> Service.encode_path(placa), nil, opts) end @doc "Como `consulta_fipe/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec consulta_fipe!(Client.t(), String.t(), keyword()) :: DeviceResponse.t() def consulta_fipe!(client, placa, opts \\ []) do Service.unwrap!(consulta_fipe(client, placa, opts)) end end