//! 大鱼吃小鱼领域错误。 //! //! 错误只表达玩法规则失败,由 HTTP 和 SpacetimeDB adapter 分别映射展示。 use std::{error::Error, fmt}; /// 大鱼吃小鱼应用服务错误。 /// /// 这里不携带 HTTP status 或 SpacetimeDB 字符串错误,避免领域层泄漏 adapter 语义。 #[derive(Clone, Debug, PartialEq, Eq)] pub enum BigFishApplicationError { MissingSessionId, MissingOwnerUserId, MissingRunId, InvalidRuntimeInput, } impl fmt::Display for BigFishApplicationError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::MissingSessionId => f.write_str("big_fish.session_id 不能为空"), Self::MissingOwnerUserId => f.write_str("big_fish.owner_user_id 不能为空"), Self::MissingRunId => f.write_str("big_fish.run_id 不能为空"), Self::InvalidRuntimeInput => f.write_str("big_fish.runtime_input 非法"), } } } impl Error for BigFishApplicationError {} #[derive(Clone, Debug, PartialEq, Eq)] pub enum BigFishFieldError { MissingSessionId, MissingOwnerUserId, MissingMessageId, MissingMessageText, MissingDraft, InvalidLevel, InvalidAssetKind, MissingRunId, InvalidRuntimeInput, } impl fmt::Display for BigFishFieldError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::MissingSessionId => f.write_str("big_fish.session_id 不能为空"), Self::MissingOwnerUserId => f.write_str("big_fish.owner_user_id 不能为空"), Self::MissingMessageId => f.write_str("big_fish.message_id 不能为空"), Self::MissingMessageText => f.write_str("big_fish.message_text 不能为空"), Self::MissingDraft => f.write_str("big_fish.draft 尚未编译"), Self::InvalidLevel => f.write_str("big_fish.level 不在合法等级范围内"), Self::InvalidAssetKind => f.write_str("big_fish.asset_kind 或动作位非法"), Self::MissingRunId => f.write_str("big_fish.run_id 不能为空"), Self::InvalidRuntimeInput => f.write_str("big_fish.runtime_input 非法"), } } } impl Error for BigFishFieldError {}