cgp_field/traits/
map_fields.rs

1use 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}