use polariton::operation::{ParameterTable, OperationResponse}; use polariton_server::operations::{Operation, OperationCode}; pub struct SimpleChatFunc, &U, &crate::state::ChatImpl) -> Result, i16>) + Send + Sync, C: Send + Sync + 'static = ()> { _user_ty: std::marker::PhantomData, _custom_ty: std::marker::PhantomData, chat: crate::state::ChatImpl, func: F, } impl , &U, &crate::state::ChatImpl) -> Result, i16>) + Send + Sync> SimpleChatFunc { pub fn new(f: F, chat: crate::state::ChatImpl) -> Self { Self { _user_ty: std::marker::PhantomData::default(), _custom_ty: std::marker::PhantomData::default(), chat, func: f, } } } impl , &U, &crate::state::ChatImpl) -> Result, i16>) + Send + Sync> Operation for SimpleChatFunc { type User = U; fn handle(&self, p: polariton::operation::ParameterTable, u: &Self::User) -> OperationResponse { match (self.func)(p, u, &self.chat) { Ok(p_out) => { OperationResponse { code: CODE, return_code: 0, message: polariton::operation::Typed::Null, params: p_out, } }, Err(e_code) => { OperationResponse { code: CODE, return_code: e_code, message: polariton::operation::Typed::Null, params: std::collections::HashMap::new().into(), } } } } } impl , &U, &crate::state::ChatImpl) -> Result, i16>) + Send + Sync> OperationCode for SimpleChatFunc { fn op_code() -> u8 { CODE } }