LiveView callback に params schema を関連付け、受信値を変換します。
@params_schema を対象 callback の直前に置くと、callback 本体へ入る前に parse/1 を呼び出します。
モジュールを指定した場合は構造体、スキーマ定義の map を指定した場合は map が callback の params に
束縛されます。
use ExParamsSchema.Handler
@params_schema Params.Update
def handle_event("update", params, socket) do
params.id
{:noreply, socket}
end対応 callback
@params_schema は public な handle_event/3、handle_params/3、handle_info/2 にだけ
指定できます。handle_event/3 の第 2 引数と handle_params/3 の第 1 引数は、いずれも変数へ
束縛してください。handle_info/2 のタプル内 payload は params という変数名で束縛します。
@params_schema Params.RecordUpdate
def handle_info({:record_update, params}, socket) do
params.id
{:noreply, socket}
end注釈のない callback clause は変換されません。
エラー処理
parse エラーを表示したい場合は、LiveView ごとにエラーハンドラーを指定できます。
use ExParamsSchema.Handler,
on_error: :handle_params_errorエラーハンドラーは handler(source, reason, socket) として呼び出されます。handle_event/3 の
source はイベント名、handle_params/3 と handle_info/2 の source は変換前の params です。
ハンドラーは対象 callback に適した戻り値(通常は {:noreply, socket})を返す必要があります。
on_error: を省略した場合、parse エラー時は {:noreply, socket} を返します。
コンパイル時エラー
@params_schema を対応外の関数、private 関数、または対応 callback でない arity に指定すると
ArgumentError になります。変換対象の params を変数へ束縛していない場合、または
handle_info/2 の payload を params という変数名で束縛していない場合も ArgumentError になります。
Summary
Functions
callback の params 自動変換を有効にします。