defmodule Ash.Test.Flow.Flows.Branching do @moduledoc false use Ash.Flow flow do argument :do_branch, :boolean do allow_nil? false default false end argument :do_inner_branch, :boolean do allow_nil? false default false end argument :do_second_branch, :boolean do allow_nil? false default false end returns [:branch, :second_branch] end steps do branch :branch, arg(:do_branch) do branch :inner_branch, arg(:do_inner_branch) do custom :inner_branch_return, Ash.Test.Flow.Steps.SimpleReturn do input %{return: "inner_branch happened"} end end branch :inner_branch_alt, expr(not (^arg(:do_inner_branch))) do custom :inner_branch_alt_return, Ash.Test.Flow.Steps.SimpleReturn do input %{return: "inner_branch didn't happen"} end end custom :branch_result, Ash.Test.Flow.Steps.SimpleReturn do input %{return: expr(^result(:inner_branch) || ^result(:inner_branch_alt))} end end branch :second_branch, arg(:do_second_branch) do custom :second_branch_return, Ash.Test.Flow.Steps.SimpleReturn do input %{return: "second_branch happened"} end end custom :depends_on_inner_branch_step, fn %{second_branch_return: value}, _ -> {:ok, value} end do input %{second_branch_return: result(:second_branch_return)} end end end