Skip to main content

ipld_car/config/
dag_layout.rs

1/// Defines the layout of the Directed Acyclic Graph (DAG).
2#[cfg_attr(feature = "std", derive(Debug))]
3#[derive(Clone, Copy, PartialEq, Eq, Default)]
4pub enum DAGLayout {
5	#[default]
6	Flat,
7	Balanced(MaxChildren),
8	Trickle(MaxChildren, LayerRepeats),
9}
10
11impl DAGLayout {
12	pub fn max_children_per_layer(&self) -> u32 {
13		match self {
14			Self::Flat => u32::MAX,
15			Self::Balanced(max) => *max as u8 as u32,
16			Self::Trickle(max, _) => *max as u8 as u32,
17		}
18	}
19}
20
21/// Maximum children count for balanced/trickle DAG layouts (future use).
22#[cfg_attr(feature = "std", derive(Debug))]
23#[derive(Default, Clone, Copy, PartialEq, Eq)]
24#[repr(u8)]
25pub enum MaxChildren {
26	C11 = 11,
27	C44 = 44,
28	#[default]
29	C174 = 174,
30}
31
32/// Number of times a layer repeats in trickle DAG layout (future use).
33#[cfg_attr(feature = "std", derive(Debug))]
34#[derive(Clone, Copy, Default, PartialEq, Eq)]
35#[repr(u8)]
36pub enum LayerRepeats {
37	LR1 = 1,
38	LR4 = 4,
39	#[default]
40	LR16 = 16,
41}