equator/
structures.rs

1use crate::{
2    decompose,
3    traits::{DynInfo, DynInfoType, Expr},
4};
5use core::fmt;
6
7pub struct DebugMessageImpl<'a, D: decompose::Recompose> {
8    pub result: &'a D::Result,
9    pub source: &'a D::Source,
10    pub debug_lhs: &'a D::DebugLhs,
11    pub debug_rhs: &'a D::DebugRhs,
12    pub debug_cmp: D::DebugCmp,
13    pub vtable: &'a D::VTable,
14}
15pub struct DebugMessage<'a, D: decompose::Recompose> {
16    pub source: &'a WithSource<D::Source, &'static D::VTable>,
17    pub debug_lhs: D::DebugLhs,
18    pub debug_rhs: D::DebugRhs,
19    pub debug_cmp: D::DebugCmp,
20    pub message: fmt::Arguments<'a>,
21}
22impl<D: decompose::Recompose> fmt::Debug for DebugMessage<'_, D> {
23    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24        D::debug_final(self, f)
25    }
26}
27
28impl<D: decompose::Recompose> Copy for DebugMessage<'_, D> {}
29impl<D: decompose::Recompose> Clone for DebugMessage<'_, D> {
30    fn clone(&self) -> Self {
31        *self
32    }
33}
34
35#[derive(Copy, Clone)]
36pub struct WithSource<S, V> {
37    pub source: S,
38    pub file: &'static str,
39    pub line: u32,
40    pub col: u32,
41    pub vtable: V,
42}
43
44#[derive(Copy, Clone)]
45pub struct Finalize<E> {
46    pub inner: E,
47}
48
49impl<E: DynInfoType> DynInfoType for Finalize<E> {
50    type VTable = E::VTable;
51    const NULL_VTABLE: &'static Self::VTable = E::NULL_VTABLE;
52}
53
54impl<E: DynInfo> DynInfo for Finalize<E> {
55    const VTABLE: &'static Self::VTable = E::VTABLE;
56}
57
58impl<E> Expr for &Finalize<E> {
59    type Result = Result<(), ()>;
60    type Marker = bool;
61
62    #[inline(always)]
63    fn eval_expr(&self) -> bool {
64        core::unreachable!()
65    }
66}
67
68impl<E: Expr> Expr for &&Finalize<E> {
69    type Result = E::Result;
70    type Marker = E::Marker;
71
72    #[inline(always)]
73    fn eval_expr(&self) -> bool {
74        self.inner.eval_expr()
75    }
76}