defmodule Mix.Tasks.Pdf.Server do
@moduledoc """
Starts a development server for previewing PDF examples.
$ mix pdf.server
Options:
--port PORT Port to listen on (default: 4200)
The server is only available in the :dev environment.
"""
@shortdoc "Start the PDF preview dev server"
use Mix.Task
@default_port 4200
@impl true
def run(args) do
Application.ensure_all_started(:plug_cowboy)
{opts, _, _} = OptionParser.parse(args, strict: [port: :integer])
port = Keyword.get(opts, :port, @default_port)
{:ok, _} = Plug.Cowboy.http(Pdf.DevServer, [], port: port)
print_banner(port)
Process.sleep(:infinity)
end
defp print_banner(port) do
Mix.shell().info("""
┌─────────────────────────────────────────┐
│ 📄 Pdf Dev Server running! │
│ │
│ → http://localhost:#{String.pad_trailing(to_string(port), 5)} │
│ │
│ Press Ctrl+C to stop │
└─────────────────────────────────────────┘
""")
end
end