honzo-c 0.1.1

C FFI bindings for the Honzo ebook format
#ifndef HonzoBuilderHandle_HPP
#define HonzoBuilderHandle_HPP

#include "HonzoBuilderHandle.d.hpp"

#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <memory>
#include <functional>
#include <optional>
#include <cstdlib>
#include "diplomat_runtime.hpp"


namespace diplomat {
namespace capi {
    extern "C" {

    diplomat::capi::HonzoBuilderHandle* HonzoBuilderHandle_new(void);

    bool HonzoBuilderHandle_add_chunk(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatU8View tag, diplomat::capi::DiplomatU8View data, uint8_t compression, uint8_t content_type_kind, uint8_t content_type_value, uint8_t cover_type, diplomat::capi::DiplomatStringView alt_text, int32_t font_embedding, diplomat::capi::DiplomatStringView font_license_url);

    bool HonzoBuilderHandle_set_language(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatStringView lang);

    bool HonzoBuilderHandle_set_auto_sidx(diplomat::capi::HonzoBuilderHandle* self, bool enable);

    bool HonzoBuilderHandle_set_auto_covt(diplomat::capi::HonzoBuilderHandle* self, bool enable);

    bool HonzoBuilderHandle_set_layout(diplomat::capi::HonzoBuilderHandle* self, uint8_t layout);

    bool HonzoBuilderHandle_set_flags(diplomat::capi::HonzoBuilderHandle* self, uint32_t flags);

    bool HonzoBuilderHandle_set_min_reader_version(diplomat::capi::HonzoBuilderHandle* self, uint16_t version);

    bool HonzoBuilderHandle_add_pmap_entry(diplomat::capi::HonzoBuilderHandle* self, uint32_t print_page, uint32_t chunk_id, uint32_t byte_offset);

    bool HonzoBuilderHandle_add_math_chunk(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatU8View data, uint8_t math_type, uint8_t compression);

    bool HonzoBuilderHandle_set_meta(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatU8View msgpack);

    bool HonzoBuilderHandle_set_extra(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatU8View extra);

    bool HonzoBuilderHandle_add_extra_entry(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatU8View tag, diplomat::capi::DiplomatStringView namespace_, diplomat::capi::DiplomatU8View body);

    bool HonzoBuilderHandle_add_annotation(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatU8View body);

    bool HonzoBuilderHandle_set_drm_config(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatU32View encrypt_chunk_ids, diplomat::capi::DiplomatU8View recipient_public_key, diplomat::capi::DiplomatStringView license_url, uint64_t expires_at);

    bool HonzoBuilderHandle_add_sync_cue(diplomat::capi::HonzoBuilderHandle* self, diplomat::capi::DiplomatU8View body);

    bool HonzoBuilderHandle_finalize(diplomat::capi::HonzoBuilderHandle* self);

    diplomat::capi::DiplomatU8View HonzoBuilderHandle_get_result(const diplomat::capi::HonzoBuilderHandle* self);

    void HonzoBuilderHandle_destroy(HonzoBuilderHandle* self);

    } // extern "C"
} // namespace capi
} // namespace

inline std::unique_ptr<HonzoBuilderHandle> HonzoBuilderHandle::new_() {
    auto result = diplomat::capi::HonzoBuilderHandle_new();
    return std::unique_ptr<HonzoBuilderHandle>(HonzoBuilderHandle::FromFFI(result));
}

inline diplomat::result<bool, diplomat::Utf8Error> HonzoBuilderHandle::add_chunk(diplomat::span<const uint8_t> tag, diplomat::span<const uint8_t> data, uint8_t compression, uint8_t content_type_kind, uint8_t content_type_value, uint8_t cover_type, std::string_view alt_text, int32_t font_embedding, std::string_view font_license_url) {
    if (!diplomat::capi::diplomat_is_str(alt_text.data(), alt_text.size())) {
    return diplomat::Err<diplomat::Utf8Error>();
  }
    if (!diplomat::capi::diplomat_is_str(font_license_url.data(), font_license_url.size())) {
    return diplomat::Err<diplomat::Utf8Error>();
  }
    auto result = diplomat::capi::HonzoBuilderHandle_add_chunk(this->AsFFI(),
        {tag.data(), tag.size()},
        {data.data(), data.size()},
        compression,
        content_type_kind,
        content_type_value,
        cover_type,
        {alt_text.data(), alt_text.size()},
        font_embedding,
        {font_license_url.data(), font_license_url.size()});
    return diplomat::Ok<bool>(result);
}

inline diplomat::result<bool, diplomat::Utf8Error> HonzoBuilderHandle::set_language(std::string_view lang) {
    if (!diplomat::capi::diplomat_is_str(lang.data(), lang.size())) {
    return diplomat::Err<diplomat::Utf8Error>();
  }
    auto result = diplomat::capi::HonzoBuilderHandle_set_language(this->AsFFI(),
        {lang.data(), lang.size()});
    return diplomat::Ok<bool>(result);
}

inline bool HonzoBuilderHandle::set_auto_sidx(bool enable) {
    auto result = diplomat::capi::HonzoBuilderHandle_set_auto_sidx(this->AsFFI(),
        enable);
    return result;
}

inline bool HonzoBuilderHandle::set_auto_covt(bool enable) {
    auto result = diplomat::capi::HonzoBuilderHandle_set_auto_covt(this->AsFFI(),
        enable);
    return result;
}

