defmodule Thrift.Mixfile do
  @moduledoc false
  use Mix.Project

  @description """
  Elixir implementation of the Thrift service framework

  This package includes support for parsing Thrift IDL files, working with the
  Thrift binary protocol, and building high-performance clients and servers.
  """

  @version "2.0.0-dev"
  @project_url "https://github.com/pinterest/elixir-thrift"

  def project do
    [
      app: :thrift,
      version: @version,
      elixir: "~> 1.7",
      deps: deps(),

      # Build Environment
      elixirc_paths: elixirc_paths(Mix.env()),
      compilers: [:leex, :yecc, :erlang, :elixir, :app],

      # Testing
      test_coverage: [tool: ExCoveralls],
      preferred_cli_env: [
        coveralls: :test,
        "coveralls.detail": :test,
        "coveralls.html": :test,
        "coveralls.post": :test
      ],

      # URLs
      source_url: @project_url,
      homepage_url: @project_url,

      # Hex
      description: @description,
      package: package(),

      # Dialyzer
      dialyzer: [
        plt_add_deps: :app_tree,
        plt_add_apps: [:mix]
      ],

      # Docs
      name: "Thrift",
      docs: [
        main: "Thrift",
        extra_section: "Guides",
        extras: [
          "ADOPTERS.md": [title: "Adopters"],
          "CONTRIBUTING.md": [title: "Contributing"],
          "example/README.md": [filename: "example", title: "Example Project"]
        ],
        source_ref: "master",
        source_url: @project_url,
        groups_for_modules: [
          "Abstract Syntax Tree": ~r"Thrift.AST.*",
          Clients: ["Thrift.Binary.Framed.Client"],
          Servers: ["Thrift.Binary.Framed.Server"]
        ]
      ]
    ]
  end

  def application do
    [
      extra_applications: [:logger]
    ]
  end

  defp elixirc_paths(:test), do: ["lib", "test/support/lib"]
  defp elixirc_paths(_), do: ["lib"]

  defp deps do
    [
      # Development
      {:ex_doc, "~> 0.20", only: :dev, runtime: false},
      {:excoveralls, "~> 0.12", only: :test, runtime: false},
      {:credo, "~> 1.0", only: :dev, runtime: false},
      {:dialyxir, "~> 1.0", only: :dev, runtime: false},

      # Runtime
      {:connection, "~> 1.0"},
      {:ranch, "~> 1.6"},
      {:telemetry, "~> 1.0"}
    ]
  end

  defp package do
    [
      maintainers: [
        "Steve Cohen",
        "James Fish",
        "Preston Guillory",
        "Michael Oliver",
        "Jon Parise",
        "Dan Swain"
      ],
      licenses: ["Apache 2.0"],
      links: %{"GitHub" => @project_url},
      files:
        ~w(README.md ADOPTERS.md CONTRIBUTING.md LICENSE mix.exs lib) ++
          ~w(src/thrift_lexer.xrl src/thrift_parser.yrl)
    ]
  end
end
