Skip to main content

mix.exs

defmodule Ccxt.MixProject do
  use Mix.Project

  @version "0.1.0-binance-pro-preview"
  @source_url "https://github.com/ccxt/ccxt"
  @description "Binance-first Elixir target generated from CCXT TypeScript sources, including CCXT Pro websocket support."

  def project do
    [
      app: :ccxt,
      version: @version,
      elixir: "~> 1.16",
      name: "CCXT Elixir",
      description: @description,
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      package: package(),
      docs: docs()
    ]
  end

  def application do
    [
      mod: {Ccxt.Application, []},
      extra_applications: [:logger, :inets, :ssl, :crypto, :telemetry]
    ]
  end

  defp deps do
    [
      {:jason, "~> 1.4"},
      {:telemetry, "~> 1.0"},
      {:websockex, "~> 0.4"},
      {:ex_doc, "~> 0.34", only: :dev, runtime: false}
    ]
  end

  defp package do
    [
      licenses: ["MIT"],
      links: %{
        "CCXT" => @source_url,
        "Elixir target docs" => "https://github.com/ccxt/ccxt/tree/master/elixir/doc"
      },
      files: [
        "lib",
        "priv",
        "doc",
        "mix.exs",
        "README.md"
      ]
    ]
  end

  defp docs do
    [
      main: "readme",
      output: "_build/docs",
      source_url: @source_url,
      extras: [
        "README.md",
        "doc/binance-pro-api-reference.md",
        "doc/real-project-integration.md",
        "doc/release-checklist.md",
        "doc/release-0.1.0-binance-pro-preview.md",
        "doc/ccxt-pro-elixir-target.md",
        "doc/ccxt-pro-cache-parity.md",
        "doc/ccxt-pro-lifecycle-coverage.md",
        "doc/ccxt-pro-structure-coverage.md",
        "doc/ccxt-structure-schema.md",
        "doc/binance-live-testing.md"
      ],
      groups_for_extras: [
        "User guide": [
          "README.md",
          "doc/binance-pro-api-reference.md",
          "doc/real-project-integration.md",
          "doc/release-checklist.md",
          "doc/release-0.1.0-binance-pro-preview.md"
        ],
        "Coverage evidence": [
          "doc/ccxt-pro-elixir-target.md",
          "doc/ccxt-pro-cache-parity.md",
          "doc/ccxt-pro-lifecycle-coverage.md",
          "doc/ccxt-pro-structure-coverage.md",
          "doc/ccxt-structure-schema.md",
          "doc/binance-live-testing.md"
        ]
      ],
      skip_undefined_reference_warnings_on: [
        "doc/ccxt-pro-elixir-target.md",
        "doc/ccxt-pro-cache-parity.md",
        "doc/ccxt-pro-lifecycle-coverage.md",
        "doc/release-0.1.0-binance-pro-preview.md"
      ],
      groups_for_modules: [
        "CCXT Pro": [
          Ccxt.Pro,
          Ccxt.Pro.Binance,
          Ccxt.Pro.Connection,
          Ccxt.Pro.ArrayCache,
          Ccxt.Pro.IndexedArrayCache,
          Ccxt.Pro.TimestampArrayCache,
          Ccxt.Pro.CacheUpdates,
          Ccxt.Pro.OrderCache,
          Ccxt.Pro.PositionCache,
          Ccxt.ProLifecycleCoverage
        ],
        "Structure persistence": [
          Ccxt.StructureCoverage,
          Ccxt.StructureNormalizer,
          Ccxt.StructurePersistence,
          Ccxt.StructureSchema
        ],
        "Generated REST target": [
          Ccxt.Exchanges.Binance,
          Ccxt.Raw.Binance,
          Ccxt.HttpExecutor,
          Ccxt.RawEndpoint,
          Ccxt.RawPayload,
          Ccxt.Transpiled.Runtime
        ]
      ]
    ]
  end
end