-module(lustre@server_component). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([component/1, route/1, data/1, include/1, subscribe/2, unsubscribe/1, emit/2, set_selector/1, decode_action/1, encode_patch/1]). -spec component(list(lustre@internals@vdom:attribute(SIZ))) -> lustre@internals@vdom:element(SIZ). component(Attrs) -> lustre@element:element(<<"lustre-server-component"/utf8>>, Attrs, []). -spec route(binary()) -> lustre@internals@vdom:attribute(any()). route(Path) -> lustre@attribute:attribute(<<"route"/utf8>>, Path). -spec data(gleam@json:json()) -> lustre@internals@vdom:attribute(any()). data(Json) -> _pipe = Json, _pipe@1 = gleam@json:to_string(_pipe), lustre@attribute:attribute(<<"data-lustre-data"/utf8>>, _pipe@1). -spec include(list(binary())) -> lustre@internals@vdom:attribute(any()). include(Properties) -> _pipe = Properties, _pipe@1 = gleam@json:array(_pipe, fun gleam@json:string/1), _pipe@2 = gleam@json:to_string(_pipe@1), lustre@attribute:attribute(<<"data-lustre-include"/utf8>>, _pipe@2). -spec subscribe(binary(), fun((lustre@internals@patch:patch(SJK)) -> nil)) -> lustre@internals@runtime:action(SJK, lustre:server_component()). subscribe(Id, Renderer) -> {subscribe, Id, Renderer}. -spec unsubscribe(binary()) -> lustre@internals@runtime:action(any(), lustre:server_component()). unsubscribe(Id) -> {unsubscribe, Id}. -spec emit(binary(), gleam@json:json()) -> lustre@effect:effect(any()). emit(Event, Data) -> lustre@effect:event(Event, Data). -spec do_set_selector( gleam@erlang@process:selector(lustre@internals@runtime:action(any(), SKA)) ) -> lustre@effect:effect(SKA). do_set_selector(Sel) -> lustre@effect:from( fun(_) -> Self = gleam@erlang@process:new_subject(), gleam@erlang@process:send(Self, {set_selector, Sel}) end ). -spec set_selector( gleam@erlang@process:selector(lustre@internals@runtime:action(any(), SJU)) ) -> lustre@effect:effect(SJU). set_selector(Sel) -> do_set_selector(Sel). -spec decode_event(gleam@dynamic:dynamic_()) -> {ok, lustre@internals@runtime:action(any(), any())} | {error, list(gleam@dynamic:decode_error())}. decode_event(Dyn) -> gleam@result:'try'( (gleam@dynamic:tuple3( fun gleam@dynamic:int/1, fun gleam@dynamic:dynamic/1, fun gleam@dynamic:dynamic/1 ))(Dyn), fun(_use0) -> {Kind, Name, Data} = _use0, gleam@bool:guard( Kind /= 4, {error, [{decode_error, gleam@int:to_string(4), gleam@int:to_string(Kind), [<<"0"/utf8>>]}]}, fun() -> gleam@result:'try'( gleam@dynamic:string(Name), fun(Name@1) -> {ok, {event, Name@1, Data}} end ) end ) end ). -spec decode_attr(gleam@dynamic:dynamic_()) -> {ok, {binary(), gleam@dynamic:dynamic_()}} | {error, list(gleam@dynamic:decode_error())}. decode_attr(Dyn) -> (gleam@dynamic:tuple2( fun gleam@dynamic:string/1, fun gleam@dynamic:dynamic/1 ))(Dyn). -spec decode_attrs(gleam@dynamic:dynamic_()) -> {ok, lustre@internals@runtime:action(any(), any())} | {error, list(gleam@dynamic:decode_error())}. decode_attrs(Dyn) -> gleam@result:'try'( (gleam@dynamic:tuple2( fun gleam@dynamic:int/1, fun gleam@dynamic:dynamic/1 ))(Dyn), fun(_use0) -> {Kind, Attrs} = _use0, gleam@bool:guard( Kind /= 5, {error, [{decode_error, gleam@int:to_string(5), gleam@int:to_string(Kind), [<<"0"/utf8>>]}]}, fun() -> gleam@result:'try'( (gleam@dynamic:list(fun decode_attr/1))(Attrs), fun(Attrs@1) -> {ok, {attrs, Attrs@1}} end ) end ) end ). -spec decode_action(gleam@dynamic:dynamic_()) -> {ok, lustre@internals@runtime:action(any(), lustre:server_component())} | {error, list(gleam@dynamic:decode_error())}. decode_action(Dyn) -> (gleam@dynamic:any([fun decode_event/1, fun decode_attrs/1]))(Dyn). -spec encode_patch(lustre@internals@patch:patch(any())) -> gleam@json:json(). encode_patch(Patch) -> lustre@internals@patch:patch_to_json(Patch).