All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.hamnaberg.json.codec.Encoders Maven / Gradle / Ivy

The newest version!
package net.hamnaberg.json.codec;

import net.hamnaberg.arities.*;
import net.hamnaberg.json.Json;

import java.net.URI;
import java.net.URL;
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.function.Function;
import java.util.stream.Collectors;

public abstract class Encoders {
    private Encoders(){}

    public static final EncodeJson EIdentity = j -> j;
    public static final EncodeJson EString = Json::jString;
    public static final EncodeJson ENumber = Json::jNumber;
    public static final EncodeJson ELong = Json::jNumber;
    public static final EncodeJson EInt = Json::jNumber;
    public static final EncodeJson EDouble = Json::jNumber;
    public static final EncodeJson EBoolean = Json::jBoolean;
    public static final EncodeJson EURI = EString.contramap(URI::toString);
    public static final EncodeJson EURL = EString.contramap(URL::toExternalForm);
    public static final EncodeJson EUUID = EString.contramap(UUID::toString);
    public static final EncodeJson EISODateTimeUTC = zonedDateTimeEncoder(DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneOffset.UTC));
    public static final EncodeJson EISOInstantUTC = instantEncoder(DateTimeFormatter.ISO_INSTANT.withZone(ZoneOffset.UTC));

    public static EncodeJson zonedDateTimeEncoder(DateTimeFormatter formatter) {
        return EString.contramap(formatter::format);
    }

    public static EncodeJson instantEncoder(DateTimeFormatter formatter) {
        return EString.contramap(formatter::format);
    }

    public static  EncodeJson> listEncoder(EncodeJson encoder) {
        return value -> Json.jArray(value.stream().map(encoder::toJson).collect(Collectors.toUnmodifiableList()));
    }

    public static  EncodeJson> setEncoder(EncodeJson encoder) {
        return listEncoder(encoder).contramap(List::copyOf);
    }

    public static  EncodeJson> optionalencoder(EncodeJson encoder) {
        return value -> value.map(encoder::toJson).orElse(Json.jNull());
    }

    public static  EncodeJson objectEncoder(Function encoder) {
        return a -> encoder.apply(a).asJValue();
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, Function> f) {
        return type -> encode(e1, e2).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, Function> f) {
        return type -> encode(e1, e2, e3).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, Function> f) {
        return type -> encode(e1, e2, e3, e4).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19())),
                Json.tuple(e20.name, e20.toJson(tuple._20()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19())),
                Json.tuple(e20.name, e20.toJson(tuple._20())),
                Json.tuple(e21.name, e21.toJson(tuple._21()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19())),
                Json.tuple(e20.name, e20.toJson(tuple._20())),
                Json.tuple(e21.name, e21.toJson(tuple._21())),
                Json.tuple(e22.name, e22.toJson(tuple._22()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19())),
                Json.tuple(e20.name, e20.toJson(tuple._20())),
                Json.tuple(e21.name, e21.toJson(tuple._21())),
                Json.tuple(e22.name, e22.toJson(tuple._22())),
                Json.tuple(e23.name, e23.toJson(tuple._23()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, FieldEncoder e24) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19())),
                Json.tuple(e20.name, e20.toJson(tuple._20())),
                Json.tuple(e21.name, e21.toJson(tuple._21())),
                Json.tuple(e22.name, e22.toJson(tuple._22())),
                Json.tuple(e23.name, e23.toJson(tuple._23())),
                Json.tuple(e24.name, e24.toJson(tuple._24()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, FieldEncoder e24, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, FieldEncoder e24, FieldEncoder e25) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19())),
                Json.tuple(e20.name, e20.toJson(tuple._20())),
                Json.tuple(e21.name, e21.toJson(tuple._21())),
                Json.tuple(e22.name, e22.toJson(tuple._22())),
                Json.tuple(e23.name, e23.toJson(tuple._23())),
                Json.tuple(e24.name, e24.toJson(tuple._24())),
                Json.tuple(e25.name, e25.toJson(tuple._25()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, FieldEncoder e24, FieldEncoder e25, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, FieldEncoder e24, FieldEncoder e25, FieldEncoder e26) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19())),
                Json.tuple(e20.name, e20.toJson(tuple._20())),
                Json.tuple(e21.name, e21.toJson(tuple._21())),
                Json.tuple(e22.name, e22.toJson(tuple._22())),
                Json.tuple(e23.name, e23.toJson(tuple._23())),
                Json.tuple(e24.name, e24.toJson(tuple._24())),
                Json.tuple(e25.name, e25.toJson(tuple._25())),
                Json.tuple(e26.name, e26.toJson(tuple._26()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, FieldEncoder e24, FieldEncoder e25, FieldEncoder e26, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26).toJson(f.apply(type));
    }

    public static  EncodeJson> encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, FieldEncoder e24, FieldEncoder e25, FieldEncoder e26, FieldEncoder e27) {
        return tuple -> Json.jObject(
                Json.tuple(e1.name, e1.toJson(tuple._1())),
                Json.tuple(e2.name, e2.toJson(tuple._2())),
                Json.tuple(e3.name, e3.toJson(tuple._3())),
                Json.tuple(e4.name, e4.toJson(tuple._4())),
                Json.tuple(e5.name, e5.toJson(tuple._5())),
                Json.tuple(e6.name, e6.toJson(tuple._6())),
                Json.tuple(e7.name, e7.toJson(tuple._7())),
                Json.tuple(e8.name, e8.toJson(tuple._8())),
                Json.tuple(e9.name, e9.toJson(tuple._9())),
                Json.tuple(e10.name, e10.toJson(tuple._10())),
                Json.tuple(e11.name, e11.toJson(tuple._11())),
                Json.tuple(e12.name, e12.toJson(tuple._12())),
                Json.tuple(e13.name, e13.toJson(tuple._13())),
                Json.tuple(e14.name, e14.toJson(tuple._14())),
                Json.tuple(e15.name, e15.toJson(tuple._15())),
                Json.tuple(e16.name, e16.toJson(tuple._16())),
                Json.tuple(e17.name, e17.toJson(tuple._17())),
                Json.tuple(e18.name, e18.toJson(tuple._18())),
                Json.tuple(e19.name, e19.toJson(tuple._19())),
                Json.tuple(e20.name, e20.toJson(tuple._20())),
                Json.tuple(e21.name, e21.toJson(tuple._21())),
                Json.tuple(e22.name, e22.toJson(tuple._22())),
                Json.tuple(e23.name, e23.toJson(tuple._23())),
                Json.tuple(e24.name, e24.toJson(tuple._24())),
                Json.tuple(e25.name, e25.toJson(tuple._25())),
                Json.tuple(e26.name, e26.toJson(tuple._26())),
                Json.tuple(e27.name, e27.toJson(tuple._27()))
        );
    }

    public static  EncodeJson encode(FieldEncoder e1, FieldEncoder e2, FieldEncoder e3, FieldEncoder e4, FieldEncoder e5, FieldEncoder e6, FieldEncoder e7, FieldEncoder e8, FieldEncoder e9, FieldEncoder e10, FieldEncoder e11, FieldEncoder e12, FieldEncoder e13, FieldEncoder e14, FieldEncoder e15, FieldEncoder e16, FieldEncoder e17, FieldEncoder e18, FieldEncoder e19, FieldEncoder e20, FieldEncoder e21, FieldEncoder e22, FieldEncoder e23, FieldEncoder e24, FieldEncoder e25, FieldEncoder e26, FieldEncoder e27, Function> f) {
        return type -> encode(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27).toJson(f.apply(type));
    }
}