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

package com.google.crypto.tink.internal;

import java.security.GeneralSecurityException;
import com.google.crypto.tink.Parameters;
import com.google.crypto.tink.util.Bytes;

public abstract class ParametersParser<SerializationT extends Serialization>
{
    private final Bytes objectIdentifier;
    private final Class<SerializationT> serializationClass;
    
    private ParametersParser(final Bytes objectIdentifier, final Class<SerializationT> serializationClass) {
        this.objectIdentifier = objectIdentifier;
        this.serializationClass = serializationClass;
    }
    
    public abstract Parameters parseParameters(final SerializationT serialization) throws GeneralSecurityException;
    
    public final Bytes getObjectIdentifier() {
        return this.objectIdentifier;
    }
    
    public final Class<SerializationT> getSerializationClass() {
        return this.serializationClass;
    }
    
    public static <SerializationT extends Serialization> ParametersParser<SerializationT> create(final ParametersParsingFunction<SerializationT> function, final Bytes objectIdentifier, final Class<SerializationT> serializationClass) {
        return new ParametersParser<SerializationT>(objectIdentifier, serializationClass) {
            @Override
            public Parameters parseParameters(final SerializationT serialization) throws GeneralSecurityException {
                return function.parseParameters(serialization);
            }
        };
    }
    
    public interface ParametersParsingFunction<SerializationT extends Serialization>
    {
        Parameters parseParameters(final SerializationT serialization) throws GeneralSecurityException;
    }
}
