PacketFlow.DSL.Intent (packetflow v0.1.0)
DSL for defining PacketFlow intents with capability requirements and effects
Summary
Functions
Define an intent with capability requirements and effect specifications
Define a simple intent with minimal boilerplate
Functions
Define an intent with capability requirements and effect specifications
Example
defintent FileReadIntent do
@capabilities []
@effect FileSystemEffect.read_file
defstruct [:path, :user_id, :session_id]
def new(path, user_id, session_id) do
%__MODULE__{
path: path,
user_id: user_id,
session_id: session_id
}
end
def required_capabilities(intent) do
[FileSystemCap.read(intent.path)]
end
def to_reactor_message(intent, opts \ []) do
%PacketFlow.Reactor.Message{
intent: intent,
capabilities: required_capabilities(intent),
context: opts[:context] || PacketFlow.Context.empty(),
metadata: %{type: :file_read, timestamp: System.system_time()},
timestamp: System.system_time()
}
end
def to_effect(intent, opts \ []) do
PacketFlow.Effect.new(
intent: intent,
capabilities: required_capabilities(intent),
context: opts[:context] || PacketFlow.Context.empty(),
continuation: &FileSystemEffect.read_file/1
)
end
end
Define a simple intent with minimal boilerplate
Example
defsimple_intent FileWriteIntent, [:path, :content, :user_id] do
@capabilities [FileSystemCap.write]
@effect FileSystemEffect.write_file
end