/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF 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.
 */

#ifndef __C_COMMON_H__
#define __C_COMMON_H__

#ifdef __cplusplus
extern "C" {
#endif

#define  MAX_MESSAGE_ID_LENGTH 256
#define  MAX_TOPIC_LENGTH 512
#define  MAX_BROKER_NAME_ID_LENGTH 256
typedef enum _CStatus_{
    // Success
    OK = 0,
    // Failed, null pointer value
    NULL_POINTER = 1,
    MALLOC_FAILED = 2,
    PRODUCER_ERROR_CODE_START = 10,
    PRODUCER_START_FAILED = 10,
    PRODUCER_SEND_SYNC_FAILED = 11,
    PRODUCER_SEND_ONEWAY_FAILED = 12,
    PRODUCER_SEND_ORDERLY_FAILED = 13,

    PUSHCONSUMER_ERROR_CODE_START = 20,
    PUSHCONSUMER_START_FAILED = 20,

    PULLCONSUMER_ERROR_CODE_START = 30,
    PULLCONSUMER_START_FAILED = 30,
    PULLCONSUMER_FETCH_MQ_FAILED = 31,
    PULLCONSUMER_FETCH_MESSAGE_FAILED = 32
} CStatus;

typedef enum _CLogLevel_{
    E_LOG_LEVEL_FATAL = 1,
    E_LOG_LEVEL_ERROR = 2,
    E_LOG_LEVEL_WARN = 3,
    E_LOG_LEVEL_INFO = 4,
    E_LOG_LEVEL_DEBUG = 5,
    E_LOG_LEVEL_TRACE = 6,
    E_LOG_LEVEL_LEVEL_NUM = 7
} CLogLevel;


#ifdef WIN32
#ifdef ROCKETMQCLIENT_EXPORTS
#ifdef _WINDLL
#define ROCKETMQCLIENT_API __declspec(dllexport)
#else
#define ROCKETMQCLIENT_API
#endif
#else
#ifdef ROCKETMQCLIENT_IMPORT
#define ROCKETMQCLIENT_API __declspec(dllimport)
#else
#define ROCKETMQCLIENT_API
#endif
#endif
#else
#define ROCKETMQCLIENT_API
#endif

typedef enum _CMessageModel_{
    BROADCASTING,
    CLUSTERING
} CMessageModel;

#ifdef __cplusplus
};
#endif
#endif //__C_COMMON_H__
