Skip to main content

ferrite_session/internal/functional/row/
structs.rs

1use core::marker::PhantomData;
2
3use serde::{
4  Deserialize,
5  Serialize,
6};
7
8use super::traits::*;
9use crate::internal::functional::type_app::*;
10
11#[derive(Copy, Clone, Serialize, Deserialize)]
12pub enum Bottom {}
13
14#[derive(Copy, Clone, Serialize, Deserialize)]
15pub enum Sum<A, B>
16{
17  Inl(A),
18  Inr(B),
19}
20
21pub struct AppSum<'a, Row, F>
22{
23  pub row: Box<dyn HasSumApp<'a, Row, F> + 'a>,
24}
25
26pub struct ChoiceSelector<N>
27{
28  phantom: PhantomData<N>,
29}
30
31impl<'a, Row, F> AppSum<'a, Row, F>
32where
33  F: TyCon,
34  Row: SumApp<'a, F>,
35{
36  pub fn new(row: Row::Applied) -> AppSum<'a, Row, F>
37  where
38    F: TyCon,
39    Row: SumApp<'a, F>,
40    Row::Applied: Send,
41  {
42    AppSum { row: Box::new(row) }
43  }
44
45  pub fn get_sum(self) -> Row::Applied
46  {
47    *self.row.get_sum()
48  }
49}
50
51impl<N> ChoiceSelector<N>
52{
53  pub const fn new() -> ChoiceSelector<N>
54  {
55    ChoiceSelector {
56      phantom: PhantomData,
57    }
58  }
59}