cgp_field/traits/
map_fields.rs1use crate::traits::MapType;
2use crate::types::{Cons, Either, Nil, Void};
3
4pub trait MapFields<Mapper> {
5 type Mapped;
6}
7
8impl<Mapper, Current, Rest> MapFields<Mapper> for Cons<Current, Rest>
9where
10 Mapper: MapType,
11 Rest: MapFields<Mapper>,
12{
13 type Mapped = Cons<Mapper::Map<Current>, Rest::Mapped>;
14}
15
16impl<Mapper> MapFields<Mapper> for Nil {
17 type Mapped = Nil;
18}
19
20impl<Mapper, Current, Rest> MapFields<Mapper> for Either<Current, Rest>
21where
22 Mapper: MapType,
23 Rest: MapFields<Mapper>,
24{
25 type Mapped = Either<Mapper::Map<Current>, Rest::Mapped>;
26}
27
28impl<Mapper> MapFields<Mapper> for Void {
29 type Mapped = Void;
30}