defmodule Replicate.Hardware do @moduledoc """ Documentation for `Hardware`. """ @behaviour Replicate.Hardware.Behaviour @replicate_client Application.compile_env(:replicate, :replicate_client, Replicate.Client) alias Replicate.Hardware alias Replicate.Hardware.Hardware @doc """ Lists all hardware. Returns [Hardware.t()]. ## Examples ``` iex> Replicate.Hardware.list() [%Hardware{ name: "CPU", sku: "cpu" }, %Hardware{ name: "Nvidia T4 GPU", sku: "gpu-t4" }, %Hardware{ name: "Nvidia A40 GPU", sku: "gpu-a40-small" }, %Hardware{ name: "Nvidia A40 (Large) GPU", sku: "gpu-a40-large" } ] ``` """ def list() do {:ok, results} = @replicate_client.request(:get, "/v1/hardware") results |> Jason.decode!() |> Enum.map(fn h -> atom_map = string_to_atom(h) struct!(Hardware, atom_map) end) end defp string_to_atom(body) do for {k, v} <- body, into: %{}, do: {String.to_atom(k), v} end end