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

package com.google.crypto.tink.internal;

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

public abstract class ParametersSerializer<ParametersT extends Parameters, SerializationT extends Serialization>
{
    private final Class<ParametersT> parametersClass;
    private final Class<SerializationT> serializationClass;
    
    private ParametersSerializer(final Class<ParametersT> parametersClass, final Class<SerializationT> serializationClass) {
        this.parametersClass = parametersClass;
        this.serializationClass = serializationClass;
    }
    
    public abstract SerializationT serializeParameters(final ParametersT parameters) throws GeneralSecurityException;
    
    public Class<ParametersT> getParametersClass() {
        return this.parametersClass;
    }
    
    public Class<SerializationT> getSerializationClass() {
        return this.serializationClass;
    }
    
    public static <ParametersT extends Parameters, SerializationT extends Serialization> ParametersSerializer<ParametersT, SerializationT> create(final ParametersSerializationFunction<ParametersT, SerializationT> function, final Class<ParametersT> parametersClass, final Class<SerializationT> serializationClass) {
        return new ParametersSerializer<ParametersT, SerializationT>(parametersClass, serializationClass) {
            @Override
            public SerializationT serializeParameters(final ParametersT parameters) throws GeneralSecurityException {
                return function.serializeParameters(parameters);
            }
        };
    }
    
    public interface ParametersSerializationFunction<ParametersT extends Parameters, SerializationT extends Serialization>
    {
        SerializationT serializeParameters(final ParametersT key) throws GeneralSecurityException;
    }
}
