1 /* 2 * librdkafka - The Apache Kafka C/C++ library 3 * 4 * Copyright (c) 2020 Magnus Edenhill 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 30 #ifndef _RDKAFKA_ERROR_H_ 31 #define _RDKAFKA_ERROR_H_ 32 33 #include <stdarg.h> 34 35 /** 36 * @name Public API complex error type implementation. 37 * 38 */ 39 40 struct rd_kafka_error_s { 41 rd_kafka_resp_err_t code; /**< Error code. */ 42 char *errstr; /**< Human readable error string, allocated 43 * with the rd_kafka_error_s struct 44 * after the struct. 45 * Possibly NULL. */ 46 rd_bool_t fatal; /**< This error is a fatal error. */ 47 rd_bool_t retriable; /**< Operation is retriable. */ 48 rd_bool_t txn_requires_abort; /**< This is an abortable transaction error.*/ 49 }; 50 51 52 rd_kafka_error_t *rd_kafka_error_new_v (rd_kafka_resp_err_t code, 53 const char *fmt, va_list ap); 54 55 rd_kafka_error_t *rd_kafka_error_copy (const rd_kafka_error_t *src); 56 57 void rd_kafka_error_set_fatal (rd_kafka_error_t *error); 58 void rd_kafka_error_set_retriable (rd_kafka_error_t *error); 59 void rd_kafka_error_set_txn_requires_abort (rd_kafka_error_t *error); 60 61 62 rd_kafka_error_t *rd_kafka_error_new_fatal (rd_kafka_resp_err_t code, 63 const char *fmt, ...) 64 RD_FORMAT(printf, 2, 3); 65 rd_kafka_error_t *rd_kafka_error_new_retriable (rd_kafka_resp_err_t code, 66 const char *fmt, ...) 67 RD_FORMAT(printf, 2, 3); 68 rd_kafka_error_t * 69 rd_kafka_error_new_txn_requires_abort (rd_kafka_resp_err_t code, 70 const char *fmt, ...) 71 RD_FORMAT(printf, 2, 3); 72 73 74 rd_kafka_resp_err_t rd_kafka_error_to_legacy (rd_kafka_error_t *error, 75 char *errstr, size_t errstr_size); 76 #endif /* _RDKAFKA_ERROR_H_ */ 77