Packages

Execution Plane process launch, stdio, PTY, and process-session runtime.

Current section

Files

Jump to
execution_plane_process lib execution_plane process transport local_subprocess.ex
Raw

lib/execution_plane/process/transport/local_subprocess.ex

defmodule ExecutionPlane.Process.Transport.LocalSubprocess do
@moduledoc false
alias ExecutionPlane.Process.Transport
alias ExecutionPlane.Process.Transport.Subprocess
alias ExecutionPlane.Process.Transport.Surface.{Adapter, Capabilities}
@behaviour Adapter
@behaviour Transport
@impl Adapter
def surface_kind, do: :local_subprocess
@impl Adapter
def capabilities do
Capabilities.new!(
remote?: false,
startup_kind: :spawn,
path_semantics: :local,
supports_run?: true,
supports_streaming_stdio?: true,
supports_pty?: true,
supports_user?: true,
supports_env?: true,
supports_cwd?: true,
interrupt_kind: :signal
)
end
@impl Adapter
def normalize_transport_options(nil), do: {:ok, []}
def normalize_transport_options(options) when is_list(options) do
if Keyword.keyword?(options) and options == [] do
{:ok, []}
else
{:error, {:invalid_transport_options, options}}
end
end
def normalize_transport_options(options) when is_map(options) and map_size(options) == 0,
do: {:ok, []}
def normalize_transport_options(options), do: {:error, {:invalid_transport_options, options}}
@impl Transport
defdelegate start(opts), to: Subprocess
@impl Transport
defdelegate start_link(opts), to: Subprocess
@impl Transport
defdelegate run(command, opts), to: Subprocess
@impl Transport
defdelegate send(transport, message), to: Subprocess
@impl Transport
defdelegate subscribe(transport, pid), to: Subprocess
@impl Transport
defdelegate subscribe(transport, pid, tag), to: Subprocess
@impl Transport
defdelegate unsubscribe(transport, pid), to: Subprocess
@impl Transport
defdelegate close(transport), to: Subprocess
@impl Transport
defdelegate force_close(transport), to: Subprocess
@impl Transport
defdelegate interrupt(transport), to: Subprocess
@impl Transport
defdelegate status(transport), to: Subprocess
@impl Transport
defdelegate end_input(transport), to: Subprocess
@impl Transport
defdelegate stderr(transport), to: Subprocess
@impl Transport
defdelegate info(transport), to: Subprocess
end