-type t() :: #argo_graphql_printer{}.
-spec finalize(Printer) -> ok | iolist() when Printer :: t().
-spec new_io_device(IoDevice) -> Printer when IoDevice :: io:device(), Printer :: t().
-spec new_string() -> Printer when Printer :: t().
-spec shift_left(Formatter1) -> Formatter2 when Formatter1 :: t(), Formatter2 :: t().
-spec shift_right(Formatter1) -> Formatter2 when Formatter1 :: t(), Formatter2 :: t().
-spec write(Formatter1, Format :: io:format(), Data :: [term()]) -> Formatter2 when Formatter1 :: t(), Formatter2 :: t().
-spec write_indent(Formatter1) -> Formatter2 when Formatter1 :: t(), Formatter2 :: t().