/* * Copyright 2015 LINE Corporation * * LINE Corporation licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package com.linecorp.armeria.common.thrift; import static java.util.Objects.requireNonNull; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TCompactProtocol; import org.apache.thrift.protocol.TJSONProtocol; import org.apache.thrift.protocol.TProtocolFactory; import com.linecorp.armeria.common.SerializationFormat; import com.linecorp.armeria.common.thrift.text.TTextProtocol; /** * Provides a set of the known {@link TProtocolFactory} instances. */ public final class ThriftProtocolFactories { /** * {@link TProtocolFactory} for Thrift TBinary protocol. */ public static final TProtocolFactory BINARY = new TBinaryProtocol.Factory() { private static final long serialVersionUID = -9020693963961565748L; @Override public String toString() { return "TProtocolFactory(binary)"; } }; /** * {@link TProtocolFactory} for Thrift TCompact protocol. */ public static final TProtocolFactory COMPACT = new TCompactProtocol.Factory() { private static final long serialVersionUID = 1629726795326210377L; @Override public String toString() { return "TProtocolFactory(compact)"; } }; /** * {@link TProtocolFactory} for the Thrift TJSON protocol. */ public static final TProtocolFactory JSON = new TJSONProtocol.Factory() { private static final long serialVersionUID = 7690636602996870153L; @Override public String toString() { return "TProtocolFactory(JSON)"; } }; /** * {@link TProtocolFactory} for the Thrift TText protocol. */ public static final TProtocolFactory TEXT = new TTextProtocol.Factory() { private static final long serialVersionUID = 4430306676070073610L; @Override public String toString() { return "TProtocolFactory(TTEXT)"; } }; /** * Returns the {@link TProtocolFactory} for the specified {@link SerializationFormat}. * * @throws IllegalArgumentException if the specified {@link SerializationFormat} is not for Thrift */ public static TProtocolFactory get(SerializationFormat serializationFormat) { requireNonNull(serializationFormat, "serializationFormat"); if (serializationFormat == ThriftSerializationFormats.BINARY) { return BINARY; } if (serializationFormat == ThriftSerializationFormats.COMPACT) { return COMPACT; } if (serializationFormat == ThriftSerializationFormats.JSON) { return JSON; } if (serializationFormat == ThriftSerializationFormats.TEXT) { return TEXT; } throw new IllegalArgumentException("non-Thrift serializationFormat: " + serializationFormat); } /** * Returns the {@link SerializationFormat} for the specified {@link TProtocolFactory}. * * @throws IllegalArgumentException if the specified {@link TProtocolFactory} is not known by this class */ public static SerializationFormat toSerializationFormat(TProtocolFactory protoFactory) { requireNonNull(protoFactory, "protoFactory"); if (protoFactory instanceof TBinaryProtocol.Factory) { return ThriftSerializationFormats.BINARY; } else if (protoFactory instanceof TCompactProtocol.Factory) { return ThriftSerializationFormats.COMPACT; } else if (protoFactory instanceof TJSONProtocol.Factory) { return ThriftSerializationFormats.JSON; } else if (protoFactory instanceof TTextProtocol.Factory) { return ThriftSerializationFormats.TEXT; } else { throw new IllegalArgumentException( "unsupported TProtocolFactory: " + protoFactory.getClass().getName()); } } private ThriftProtocolFactories() {} }