use std::future::Future;
use serde::{de::DeserializeOwned, Serialize};
use super::context::DurableContext;
use super::error::DurableObjectError;
use super::websocket::{WebSocketConnection, WebSocketEvent};
use crate::routing::Router;
pub trait DurableObject: Serialize + DeserializeOwned + Default + Sized + 'static {
fn fetch(&mut self) -> Router;
fn websocket(
&mut self,
_ws: &WebSocketConnection,
_event: WebSocketEvent,
_ctx: &DurableContext,
) -> impl Future<Output = Result<(), DurableObjectError>> + Send {
async { Ok(()) }
}
}
#[cfg(test)]
mod tests {
use serde::{Deserialize, Serialize};
use super::DurableObject;
use crate::routing::{CreateRouteNode, Route, Router};
#[derive(Default, Serialize, Deserialize)]
#[skyzen::durable_object]
struct Counter;
impl DurableObject for Counter {
fn fetch(&mut self) -> Router {
Route::new(("/".at(|| async { "ok" }),)).build()
}
}
#[test]
fn durable_object_macro_compiles_on_native_targets() {
let _ = Counter;
}
}