defmodule ExCnab.Cnab240.Validator.Details.Chunk do @moduledoc """ An implementation of chain of responsibility to validate the chunks """ @spec call(List.t(), List.t()) :: {:ok, Map.t()} | {:error, String.t()} def call(details, raw_details) do with :ok <- validate_length(raw_details), :ok <- validate_details_length(details, raw_details) do {:ok, details} end end @spec_length 10_000 defp validate_length(raw_details) do length = length(raw_details) case length < @spec_length do true -> :ok false -> {:error, "Invalid file header length: #{length}, the max size is #{@spec_length}}"} end end defp validate_details_length(details, raw_details) do raw_length = length(raw_details) length = length(details) case length == raw_length do true -> :ok false -> {:error, "Invalid details length: #{length}, expected #{raw_length}, if you have this error, please contact the maintainers and open an issue"} end end end