spacetimedsl 0.20.0

Ergonomic DSL for SpacetimeDB
Documentation
use crate::{ContextType, SpacetimeDSLError};

pub trait GetSender {
    fn sender(&self) -> Result<spacetimedb::Identity, SpacetimeDSLError>;
}

macro_rules! impl_get_sender_err {
    ($context:ident, $variant:ident) => {
        impl GetSender for spacetimedb::$context {
            fn sender(&self) -> Result<spacetimedb::Identity, SpacetimeDSLError> {
                Err(crate::get_err(
                    "The Sender Identity is not accessible from Anonymous View Contexts",
                    ContextType::$variant,
                ))
            }
        }
    };
}

macro_rules! impl_get_sender_ok {
    ($context:ident) => {
        impl GetSender for spacetimedb::$context {
            fn sender(&self) -> Result<spacetimedb::Identity, SpacetimeDSLError> {
                Ok(spacetimedb::$context::sender(self))
            }
        }
    };
}

impl_get_sender_err!(AnonymousViewContext, AnonymousView);

impl_get_sender_ok!(ReducerContext);

impl GetSender for spacetimedb::TxContext {
    fn sender(&self) -> Result<spacetimedb::Identity, SpacetimeDSLError> {
        Ok(spacetimedb::ReducerContext::sender(self))
    }
}

impl_get_sender_ok!(ViewContext);