use crate::api::RedDBResult;
use crate::application::OperationContext;
use crate::runtime::write_gate::WriteKind;
use super::RedDBServer;
impl RedDBServer {
pub(crate) fn build_read_context(
&self,
request_id: Option<&str>,
principal: Option<&str>,
) -> OperationContext {
let ctx = match request_id {
Some(id) if !id.is_empty() => OperationContext::read_only(id),
_ => OperationContext::implicit(),
};
match principal {
Some(p) if !p.is_empty() => ctx.with_principal(p),
_ => ctx,
}
}
pub(crate) fn build_write_context(
&self,
kind: WriteKind,
request_id: Option<&str>,
principal: Option<&str>,
) -> RedDBResult<OperationContext> {
let consent = self.runtime.write_gate().check_consent(kind)?;
let request_id = request_id
.filter(|id| !id.is_empty())
.map(|id| id.to_string())
.unwrap_or_else(|| {
OperationContext::implicit().request_id
});
let mut ctx = OperationContext::writing(consent, request_id);
if let Some(p) = principal.filter(|p| !p.is_empty()) {
ctx = ctx.with_principal(p);
}
Ok(ctx)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn module_compiles() {}
}