Allow unsetting ns/db on rpc (#4373)

This commit is contained in:
Micha de Vries 2024-07-18 09:07:57 +02:00 committed by GitHub
parent bfc474e4d8
commit c0c99d33b7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -85,13 +85,30 @@ pub trait RpcContext {
// ------------------------------ // ------------------------------
async fn yuse(&mut self, params: Array) -> Result<impl Into<Data>, RpcError> { async fn yuse(&mut self, params: Array) -> Result<impl Into<Data>, RpcError> {
// For both ns+db, string = change, null = unset, none = do nothing
// We need to be able to adjust either ns or db without affecting the other
// To be able to select a namespace, and then list resources in that namespace, as an example
let (ns, db) = params.needs_two()?; let (ns, db) = params.needs_two()?;
if let Value::Strand(ns) = ns { let unset_ns = matches!(ns, Value::Null);
let unset_db = matches!(db, Value::Null);
// If we unset the namespace, we must also unset the database
if unset_ns && !unset_db {
return Err(RpcError::InvalidParams);
}
if unset_ns {
self.session_mut().ns = None;
} else if let Value::Strand(ns) = ns {
self.session_mut().ns = Some(ns.0); self.session_mut().ns = Some(ns.0);
} }
if let Value::Strand(db) = db {
if unset_db {
self.session_mut().db = None;
} else if let Value::Strand(db) = db {
self.session_mut().db = Some(db.0); self.session_mut().db = Some(db.0);
} }
Ok(Value::None) Ok(Value::None)
} }