Packages

Small HTTPoison based wrapper around PrintNode API.

Current section

Files

Jump to
ex_printnode lib print_node printers.ex
Raw

lib/print_node/printers.ex

defmodule PrintNode.Printers do
@moduledoc """
API interface for Printer operations
"""
alias PrintNode.Client
alias PrintNode.Resources.{Computer, Printer}
@spec list(PrintNode.options()) ::
{:error, String.t()} | {:ok, [%Printer{}]}
def list(options) do
Client.get!("/printers", Client.prepare_request_headers(options))
|> case do
%{body: body, status_code: 200} ->
{:ok, body |> Enum.map(&json_to_printer/1)}
%{body: body, status_code: _status_code} ->
{:error, body[:message]}
end
end
@spec list_by_computer(String.t() | integer(), PrintNode.options()) ::
{:error, String.t()} | {:ok, [%Printer{}]}
def list_by_computer(computer_set, options) do
Client.get!("/computers/#{computer_set}/printers", Client.prepare_request_headers(options))
|> case do
%{body: body, status_code: 200} ->
{:ok, body |> Enum.map(&json_to_printer/1)}
%{body: body, status_code: _status_code} ->
{:error, body[:message]}
end
end
@spec get(String.t() | integer(), PrintNode.options()) ::
{:error, String.t()} | {:ok, [%Printer{}]}
def get(printer_set, options) do
Client.get!(
"/printers/#{printer_set}",
Client.prepare_request_headers(options)
)
|> case do
%{body: body, status_code: 200} ->
{:ok, body |> Enum.map(&json_to_printer/1)}
%{body: body, status_code: _status_code} ->
{:error, body[:message]}
end
end
@spec json_to_printer(map()) :: %Printer{}
def json_to_printer(json) do
Printer
|> struct(json)
|> Map.update!(:computer, &struct(Computer, &1))
end
@spec delete :: none
def delete() do
throw({:not_implemented, "please raise PR"})
end
def delete(_printer_set) do
throw({:not_implemented, "please raise PR"})
end
end