defmodule Scribe.Border do @moduledoc ~S""" Defines border and edge symbols for a table cell. ## Example Usage When printed, a cell with a border of `Scribe.Border.new("+", "|", "-")` would look like: ``` +--------+ | "test" | +--------+ ``` """ defstruct top_left_corner: "", top_edge: "", top_right_corner: "", right_edge: "", bottom_right_corner: "", bottom_edge: "", bottom_left_corner: "", left_edge: "" @type t :: %__MODULE__{ top_left_corner: String.t(), top_edge: String.t(), top_right_corner: String.t(), right_edge: String.t(), bottom_right_corner: String.t(), bottom_edge: String.t(), bottom_left_corner: String.t(), left_edge: String.t() } @doc ~S""" Defines a new `Border.t` with given corner and edges. ## Examples iex> new("+", "|", "-") %Scribe.Border{ top_left_corner: "+", top_edge: "-", top_right_corner: "+", right_edge: "|", bottom_right_corner: "+", bottom_edge: "-", bottom_left_corner: "+", left_edge: "|" } """ @spec new(String.t(), String.t(), String.t()) :: t def new(corner, v_edge, h_edge) do %__MODULE__{ top_left_corner: corner, top_edge: h_edge, top_right_corner: corner, right_edge: v_edge, bottom_right_corner: corner, bottom_edge: h_edge, bottom_left_corner: corner, left_edge: v_edge } end end