inline bool HonzoBuilderHandle::set_layout(uint8_t layout) {
    auto result = diplomat::capi::HonzoBuilderHandle_set_layout(this->AsFFI(),
        layout);
    return result;
}

inline bool HonzoBuilderHandle::set_flags(uint32_t flags) {
    auto result = diplomat::capi::HonzoBuilderHandle_set_flags(this->AsFFI(),
        flags);
    return result;
}

inline bool HonzoBuilderHandle::set_min_reader_version(uint16_t version) {
    auto result = diplomat::capi::HonzoBuilderHandle_set_min_reader_version(this->AsFFI(),
        version);
    return result;
}

inline bool HonzoBuilderHandle::add_pmap_entry(uint32_t print_page, uint32_t chunk_id, uint32_t byte_offset) {
    auto result = diplomat::capi::HonzoBuilderHandle_add_pmap_entry(this->AsFFI(),
        print_page,
        chunk_id,
        byte_offset);
    return result;
}

inline bool HonzoBuilderHandle::add_math_chunk(diplomat::span<const uint8_t> data, uint8_t math_type, uint8_t compression) {
    auto result = diplomat::capi::HonzoBuilderHandle_add_math_chunk(this->AsFFI(),
        {data.data(), data.size()},
        math_type,
        compression);
    return result;
}

inline bool HonzoBuilderHandle::set_meta(diplomat::span<const uint8_t> msgpack) {
    auto result = diplomat::capi::HonzoBuilderHandle_set_meta(this->AsFFI(),
        {msgpack.data(), msgpack.size()});
    return result;
}

inline bool HonzoBuilderHandle::set_extra(diplomat::span<const uint8_t> extra) {
    auto result = diplomat::capi::HonzoBuilderHandle_set_extra(this->AsFFI(),
        {extra.data(), extra.size()});
    return result;
}

inline diplomat::result<bool, diplomat::Utf8Error> HonzoBuilderHandle::add_extra_entry(diplomat::span<const uint8_t> tag, std::string_view namespace_, diplomat::span<const uint8_t> body) {
    if (!diplomat::capi::diplomat_is_str(namespace_.data(), namespace_.size())) {
    return diplomat::Err<diplomat::Utf8Error>();
  }
    auto result = diplomat::capi::HonzoBuilderHandle_add_extra_entry(this->AsFFI(),
        {tag.data(), tag.size()},
        {namespace_.data(), namespace_.size()},
        {body.data(), body.size()});
    return diplomat::Ok<bool>(result);
}

inline bool HonzoBuilderHandle::add_annotation(diplomat::span<const uint8_t> body) {
    auto result = diplomat::capi::HonzoBuilderHandle_add_annotation(this->AsFFI(),
        {body.data(), body.size()});
    return result;
}

inline diplomat::result<bool, diplomat::Utf8Error> HonzoBuilderHandle::set_drm_config(diplomat::span<const uint32_t> encrypt_chunk_ids, diplomat::span<const uint8_t> recipient_public_key, std::string_view license_url, uint64_t expires_at) {
    if (!diplomat::capi::diplomat_is_str(license_url.data(), license_url.size())) {
    return diplomat::Err<diplomat::Utf8Error>();
  }
    auto result = diplomat::capi::HonzoBuilderHandle_set_drm_config(this->AsFFI(),
        {encrypt_chunk_ids.data(), encrypt_chunk_ids.size()},
        {recipient_public_key.data(), recipient_public_key.size()},
        {license_url.data(), license_url.size()},
        expires_at);
    return diplomat::Ok<bool>(result);
}

inline bool HonzoBuilderHandle::add_sync_cue(diplomat::span<const uint8_t> body) {
    auto result = diplomat::capi::HonzoBuilderHandle_add_sync_cue(this->AsFFI(),
        {body.data(), body.size()});
    return result;
}

inline bool HonzoBuilderHandle::finalize() {
    auto result = diplomat::capi::HonzoBuilderHandle_finalize(this->AsFFI());
    return result;
}

inline diplomat::span<const uint8_t> HonzoBuilderHandle::get_result() const {
    auto result = diplomat::capi::HonzoBuilderHandle_get_result(this->AsFFI());
    return diplomat::span<const uint8_t>(result.data, result.len);
}

inline const diplomat::capi::HonzoBuilderHandle* HonzoBuilderHandle::AsFFI() const {
    return reinterpret_cast<const diplomat::capi::HonzoBuilderHandle*>(this);
}

inline diplomat::capi::HonzoBuilderHandle* HonzoBuilderHandle::AsFFI() {
    return reinterpret_cast<diplomat::capi::HonzoBuilderHandle*>(this);
}

inline const HonzoBuilderHandle* HonzoBuilderHandle::FromFFI(const diplomat::capi::HonzoBuilderHandle* ptr) {
    return reinterpret_cast<const HonzoBuilderHandle*>(ptr);
}

inline HonzoBuilderHandle* HonzoBuilderHandle::FromFFI(diplomat::capi::HonzoBuilderHandle* ptr) {
    return reinterpret_cast<HonzoBuilderHandle*>(ptr);
}

inline void HonzoBuilderHandle::operator delete(void* ptr) {
    diplomat::capi::HonzoBuilderHandle_destroy(reinterpret_cast<diplomat::capi::HonzoBuilderHandle*>(ptr));
}


#endif // HonzoBuilderHandle_HPP