9 releases

0.3.5 Nov 3, 2023
0.3.0 Jul 28, 2023
0.2.0 Mar 1, 2022
0.1.7 Feb 23, 2022

#330 in Rust patterns

MIT license

180KB
3.5K SLoC

CRustAL: The C/C++ from Rust Assembly Library

This crate provides a library with builder API for assembling C/C++ code from Rust.

LICENSE

MIT license

CONTRIBUTING

Code contributions are welcome. The submitter must use the sign-off feature for all commits confirming that the submitter has all rights to contribute the code under the license without any additional terms or conditions.

See the AUTHORS file for a list of contributors.

CREDIT

This crate is inspired by codegen-rs`

Installation

To use crustal clone the repository into the lib folder of your Rust project, or use crates.io

Usage

You can use crustal by adding the following lines to Cargo.toml file.

[dependencies]
crustal

Next, create a Scope and use the builder API to create elements in the scope. Lastly, call Scope::to_string() to get formatted C code as a string.

use crustal as CG;

let mut scope = CG::Scope::new();
scope.set_filename("include/my_file.hpp");

scope.push_doc_str("WARNING: This is auto-generated comment\n");
scope.new_include("stdio.h", true);

scope.new_class("MyClass")
        .set_base("StateBase", CG::Visibility::Public)
        .push_attribute(CG::Attribute::new(
        "name",
        CG::Type::new(CG::BaseType::new_int(8)),
    ));

println!("{}", scope.to_string());

produces the output

/// WARNING: This is auto-generated comment
#include <stdio.h>
class MyClass : public StateBase {

    private:
    uint64_t name;
}

No runtime deps