farmbot_os/farmbot_celery_script/lib/farmbot_celery_script/compilers/farmware_compiler.ex

53 lines
1.6 KiB
Elixir

defmodule FarmbotCeleryScript.Compiler.Farmware do
alias FarmbotCeleryScript.Compiler
def take_photo(%{body: params}, env) do
execute_script(%{args: %{label: "take-photo"}, body: params}, env)
end
def execute_script(%{args: %{label: package}, body: params}, _env) do
env =
Enum.map(params, fn %{args: %{label: key, value: value}} ->
{to_string(key), value}
end)
quote location: :keep do
package = unquote(Compiler.compile_ast(package, env))
env = unquote(Macro.escape(Map.new(env)))
FarmbotCeleryScript.SysCalls.log("Executing Farmware: #{package}", true)
FarmbotCeleryScript.SysCalls.execute_script(package, env)
end
end
def install_first_party_farmware(_, _env) do
quote location: :keep do
FarmbotCeleryScript.SysCalls.log("Installing first party Farmware")
FarmbotCeleryScript.SysCalls.install_first_party_farmware()
end
end
def set_user_env(%{body: pairs}, _env) do
kvs =
Enum.map(pairs, fn %{kind: :pair, args: %{label: key, value: value}} ->
quote location: :keep do
FarmbotCeleryScript.SysCalls.set_user_env(
unquote(key),
unquote(value)
)
end
end)
quote location: :keep do
(unquote_splicing(kvs))
end
end
def update_farmware(%{args: %{package: package}}, env) do
quote location: :keep do
package = unquote(Compiler.compile_ast(package, env))
FarmbotCeleryScript.SysCalls.log("Updating Farmware: #{package}", true)
FarmbotCeleryScript.SysCalls.update_farmware(package)
end
end
end