Camo
Documentation | Repository | Releases
Camo is a library for converting Rust type definitions into corresponding definitions in other languages.
-
Abstract syntax tree - Camo provides a collection of data structures that describe a subset of the Rust syntax. The syntax tree is rooted in
core::Container, which types provide via thecore::Camotrait. -
Derive macro - The
derive::Camoderive macro automates the work of creating the syntax tree for your type. The macro takesserdeattributes into account, ensuring that generated types accurately describe the values thatserdewould produce. -
TypeScript backend - The
typescriptmodule provides a ready-to-use TypeScript backend. Convert acore::Containerinto atypescript::Definition, and write it to a file.
Getting started
Add Camo as a dependency:
# `derive` is included by default
# optionally add the typescript backend
Add the Camo derive macro to your type:
use Camo;
Use the generated Camo::camo() implementation:
With the typescript feature enabled, create a TypeScript definition:
use ;
/* ... */
See more examples here.
Features
| Feature | Default | Description |
|---|---|---|
derive |
Yes | Enables the derive::Camo derive macro. |
typescript |
No | Enables the TypeScript backend, rooted in typescript::Definition. |
Crates
This project is composed of multiple crates in order to organize features.
Note that only camo is intended for general use.
| Crate | Description |
|---|---|
camo |
This crate consolidates the subcrates, and is the only crate intended for general use. It exposes camo-core, and optionally exposes camo-derive and camo-typescript via feature switches. |
camo-core |
This crate defines the AST at the core of camo, and is thus the foundation that the other crates build upon. |
camo-derive |
This crate defines the derive macro Camo. |
camo-typescript |
This crate implements a translation layer from the Camo AST to TypeScript definitions that can be written out directly, e.g. a file. |
License
camo is distributed under the terms of the MIT license. See LICENSE for details.