| 1 |
|
defmodule Tools.Sys.Get do |
| 2 |
|
import Log, only: [log: 5, agent: 5] |
| 3 |
|
import Mem, only: [depth: 0, table: 1] |
| 4 |
|
|
| 5 |
|
@icon "👀" |
| 6 |
|
|
| 7 |
|
def spec(name, _state) do |
| 8 |
68 |
spec(name) |
| 9 |
|
end |
| 10 |
|
|
| 11 |
|
defp spec(name) do |
| 12 |
68 |
%{name: name, description: description(), parameters: parameters()} |
| 13 |
|
end |
| 14 |
|
|
| 15 |
68 |
defp description do |
| 16 |
|
"Retrieve data by key" |
| 17 |
|
end |
| 18 |
|
|
| 19 |
:-( |
def icon, do: @icon |
| 20 |
|
|
| 21 |
15 |
def exec(_, %{"key" => key}, %{name: name} = state) do |
| 22 |
15 |
value = fetch(name, key) |
| 23 |
15 |
log(@icon, key, ": ", value, :blue) |
| 24 |
15 |
agent(@icon, key, ": ", value, %{name: name}) |
| 25 |
|
{value, state} |
| 26 |
|
end |
| 27 |
|
|
| 28 |
|
defp parameters do |
| 29 |
68 |
%{type: "object", properties: props(), required: required()} |
| 30 |
|
end |
| 31 |
|
|
| 32 |
68 |
defp required do |
| 33 |
|
["key"] |
| 34 |
|
end |
| 35 |
|
|
| 36 |
|
defp props do |
| 37 |
68 |
%{key: %{type: "string", description: "The key to retrieve data for"}} |
| 38 |
|
end |
| 39 |
|
|
| 40 |
|
defp fetch(name, key) do |
| 41 |
15 |
table = pick(key, name) |
| 42 |
15 |
found(key, :ets.lookup(table, key)) |
| 43 |
|
end |
| 44 |
|
|
| 45 |
:-( |
defp pick("depth_" <> _, _name), do: depth() |
| 46 |
:-( |
defp pick("tree_" <> _, _name), do: depth() |
| 47 |
15 |
defp pick(_key, name), do: table(name) |
| 48 |
|
|
| 49 |
12 |
defp found(key, [{key, value}]), do: value |
| 50 |
3 |
defp found(_key, []), do: "(empty)" |
| 51 |
|
end |