From 93532615c16aa9ea2e952c5d700d4ac943d21e17 Mon Sep 17 00:00:00 2001 From: x1001100011 Date: Wed, 13 Oct 2021 21:41:19 -0700 Subject: [PATCH] feat: add protos compiler --- apps/emqx_gateway/mix.exs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/apps/emqx_gateway/mix.exs b/apps/emqx_gateway/mix.exs index 4306cd2f6..bdb71dc7a 100644 --- a/apps/emqx_gateway/mix.exs +++ b/apps/emqx_gateway/mix.exs @@ -10,6 +10,8 @@ defmodule EMQXGateway.MixProject do deps_path: "../../deps", lockfile: "../../mix.lock", elixir: "~> 1.12", + compilers: [:protos | Mix.compilers()], + aliases: ["compile.protos": &protos/1], start_permanent: Mix.env() == :prod, deps: deps(), description: "The Gateway Management Application" @@ -24,8 +26,33 @@ defmodule EMQXGateway.MixProject do ] end + defp protos(_args) do + app_path = Path.expand("..", __ENV__.file) + config = [ + :use_packages, + :maps, + :strings_as_binaries, + rename: {:msg_name, :snake_case}, + rename: {:msg_fqname, :base_name}, + i: '.', + report_errors: false, + o: app_path |> Path.join("src/exproto") |> to_charlist(), + module_name_prefix: 'emqx_', + module_name_suffix: '_pb' + ] + + app_path + |> Path.join("src/exproto/protos/*.proto") + |> Path.wildcard() + |> Enum.map(&to_charlist/1) + |> Enum.each(&:gpb_compile.file(&1, config)) + + :ok + end + defp deps do [ + {:gpb, "4.19.1", runtime: false}, {:emqx, in_umbrella: true}, {:lwm2m_coap, github: "emqx/lwm2m-coap", tag: "v2.0.0"}, {:grpc, github: "emqx/grpc-erl", tag: "0.6.2"},