crustal

Crates.iocrustal
lib.rscrustal
version0.3.5
sourcesrc
created_at2022-02-10 19:28:51.189246
updated_at2023-11-03 23:21:26.55478
descriptionA library for generating C/C++ code.
homepagehttps://github.com/achreto/crustal
repositoryhttps://github.com/achreto/crustal
max_upload_size
id530400
size195,892
Reto Achermann (achreto)

documentation

https://docs.rs/crustal/

README

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;
}
Commit count: 136

cargo fmt