durable-actors 0.2.5

Standalone regional durable-object control plane, host, and durability runtime
Documentation
use anyhow::{Result, ensure};
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Clone, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct SqlQuery {
    pub sql: String,
    #[serde(default)]
    pub params: Vec<Value>,
}

impl SqlQuery {
    pub(crate) fn validate(&self) -> Result<()> {
        ensure!(
            !self.sql.trim().is_empty() && self.sql.len() <= 16_384,
            "SQL must be between 1 and 16384 bytes"
        );
        ensure!(self.params.len() <= 100, "too many SQL parameters");
        for value in &self.params {
            ensure!(
                value.is_null()
                    || value.is_boolean()
                    || value.is_number()
                    || value.as_str().is_some_and(|s| s.len() <= 16_384),
                "parameters must be JSON scalars of at most 16384 bytes"
            );
        }
        Ok(())
    }
}

#[derive(Debug, Serialize)]
pub(crate) struct SqlResult {
    pub rows: Vec<Value>,
    pub truncated: bool,
}

#[derive(Debug)]
pub(crate) struct SqlQueryError(pub String);
impl std::fmt::Display for SqlQueryError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.write_str(&self.0)
    }
}
impl std::error::Error for SqlQueryError {}