Coverage for src / ezqt_app / domain / results / base_result.py: 87.50%
16 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-06 13:12 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-06 13:12 +0000
1# ///////////////////////////////////////////////////////////////
2# DOMAIN.RESULTS.BASE_RESULT - Generic operation result model
3# Project: ezqt_app
4# ///////////////////////////////////////////////////////////////
6"""Generic typed result model for service orchestration."""
8from __future__ import annotations
10# ///////////////////////////////////////////////////////////////
11# IMPORTS
12# ///////////////////////////////////////////////////////////////
13from dataclasses import dataclass
14from typing import Generic, TypeVar
16from .result_error import ResultError
18T = TypeVar("T")
21# ///////////////////////////////////////////////////////////////
22# DATACLASSES
23# ///////////////////////////////////////////////////////////////
24@dataclass(slots=True)
25class BaseResult(Generic[T]):
26 """Typed generic operation result."""
28 success: bool
29 value: T | None = None
30 error: ResultError | None = None
32 @classmethod
33 def ok(cls, value: T | None = None) -> BaseResult[T]:
34 """Build a successful result."""
35 return cls(success=True, value=value, error=None)
37 @classmethod
38 def fail(cls, code: str, message: str) -> BaseResult[T]:
39 """Build a failed result."""
40 return cls(
41 success=False, value=None, error=ResultError(code=code, message=message)
42 )