summaryrefslogtreecommitdiff
path: root/ext/tls/tls_key.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/tls/tls_key.rs')
-rw-r--r--ext/tls/tls_key.rs28
1 files changed, 19 insertions, 9 deletions
diff --git a/ext/tls/tls_key.rs b/ext/tls/tls_key.rs
index 66fac86f8..b7baa604b 100644
--- a/ext/tls/tls_key.rs
+++ b/ext/tls/tls_key.rs
@@ -11,8 +11,6 @@
//! key lookup can handle closing one end of the pair, in which case they will just
//! attempt to clean up the associated resources.
-use deno_core::anyhow::anyhow;
-use deno_core::error::AnyError;
use deno_core::futures::future::poll_fn;
use deno_core::futures::future::Either;
use deno_core::futures::FutureExt;
@@ -33,7 +31,19 @@ use tokio::sync::oneshot;
use webpki::types::CertificateDer;
use webpki::types::PrivateKeyDer;
-type ErrorType = Rc<AnyError>;
+#[derive(Debug, thiserror::Error)]
+pub enum TlsKeyError {
+ #[error(transparent)]
+ Rustls(#[from] rustls::Error),
+ #[error("Failed: {0}")]
+ Failed(ErrorType),
+ #[error(transparent)]
+ JoinError(#[from] tokio::task::JoinError),
+ #[error(transparent)]
+ RecvError(#[from] tokio::sync::broadcast::error::RecvError),
+}
+
+type ErrorType = Arc<Box<str>>;
/// A TLS certificate/private key pair.
/// see https://docs.rs/rustls-pki-types/latest/rustls_pki_types/#cloning-private-keys
@@ -114,7 +124,7 @@ impl TlsKeyResolver {
&self,
sni: String,
alpn: Vec<Vec<u8>>,
- ) -> Result<Arc<ServerConfig>, AnyError> {
+ ) -> Result<Arc<ServerConfig>, TlsKeyError> {
let key = self.resolve(sni).await?;
let mut tls_config = ServerConfig::builder()
@@ -183,7 +193,7 @@ impl TlsKeyResolver {
pub fn resolve(
&self,
sni: String,
- ) -> impl Future<Output = Result<TlsKey, AnyError>> {
+ ) -> impl Future<Output = Result<TlsKey, TlsKeyError>> {
let mut cache = self.inner.cache.borrow_mut();
let mut recv = match cache.get(&sni) {
None => {
@@ -194,7 +204,7 @@ impl TlsKeyResolver {
}
Some(TlsKeyState::Resolving(recv)) => recv.resubscribe(),
Some(TlsKeyState::Resolved(res)) => {
- return Either::Left(ready(res.clone().map_err(|_| anyhow!("Failed"))));
+ return Either::Left(ready(res.clone().map_err(TlsKeyError::Failed)));
}
};
drop(cache);
@@ -212,7 +222,7 @@ impl TlsKeyResolver {
// Someone beat us to it
}
}
- res.map_err(|_| anyhow!("Failed"))
+ res.map_err(TlsKeyError::Failed)
});
Either::Right(async move { handle.await? })
}
@@ -247,13 +257,13 @@ impl TlsKeyLookup {
}
/// Resolve a previously polled item.
- pub fn resolve(&self, sni: String, res: Result<TlsKey, AnyError>) {
+ pub fn resolve(&self, sni: String, res: Result<TlsKey, String>) {
_ = self
.pending
.borrow_mut()
.remove(&sni)
.unwrap()
- .send(res.map_err(Rc::new));
+ .send(res.map_err(|e| Arc::new(e.into_boxed_str())));
}
}