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

defintent(name, list)

(macro)

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

defsimple_intent(name, fields, list)

(macro)

Define a simple intent with minimal boilerplate

Example

defsimple_intent FileWriteIntent, [:path, :content, :user_id] do
  @capabilities [FileSystemCap.write]
  @effect FileSystemEffect.write_file
end