cover/Elixir.Tools.User.Def.html

1 defmodule Tools.User.Def.Schema do
2 import Enum, only: [map: 2]
3 import String, only: [split: 2, trim: 1, to_atom: 1]
4 import Map, only: [put: 3, new: 2]
5
6 def get(tool, _state) when tool != nil do
7 spec = %{name: tool.name, description: tool.body}
8 armed(spec, tool[:params])
9 end
10
11 def get(nil, _state), do: nil
12
13 defp armed(spec, nil), do: spec
14 defp armed(spec, ""), do: spec
15
16 defp armed(spec, params) do
17 names = split(params, ",") |> map(&trim/1)
18 put(spec, :parameters, schema(names))
19 end
20
21 defp schema(names) do
22 %{type: "object", properties: fields(names), required: names}
23 end
24
25 defp fields(names) do
26 new(names, fn name -> {to_atom(name), %{type: "string"}} end)
27 end
28 end
29
30 defmodule Tools.User.Def do
31 8 defdelegate spec(tool, state), to: Tools.User.Def.Schema, as: :get
32 end
Line Hits Source