Show the reason why a join request was declined
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
740ec3d192
commit
ed6ed99d8f
6 changed files with 203 additions and 17 deletions
|
@ -45,6 +45,7 @@ serde_json = { version = "1.0.64", features = ["preserve_order"] }
|
|||
sha2 = "0.10"
|
||||
similar = "1.3"
|
||||
smol = "1.2.5"
|
||||
thiserror = "1.0.29"
|
||||
toml = "0.5"
|
||||
|
||||
[dev-dependencies]
|
||||
|
|
|
@ -49,6 +49,7 @@ use std::{
|
|||
},
|
||||
time::Instant,
|
||||
};
|
||||
use thiserror::Error;
|
||||
use util::{post_inc, ResultExt, TryFutureExt as _};
|
||||
|
||||
pub use fs::*;
|
||||
|
@ -90,6 +91,18 @@ pub struct Project {
|
|||
nonce: u128,
|
||||
}
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum JoinProjectError {
|
||||
#[error("host declined join request")]
|
||||
HostDeclined,
|
||||
#[error("host closed the project")]
|
||||
HostClosedProject,
|
||||
#[error("host went offline")]
|
||||
HostWentOffline,
|
||||
#[error("{0}")]
|
||||
Other(#[from] anyhow::Error),
|
||||
}
|
||||
|
||||
enum OpenBuffer {
|
||||
Strong(ModelHandle<Buffer>),
|
||||
Weak(WeakModelHandle<Buffer>),
|
||||
|
@ -356,7 +369,7 @@ impl Project {
|
|||
languages: Arc<LanguageRegistry>,
|
||||
fs: Arc<dyn Fs>,
|
||||
cx: &mut AsyncAppContext,
|
||||
) -> Result<ModelHandle<Self>> {
|
||||
) -> Result<ModelHandle<Self>, JoinProjectError> {
|
||||
client.authenticate_and_connect(true, &cx).await?;
|
||||
|
||||
let response = client
|
||||
|
@ -367,7 +380,20 @@ impl Project {
|
|||
|
||||
let response = match response.variant.ok_or_else(|| anyhow!("missing variant"))? {
|
||||
proto::join_project_response::Variant::Accept(response) => response,
|
||||
proto::join_project_response::Variant::Decline(_) => Err(anyhow!("rejected"))?,
|
||||
proto::join_project_response::Variant::Decline(decline) => {
|
||||
match proto::join_project_response::decline::Reason::from_i32(decline.reason) {
|
||||
Some(proto::join_project_response::decline::Reason::Declined) => {
|
||||
Err(JoinProjectError::HostDeclined)?
|
||||
}
|
||||
Some(proto::join_project_response::decline::Reason::Closed) => {
|
||||
Err(JoinProjectError::HostClosedProject)?
|
||||
}
|
||||
Some(proto::join_project_response::decline::Reason::WentOffline) => {
|
||||
Err(JoinProjectError::HostWentOffline)?
|
||||
}
|
||||
None => Err(anyhow!("missing decline reason"))?,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let replica_id = response.replica_id as ReplicaId;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue