Summary
Functions
Load or create the shape for a validated request, and seek to the correct offset.
Create a version of the given configured Api instance that is specific to the given shape.
Return shape log data.
Validate the parameters for the request and load/create the shape.
Validate request parameters without creating or loading a shape.
Types
@type options() :: [ stack_id: binary(), inspector: {module(), [term()]}, allow_shape_deletion: boolean(), feature_flags: [binary()], keepalive_interval: integer(), long_poll_timeout: integer(), sse_timeout: integer(), max_age: integer(), stack_ready_timeout: integer(), stale_age: integer(), send_cache_headers?: boolean(), encoder: atom(), max_concurrent_requests: map() ]
@type shape_opts() :: [ relation: {binary(), binary()}, where: term(), columns: [binary()] | nil, params: %{optional(binary()) => binary()}, autofill_pk_select?: boolean(), replica: term(), feature_flags: [binary()], storage: nil | Electric.Shapes.Shape.storage_config(), log_mode: term(), table: binary(), schema: binary(), namespace: binary() ]
@type t() :: %Electric.Shapes.Api{ allow_shape_deletion: term(), configured: term(), encoder: term(), feature_flags: term(), inspector: term(), keepalive_interval: term(), long_poll_timeout: term(), max_age: term(), max_concurrent_requests: term(), send_cache_headers?: term(), shape: term(), sse_encoder: term(), sse_timeout: term(), stack_id: term(), stack_ready_timeout: term(), stale_age: term() }
Functions
@spec delete_shape(Electric.Shapes.Api.Request.t()) :: Electric.Shapes.Api.Response.t()
@spec delete_shape(Plug.Conn.t()) :: Plug.Conn.t()
@spec encode_error_message(t() | Electric.Shapes.Api.Request.t(), term()) :: Enum.t()
@spec encode_message(Electric.Shapes.Api.Request.t(), term()) :: Enum.t()
@spec load_shape_info(Electric.Shapes.Api.Request.t()) :: {:ok, Electric.Shapes.Api.Request.t()} | {:error, Electric.Shapes.Api.Response.t()}
Load or create the shape for a validated request, and seek to the correct offset.
Must be called with a request returned by validate_params/2.
@spec options(Plug.Conn.t()) :: Plug.Conn.t()
@spec predefined_shape(t(), shape_opts()) :: {:ok, t()} | {:error, term()}
Create a version of the given configured Api instance that is specific to the given shape.
This allows you to provide a locked-down version of the API that ignores
shape-definition parameters such as table, where and columns and only
honours the shape-tailing parameters such as offset and handle.
@spec serve_shape_log(Electric.Shapes.Api.Request.t()) :: Electric.Shapes.Api.Response.t()
Return shape log data.
@spec stack_id( t() | Electric.Shapes.Api.Request.t() | Electric.Shapes.Api.Response.t() ) :: String.t()
@spec validate(t(), %{required(atom() | binary()) => term()}) :: {:ok, Electric.Shapes.Api.Request.t()} | {:error, Electric.Shapes.Api.Response.t()}
Validate the parameters for the request and load/create the shape.
This is a convenience wrapper that calls validate_params/2 followed by
load_shape_info/1. Use the individual functions when you need to perform
actions (like admission control) between validation and shape creation.
@spec validate_for_delete(t(), %{required(atom() | binary()) => term()}) :: {:ok, Electric.Shapes.Api.Request.t()} | {:error, Electric.Shapes.Api.Response.t()}
@spec validate_params(t(), %{required(atom() | binary()) => term()}) :: {:ok, Electric.Shapes.Api.Request.t()} | {:error, Electric.Shapes.Api.Response.t()}
Validate request parameters without creating or loading a shape.
Returns a validated Request with parsed parameters and shape definition,
but no shape handle. Call load_shape_info/1 afterwards to create or look
up the shape.