ferrite_session/internal/functional/row/
structs.rs1use 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}