flapigen 0.11.0

Tool for connecting libraries written in Rust with other languages
Documentation
r##"#pragma once

//for assert
#include <cassert>
//for std::abort
#include <cstdlib>
//for std::move
#include <utility>


#include "c_Foo.h"

namespace org_examples {


class Foo {
public:
    using SelfType = FooOpaque *;
    using CForeignType = FooOpaque;

    Foo(Foo &&o) noexcept: self_(o.self_)
    {
        o.self_ = nullptr;
    }
    Foo &operator=(Foo &&o) noexcept
    {
        assert(this != &o);
        free_mem(this->self_);
        self_ = o.self_;
        o.self_ = nullptr;
        return *this;
    }
    explicit Foo(SelfType o) noexcept: self_(o) {}
    FooOpaque *release() noexcept
    {
        FooOpaque *ret = self_;
        self_ = nullptr;
        return ret;
    }
    explicit operator SelfType() const noexcept { return self_; }

    Foo(const Foo&) = delete;
    Foo &operator=(const Foo&) = delete;

    Foo() noexcept
    {

        this->self_ = Foo_new();
        if (this->self_ == nullptr) {
            std::abort();
        }
    }

    void method() const noexcept;

    static void static_func() noexcept;

private:
   static void free_mem(SelfType &p) noexcept
   {
        if (p != nullptr) {
            Foo_delete(p);
        }
        p = nullptr;
   }
public:
    ~Foo() noexcept
    {
        free_mem(this->self_);
    }

private:
    SelfType self_;
};


    inline void Foo::method() const noexcept
    {

        Foo_method(this->self_);
    }

    inline void Foo::static_func() noexcept
    {

        Foo_static_func();
    }

} // namespace org_examples"##;

r##"#pragma once

namespace org_examples {
class Foo;
} // namespace org_examples"##;

r##"class AppError {
public:
    using SelfType = AppErrorOpaque *;
    using CForeignType = AppErrorOpaque;

    AppError(AppError &&o) noexcept: self_(o.self_)
    {
        o.self_ = nullptr;
    }
    AppError &operator=(AppError &&o) noexcept
    {
        assert(this != &o);
        free_mem(this->self_);
        self_ = o.self_;
        o.self_ = nullptr;
        return *this;
    }
    explicit AppError(SelfType o) noexcept: self_(o) {}
    AppErrorOpaque *release() noexcept
    {
        AppErrorOpaque *ret = self_;
        self_ = nullptr;
        return ret;
    }
    explicit operator SelfType() const noexcept { return self_; }

    AppError(const AppError& o) noexcept {
         
         if (o.self_ != nullptr) {
             self_ = AppError_clone(o.self_);
         } else {
             self_ = nullptr;
         }
    }
    AppError &operator=(const AppError& o) noexcept {
        
        if (this != &o) {
            free_mem(this->self_);
            if (o.self_ != nullptr) {
                self_ = AppError_clone(o.self_);
            } else {
                self_ = nullptr;
            }
        }
        return *this;
    }
private:

    AppError() noexcept {}
public:

    AppError clone() const noexcept;

    std::string_view err_abbr() const noexcept;

private:
   static void free_mem(SelfType &p) noexcept
   {
        if (p != nullptr) {
            AppError_delete(p);
        }
        p = nullptr;
   }
public:
    ~AppError() noexcept
    {
        free_mem(this->self_);
    }


    QString display() const noexcept;


private:
    SelfType self_;
};"##;