decode_owned_component.bend
bendvy-ecs-core@0.1.0.1 · 29 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.1/change_tick.bend as Tick
3import bendvy-ecs-core@0.1.0.1/decode_frame.bend as F
4import bendvy-ecs-core@0.1.0.1/decode_owned_journal.bend as Journal
5import bendvy-ecs-core@0.1.0.1/decode_requests.bend as Request
6import bendvy-ecs-core@0.1.0.1/component.bend as Cmp
7import bendvy-ecs-core@0.1.0.1/column.bend as Col
8import bendvy-ecs-core@0.1.0.1/compose.bend as Query
9import bendvy-ecs-core@0.1.0.1/capabilities.bend as Cap
10import bendvy-ecs-core@0.1.0.1/world.bend as W
11import bendvy-ecs-core@0.1.0.1/transaction.bend as T
12import bendvy-ecs-core@0.1.0.1/bundle_batch.bend as Batch
13import bendvy-ecs-core@0.1.0.1/decode_data.bend as D
14import bendvy-ecs-core@0.1.0.1/ordinary_declaration.bend as Identity
15import bendvy-ecs-core@0.1.0.1/persistence_declaration.bend as Declaration
16
17type Output<P:Type> is Type:Written{} Refused{owner:Maybe<&1,P>,error:W.WorldError}
18def written(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~Q:Type,~identity:Identity.Declaration<S,P>,~project:P -> P & D.Raw,declaration:Declaration.Constructed<S,P,identity,project>,prepared:List<Batch.Prepared<S,Request.Packet<P>>>,handle:W.Handle<S>,error:Maybe<&2,W.WorldError>,cursor:Maybe<&2,Tick.Tick>,receipts:List<Journal.Receipt<W.World<S,Store,R,E>,Request.Packet<P>,Q>>,pending:List<Journal.Pending<Q>>,result:Cmp.SetResult<T.Tx<W.World<S,Store,R,E>,E>,P>) -> F.Frame<S,Store,R,E,P,Q,identity,project> & Output<P>:
19 match result:
20 case Cmp.Written{tx}:(F.Frame{Request.Owner{Batch.Batch{tx,prepared},declaration},handle,error,cursor,receipts,pending},Written{})
21 case Cmp.WriteRejected{tx,owner,+reason}:(F.Frame{Request.Owner{Batch.Batch{tx,prepared},declaration},handle,Query.first_error(error,reason),cursor,receipts,pending},Refused{Some{owner},reason})
22 case Cmp.WriteFailure{tx,+reason}:(F.Frame{Request.Owner{Batch.Batch{tx,prepared},declaration},handle,Query.first_error(error,reason),cursor,receipts,pending},Refused{None{},reason})
23
24def set(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~Q:Type,~identity:Identity.Declaration<S,P>,~project:P -> P & D.Raw,~Rest:Type,~V:Data,~Token:Data,~take:Store -> Rest & Col.Column<S,P>,~put:Rest -> Col.Column<S,P> -> Store,~view:P -> P & V,~family:Cmp.Family<S,Store,Rest,P,V,Token,take,put,view>,frame:F.Frame<S,Store,R,E,P,Q,identity,project>,input:Query.Insert<S,P>) -> F.Frame<S,Store,R,E,P,Q,identity,project> & Output<P>:
25 match frame input:
26 case F.Frame{Request.Owner{Batch.Batch{tx,prepared},declaration},handle,error,cursor,receipts,pending} Query.Insert{target,owner}:written(~S,~Store,~R,~E,~P,~Q,~identity,~project,declaration,prepared,handle,error,cursor,receipts,pending,Cmp.tx_set(~S,~Store,~R,~E,~Rest,~P,~V,~Token,~take,~put,~view,family,tx,target,owner))
27
28def grant(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~Q:Type,~identity:Identity.Declaration<S,P>,~project:P -> P & D.Raw,~Rest:Type,~V:Data,~Token:Data,~take:Store -> Rest & Col.Column<S,P>,~put:Rest -> Col.Column<S,P> -> Store,~view:P -> P & V,~family:Cmp.Family<S,Store,Rest,P,V,Token,take,put,view>) -> Cap.OwnedRequest<F.Frame<S,Store,R,E,P,Q,identity,project>,Query.Insert<S,P>,Output<P>>:
29 Cap.OwnedRequest{frame => input => set(~S,~Store,~R,~E,~P,~Q,~identity,~project,~Rest,~V,~Token,~take,~put,~view,~family,frame,input)}