// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.oer.its.template.etsi103097.extension;

import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.oer.SwitchIndexer;
import org.bouncycastle.oer.Element;
import org.bouncycastle.oer.Switch;
import org.bouncycastle.oer.its.template.ieee1609dot2.basetypes.Ieee1609Dot2BaseTypes;
import org.bouncycastle.oer.OERDefinition;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1Integer;

public class EtsiTs103097ExtensionModule
{
    public static final ASN1Integer etsiTs102941CrlRequestId;
    public static final ASN1Integer etsiTs102941DeltaCtlRequestId;
    private static final ASN1Encodable[] extensionKeys;
    public static final OERDefinition.Builder ExtId;
    public static final OERDefinition.Builder EtsiTs102941CrlRequest;
    public static final OERDefinition.Builder EtsiTs102941CtlRequest;
    public static final OERDefinition.Builder EtsiTs102941DeltaCtlRequest;
    public static final OERDefinition.Builder Extension;
    public static final OERDefinition.Builder EtsiOriginatingHeaderInfoExtension;
    
    static {
        etsiTs102941CrlRequestId = new ASN1Integer(1L);
        etsiTs102941DeltaCtlRequestId = new ASN1Integer(2L);
        extensionKeys = new ASN1Encodable[] { EtsiTs103097ExtensionModule.etsiTs102941CrlRequestId, EtsiTs103097ExtensionModule.etsiTs102941DeltaCtlRequestId };
        ExtId = OERDefinition.integer(0L, 255L).validSwitchValue(EtsiTs103097ExtensionModule.etsiTs102941CrlRequestId, EtsiTs103097ExtensionModule.etsiTs102941DeltaCtlRequestId).typeName("ExtId");
        EtsiTs102941CrlRequest = OERDefinition.seq(Ieee1609Dot2BaseTypes.HashedId8.label("issuerId"), OERDefinition.optional(Ieee1609Dot2BaseTypes.Time32.label("lastKnownUpdate"))).typeName("EtsiTs102941CrlRequest");
        EtsiTs102941CtlRequest = OERDefinition.seq(Ieee1609Dot2BaseTypes.HashedId8.label("issuerId"), OERDefinition.optional(OERDefinition.integer(0L, 255L).label("lastKnownCtlSequence"))).typeName("EtsiTs102941CtlRequest");
        EtsiTs102941DeltaCtlRequest = EtsiTs103097ExtensionModule.EtsiTs102941CtlRequest.typeName("EtsiTs102941DeltaCtlRequest");
        Extension = OERDefinition.seq(EtsiTs103097ExtensionModule.ExtId.label("id"), OERDefinition.aSwitch(new Switch() {
            private final Element etsiTs102941CrlRequestIdDef = EtsiTs103097ExtensionModule.EtsiTs102941CrlRequest.label("content").build();
            private final Element etsiTs102941DeltaCtlRequestIdDef = EtsiTs103097ExtensionModule.EtsiTs102941DeltaCtlRequest.label("content").build();
            
            @Override
            public Element result(final SwitchIndexer switchIndexer) {
                final ASN1Integer instance = ASN1Integer.getInstance(switchIndexer.get(0).toASN1Primitive());
                if (instance.equals(EtsiTs103097ExtensionModule.etsiTs102941CrlRequestId)) {
                    return this.etsiTs102941CrlRequestIdDef;
                }
                if (instance.equals(EtsiTs103097ExtensionModule.etsiTs102941DeltaCtlRequestId)) {
                    return this.etsiTs102941DeltaCtlRequestIdDef;
                }
                throw new IllegalStateException("unknown extension type " + instance);
            }
            
            @Override
            public ASN1Encodable[] keys() {
                return EtsiTs103097ExtensionModule.extensionKeys;
            }
        }).label("content")).typeName("Extension");
        EtsiOriginatingHeaderInfoExtension = EtsiTs103097ExtensionModule.Extension.typeName("EtsiOriginatingHeaderInfoExtension");
    }
}
