use crate::usimp::subscription; use crate::usimp::*; use serde::{Deserialize, Serialize}; use serde_json::{from_value, to_value, Value}; #[derive(Serialize, Deserialize, Clone)] struct Input { room_id: Uuid, events: Vec, } #[derive(Serialize, Deserialize, Clone)] struct Output { events: Vec, } pub async fn handle(input: &InputEnvelope, session: Option) -> Result { Ok(to_value( new_event(from_value(input.data.clone())?, session).await?, )?) } async fn new_event(input: Input, session: Option) -> Result { let _account = get_account_opt(&session)?; let mut uuids = vec![]; // TODO check permissions for mut event in input.events { let uuid = match event.id { Some(id) => id, None => Uuid::new_v4(), }; event.id = Some(uuid); uuids.push(uuid); subscription::push_room(&input.room_id, event).await?; } Ok(Output {events: uuids}) }