linera_witty/util/
split.rs1use frunk::{hlist, HCons, HNil};
7
8pub trait Split<Target> {
14 type Remainder;
16
17 fn split(self) -> (Target, Self::Remainder);
19}
20
21impl<AnyTail> Split<HNil> for AnyTail {
22 type Remainder = AnyTail;
23
24 fn split(self) -> (HNil, Self::Remainder) {
25 (hlist![], self)
26 }
27}
28
29impl<Head, SourceTail, TargetTail> Split<HCons<Head, TargetTail>> for HCons<Head, SourceTail>
30where
31 SourceTail: Split<TargetTail>,
32{
33 type Remainder = <SourceTail as Split<TargetTail>>::Remainder;
34
35 fn split(self) -> (HCons<Head, TargetTail>, Self::Remainder) {
36 let (tail, remainder) = self.tail.split();
37
38 (
39 HCons {
40 head: self.head,
41 tail,
42 },
43 remainder,
44 )
45 }
46}