Skip to content

Instantly share code, notes, and snippets.

defmodule App.Datalog do
use DatalogBuilder
import_rules(App.Account.Rules)
import_rules(App.Document.Rules)
end
@lenileiro
lenileiro / datalog.ex
Last active April 17, 2024 21:02
Elixir Datalog modelled as ReBAC (Relationship-Based Access Control) - Inspired by Google Zanzibar authorization system
defmodule Datalog do
defstruct rules: [], facts: %{}
alias Datalog.{Fact, Rule}
alias __MODULE__
def new, do: %__MODULE__{}
def add_rule(%Datalog{rules: rules} = datalog, %Rule{} = rule) do
{:ok, %Datalog{datalog | rules: [rule | rules]}}
@lenileiro
lenileiro / task_async_stream_supervisor.ex
Created November 2, 2023 12:34 — forked from eskil/task_async_stream_supervisor.ex
Example of how to do retryable Task.Supervisor.async_stream since it doesn't do retries for you
require Integer
require Logger
defmodule Processor do
def process(state) do
:timer.sleep(1000)
result = :os.system_time(:millisecond)
Logger.info("process(#{state}) -> #{result}")
case Integer.is_even(result) do
true ->