Trying to use open_api_spex in my phoenix project.
When I try compiling the project with mix a warning pops us
OpenApiTest.OpenApiSpex.Plug.RenderSpec.init/1 is undefined
I have my router defined as below:
defmodule OpenApiTestWeb.Router do
use OpenApiTestWeb, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
plug OpenApiSpex.Plug.PutApiSpec, module: OpenApiTestWeb.ApiSpec
end
scope "/", OpenApiTestWeb do
pipe_through :browser
get "/", PageController, :index
get "/payments", PaymentController, :create_payment
get "/openapi", OpenApiSpex.Plug.RenderSpec, []
end
if Mix.env() in [:dev, :test] do
import Phoenix.LiveDashboard.Router
scope "/" do
pipe_through :browser
live_dashboard "/dashboard", metrics: OpenApiTestWeb.Telemetry
end
end
end
OpenApiSpex.Plug.RenderSpec module is present in the deps as below.
defmodule OpenApiSpex.Plug.RenderSpec do
defmodule MyAppWeb.Router do
use Phoenix.Router
alias MyAppWeb.UserController
pipeline :api do
plug :accepts, ["json"]
plug OpenApiSpex.Plug.PutApiSpec, module: MyAppWeb.ApiSpec
end
scope "/api" do
pipe_through :api
resources "/users", UserController, only: [:create, :index, :show]
get "/openapi", OpenApiSpex.Plug.RenderSpec, []
end
end
alias OpenApiSpex.Plug.PutApiSpec
@behaviour Plug
@json_encoder Enum.find([Jason, Poison], &Code.ensure_loaded?/1)
@impl Plug
def init(opts), do: opts
@impl Plug
def call(conn, _opts) do
{spec, _} = PutApiSpec.get_spec_and_operation_lookup(conn)
conn
|> Plug.Conn.put_resp_content_type("application/json")
|> Plug.Conn.send_resp(200, @json_encoder.encode!(spec))
end
end
Could someone kindly help?