lib/requests/payments/payment/flight_leg_detail.ex

defmodule Requests.Payments.Payment.FlightLegDetail do
  @moduledoc false
  @type t() :: %{
          flight_number: integer(),
          carrier_code: String.t(),
          service_class: String.t(),
          departure_date: String.t(),
          departure_time: String.t(),
          departure_airport: String.t(),
          arrival_airport: String.t(),
          stopover_code: String.t(),
          fare_basis_code: String.t()
        }

  @enforce_keys [:arrival_airport, :departure_airport]
  defstruct [
    :flight_number,
    :carrier_code,
    :service_class,
    :departure_date,
    :departure_time,
    :departure_airport,
    :arrival_airport,
    :stopover_code,
    :fare_basis_code
  ]

  def build(params) when is_map(params) do
    %{
      flight_number: params[:flight_number],
      carrier_code: params[:carrier_code],
      service_class: params[:service_class],
      departure_date: params[:departure_date],
      departure_time: params[:departure_time],
      departure_airport: params[:departure_airport],
      arrival_airport: params[:arrival_airport],
      stopover_code: params[:stopover_code],
      fare_basis_code: params[:fare_basis_code]
    }
  end

  def build(_), do: nil
end