use crate::rpc::{self, Client}; use anyhow::Result; use gpui::{Entity, ModelContext, WeakModelHandle}; use std::{ collections::{HashMap, VecDeque}, sync::Arc, }; use zrpc::{proto::ChannelMessageSent, TypedEnvelope}; pub struct ChannelList { available_channels: Vec, channels: HashMap>, rpc: Arc, } pub struct ChannelDetails { id: u64, name: String, } pub struct Channel { details: ChannelDetails, first_message_id: Option, messages: Option>, rpc: Arc, _subscription: rpc::Subscription, } pub struct ChannelMessage { id: u64, } pub enum Event {} impl Entity for ChannelList { type Event = Event; } impl ChannelList { fn new(rpc: Arc) -> Self { Self { available_channels: Default::default(), channels: Default::default(), rpc, } } } impl Entity for Channel { type Event = (); } impl Channel { pub fn new(details: ChannelDetails, rpc: Arc, cx: &mut ModelContext) -> Self { let _subscription = rpc.subscribe_from_model(details.id, cx, Self::handle_message_sent); Self { details, rpc, first_message_id: None, messages: None, _subscription, } } fn handle_message_sent( &mut self, message: TypedEnvelope, rpc: rpc::Client, cx: &mut ModelContext, ) -> Result<()> { Ok(()) } }