This source file includes following definitions.
- sub_error_code
 
- message
 
- get_error_string
 
- get_error_string
 
- error_struct
 
#include "error.h"
#include <assert.h>
const char heif::Error::kSuccess[] = "Success";
const char* cUnknownError = "Unknown error";
heif::Error::Error()
  : error_code(heif_error_Ok),
    sub_error_code(heif_suberror_Unspecified)
{
}
heif::Error::Error(heif_error_code c,
                   heif_suberror_code sc,
                   std::string msg)
  : error_code(c),
    sub_error_code(sc),
    message(msg)
{
}
const char* heif::Error::get_error_string(heif_error_code err)
{
  switch (err) {
  case heif_error_Ok: return "Success";
  case heif_error_Input_does_not_exist: return "Input file does not exist";
  case heif_error_Invalid_input: return "Invalid input";
  case heif_error_Unsupported_filetype: return "Unsupported file-type";
  case heif_error_Unsupported_feature: return "Unsupported feature";
  case heif_error_Usage_error: return "Usage error";
  case heif_error_Memory_allocation_error: return "Memory allocation error";
  case heif_error_Decoder_plugin_error: return "Decoder plugin generated an error";
  case heif_error_Encoder_plugin_error: return "Encoder plugin generated an error";
  case heif_error_Encoding_error: return "Error during encoding or writing output file";
  }
  assert(false);
  return "Unknown error";
}
const char* heif::Error::get_error_string(heif_suberror_code err)
{
  switch (err) {
  case heif_suberror_Unspecified: return "Unspecified";
    
  case heif_suberror_End_of_data: return "Unexpected end of file";
  case heif_suberror_Invalid_box_size: return "Invalid box size";
  case heif_suberror_Invalid_grid_data: return "Invalid grid data";
  case heif_suberror_Missing_grid_images: return "Missing grid images";
  case heif_suberror_No_ftyp_box: return "No 'ftyp' box";
  case heif_suberror_No_idat_box: return "No 'idat' box";
  case heif_suberror_No_meta_box: return "No 'meta' box";
  case heif_suberror_No_hdlr_box: return "No 'hdlr' box";
  case heif_suberror_No_hvcC_box: return "No 'hvcC' box";
  case heif_suberror_No_pitm_box: return "No 'pitm' box";
  case heif_suberror_No_ipco_box: return "No 'ipco' box";
  case heif_suberror_No_ipma_box: return "No 'ipma' box";
  case heif_suberror_No_iloc_box: return "No 'iloc' box";
  case heif_suberror_No_iinf_box: return "No 'iinf' box";
  case heif_suberror_No_iprp_box: return "No 'iprp' box";
  case heif_suberror_No_iref_box: return "No 'iref' box";
  case heif_suberror_No_infe_box: return "No 'infe' box";
  case heif_suberror_No_pict_handler: return "Not a 'pict' handler";
  case heif_suberror_Ipma_box_references_nonexisting_property: return "'ipma' box references a non-existing property";
  case heif_suberror_No_properties_assigned_to_item: return "No properties assigned to item";
  case heif_suberror_No_item_data: return "Item has no data";
  case heif_suberror_Invalid_clean_aperture: return "Invalid clean-aperture specification";
  case heif_suberror_Invalid_overlay_data: return "Invalid overlay data";
  case heif_suberror_Overlay_image_outside_of_canvas: return "Overlay image outside of canvas area";
  case heif_suberror_Auxiliary_image_type_unspecified: return "Type of auxiliary image unspecified";
  case heif_suberror_No_or_invalid_primary_item: return "No or invalid primary item";
    
  case heif_suberror_Security_limit_exceeded: return "Security limit exceeded";
    
  case heif_suberror_Nonexisting_item_referenced: return "Non-existing item ID referenced";
  case heif_suberror_Null_pointer_argument: return "NULL argument received";
  case heif_suberror_Nonexisting_image_channel_referenced: return "Non-existing image channel referenced";
  case heif_suberror_Unsupported_plugin_version: return "The version of the passed plugin is not supported";
  case heif_suberror_Unsupported_writer_version: return "The version of the passed writer is not supported";
  case heif_suberror_Unsupported_parameter: return "Unsupported parameter";
  case heif_suberror_Invalid_parameter_value: return "Invalid parameter value";
    
  case heif_suberror_Unsupported_codec: return "Unsupported codec";
  case heif_suberror_Unsupported_image_type: return "Unsupported image type";
  case heif_suberror_Unsupported_data_version: return "Unsupported data version";
  case heif_suberror_Unsupported_color_conversion: return "Unsupported color conversion";
  case heif_suberror_Unsupported_item_construction_method: return "Unsupported item construction method";
    
    
  case heif_suberror_Cannot_write_output_data: return "Cannot write output data";
  }
  assert(false);
  return cUnknownError;
}
heif_error heif::Error::error_struct(ErrorBuffer* error_buffer) const
{
  if (error_buffer) {
    if (error_code == heif_error_Ok) {
      error_buffer->set_success();
    }
    else {
      std::stringstream sstr;
      sstr << get_error_string(error_code) << ": "
           << get_error_string(sub_error_code);
      if (!message.empty()) {
        sstr << ": " << message;
      }
      error_buffer->set_error(sstr.str());
    }
  }
  heif_error err;
  err.code = error_code;
  err.subcode = sub_error_code;
  if (error_buffer) {
    err.message = error_buffer->get_error();
  }
  else {
    err.message = cUnknownError;
  }
  return err;
}