class Delivery(BaseModel):
timestamp: datetime
dimensions: tuple[int, int]
class CompletedDelivery(BaseModel):
status: str
timestamp: datetime
# For the input/output serialization of your handlers
@my_object.handler()
async def deliver(ctx: ObjectContext, delivery: Delivery) -> CompletedDelivery:
# To get state
await ctx.get("delivery", type_hint=Delivery)
# To serialize awakeable payloads
ctx.awakeable(type_hint=Delivery)
# To serialize the results of actions
await ctx.run_typed("some-task", do_something, restate.RunOptions(type_hint=Delivery))
return CompletedDelivery(status="delivered", timestamp=datetime.now())