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

io.airlift.drift.TApplicationException Maven / Gradle / Ivy

/*
 * Copyright (C) 2017 Facebook, Inc.
 *
 * Licensed 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 io.airlift.drift;

import io.airlift.drift.annotations.ThriftConstructor;
import io.airlift.drift.annotations.ThriftField;
import io.airlift.drift.annotations.ThriftStruct;

import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

import static java.util.Collections.unmodifiableMap;
import static java.util.Objects.requireNonNull;
import static java.util.function.Function.identity;

@ThriftStruct
public class TApplicationException
        extends TException
{
    public enum Type
    {
        UNKNOWN(0),
        UNKNOWN_METHOD(1),
        INVALID_MESSAGE_TYPE(2),
        WRONG_METHOD_NAME(3),
        BAD_SEQUENCE_ID(4),
        MISSING_RESULT(5),
        INTERNAL_ERROR(6),
        PROTOCOL_ERROR(7),
        INVALID_TRANSFORM(8),
        INVALID_PROTOCOL(9),
        UNSUPPORTED_CLIENT_TYPE(10);

        private final int type;

        Type(int type)
        {
            this.type = type;
        }

        public int getType()
        {
            return type;
        }

        private static final Map TYPES_BY_ID = unmodifiableMap(Arrays.stream(Type.values())
                .collect(Collectors.toMap(Type::getType, identity())));

        public static Optional fromTypeId(int typeId)
        {
            return Optional.ofNullable(TYPES_BY_ID.get(typeId));
        }
    }

    private final int typeValue;
    private final Optional type;

    public TApplicationException()
    {
        this(Type.UNKNOWN, null);
    }

    public TApplicationException(Type type, String message)
    {
        super(message);
        requireNonNull(type, "type is null");
        this.type = Optional.of(type);
        this.typeValue = type.getType();
    }

    @ThriftConstructor
    public TApplicationException(int typeValue, String message)
    {
        super(message);
        this.typeValue = typeValue;
        this.type = Type.fromTypeId(typeValue);
    }

    @Override
    @ThriftField(1)
    public String getMessage()
    {
        return super.getMessage();
    }

    @ThriftField(2)
    public int getTypeValue()
    {
        return typeValue;
    }

    public Optional getType()
    {
        return type;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy