Skip to main content

haloumi_core/
query.rs

1//! Types and traits related to cell queries.
2
3mod sealed {
4    /// Sealed trait pattern to avoid clients implementing the trait [`super::QueryKind`] on
5    /// external types.
6    pub trait QK {}
7}
8
9/// Marker trait for defining the kind of a query.
10pub trait QueryKind: sealed::QK {}
11
12/// Marker for fixed cell queries.
13#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
14pub struct Fixed;
15
16impl sealed::QK for Fixed {}
17impl QueryKind for Fixed {}
18
19impl std::fmt::Debug for Fixed {
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        write!(f, "Fix")
22    }
23}
24
25/// Marker for advice cell queries.
26#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
27pub struct Advice;
28
29impl sealed::QK for Advice {}
30impl QueryKind for Advice {}
31
32impl std::fmt::Debug for Advice {
33    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34        write!(f, "Adv")
35    }
36}
37
38/// Marker for instance cell queries.
39#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
40pub struct Instance;
41
42impl sealed::QK for Instance {}
43impl QueryKind for Instance {}
44
45impl std::fmt::Debug for Instance {
46    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47        write!(f, "Ins")
48    }
49}