Files
oak-gpui/zed/src/channel.rs
T
5338b30c00 Remove remaining instances of router
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-08-19 19:38:17 +02:00

73 lines
1.5 KiB
Rust

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<ChannelDetails>,
channels: HashMap<u64, WeakModelHandle<Channel>>,
rpc: Arc<Client>,
}
pub struct ChannelDetails {
id: u64,
name: String,
}
pub struct Channel {
details: ChannelDetails,
first_message_id: Option<u64>,
messages: Option<VecDeque<ChannelMessage>>,
rpc: Arc<Client>,
_subscription: rpc::Subscription,
}
pub struct ChannelMessage {
id: u64,
}
pub enum Event {}
impl Entity for ChannelList {
type Event = Event;
}
impl ChannelList {
fn new(rpc: Arc<rpc::Client>) -> 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<Client>, cx: &mut ModelContext<Self>) -> 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<ChannelMessageSent>,
rpc: rpc::Client,
cx: &mut ModelContext<Self>,
) -> Result<()> {
Ok(())
}
}